public void Given_String_When_GeneratePermutations_Then_ShoulReturnPermutationsOfString()
        {
            //Given
            var str     = "abc";
            var problem = new StringPermutationsV3();
            var expectedPermutations = new HashSet <string>
            {
                "abc", "acb",
                "bac", "bca",
                "cba", "cab"
            };

            //When
            var actualPermutations = problem.GeneratePermutations(str);

            //Then
            Assert.AreEqual(expectedPermutations.Count, actualPermutations.Count);
            foreach (var item in actualPermutations)
            {
                Assert.AreEqual(true, expectedPermutations.Contains(item));
            }
        }
        public void GivenString_GeneratePermutations_ReturnsListOfPermutations()
        {
            //Arrange
            var str = "aab";
            var expectedPermutations = new HashSet <string>
            {
                "aab",
                "aba",
                "baa"
            };
            var stringPermutation = new StringPermutationsV3();

            //Act
            var actualPermutations = stringPermutation.GeneratePermutations(str);

            //Assert
            Assert.AreEqual(expectedPermutations.Count, actualPermutations.Count);
            for (var i = 0; i < actualPermutations.Count; i++)
            {
                Assert.AreEqual(true, expectedPermutations.Contains(actualPermutations[i]));
            }
        }