public void Parse(string key, TransformationKeyType type, string[] path)
        {
            // Act

            var transformationKey = new TransformationKey(key);

            // Assert

            Assert.Equal(type, transformationKey.Type);
            Assert.Equal(path.AsEnumerable(), transformationKey.Path);
        }
        private void addTransformation(HashSet <TransformationKey> set, int[] tempk, int keylen)
        {
            if (!isKeyValid(tempk, keylen))
            {
                //Console.WriteLine("Invalid transformation");
                return;
            }

            try
            {
                TransformationKey key = new TransformationKey(tempk, keylen);
                bool found            = false;
                foreach (TransformationKey k in set)
                {
                    found = true;
                    int[] transformation1 = k.getKey();
                    int[] transformation2 = key.getKey();
                    for (int i = 0; i < transformation1.Length; i++)
                    {
                        if (transformation1[i] != transformation2[i])
                        {
                            found = false;
                            break;
                        }
                    }
                    if (found)
                    {
                        break;
                    }
                }
                //found = false; //original lasry
                if (!found)
                {
                    set.Add(key);
                }
            }
            catch (System.OutOfMemoryException e)
            {
                Environment.Exit(-1);
            }
        }