Once initialized with a bit array, this object returns values in a deterministic way. Facilitates recreating scenarios where some randomness is needed.
        public void BoolValuesShouldBeReturnedInCycle(int length)
        {
            // Arrange
            var random = new DeterministicRandom(length);

            // Act
            var cycle1 = Enumerable.Range(1, length).Select(i => random.NextBool()).ToArray();
            var cycle2 = Enumerable.Range(1, length).Select(i => random.NextBool()).ToArray();
            var cycle3 = Enumerable.Range(1, length).Select(i => random.NextBool()).ToArray();

            // Assert
            CollectionAssert.AreEqual(cycle1, cycle2);
            CollectionAssert.AreEqual(cycle2, cycle3);
        }
Example #2
0
        public void IntegerValuesShouldBeReturnedInCycle(int length)
        {
            // Arrange
            var random = new DeterministicRandom(length);

            // Act
            var cycle1 = Enumerable.Range(1, length).Select(i => random.NextInt()).ToArray();
            var cycle2 = Enumerable.Range(1, length).Select(i => random.NextInt()).ToArray();
            var cycle3 = Enumerable.Range(1, length).Select(i => random.NextInt()).ToArray();

            // Assert
            CollectionAssert.AreEqual(cycle1, cycle2);
            CollectionAssert.AreEqual(cycle2, cycle3);
        }
        public void InitializedWithStringShouldWorkAsExpected(string bits)
        {
            // Arrange
            var length = bits.Length;
            var random = new DeterministicRandom(bits);

            // Act
            var cycle1 = Enumerable.Range(1, length).Select(i => random.NextBool()).ToArray();
            var cycle2 = Enumerable.Range(1, length).Select(i => random.NextBool()).ToArray();
            var cycle3 = Enumerable.Range(1, length).Select(i => random.NextBool()).ToArray();

            // Assert
            CollectionAssert.AreEqual(cycle1, cycle2);
            CollectionAssert.AreEqual(cycle2, cycle3);

            for (var i = 0; i < length; ++i)
            {
                var bit = bits[i] == '1';
                Assert.AreEqual(bit, cycle1[i]);
            }
        }
Example #4
0
        public void InitializedWithStringShouldWorkAsExpected(string bits)
        {
            // Arrange
            var length = bits.Length;
            var random = new DeterministicRandom(bits);

            // Act
            var cycle1 = Enumerable.Range(1, length).Select(i => random.NextBool()).ToArray();
            var cycle2 = Enumerable.Range(1, length).Select(i => random.NextBool()).ToArray();
            var cycle3 = Enumerable.Range(1, length).Select(i => random.NextBool()).ToArray();

            // Assert
            CollectionAssert.AreEqual(cycle1, cycle2);
            CollectionAssert.AreEqual(cycle2, cycle3);

            for (var i = 0; i < length; ++i)
            {
                var bit = bits[i] == '1';
                Assert.AreEqual(bit, cycle1[i]);
            }
        }
        public void InitializedRandomlyAndThenReinitializedWithString(int length)
        {
            // Arrange
            var random1 = new DeterministicRandom(length);
            var bits = random1.ToString();
            var random2 = new DeterministicRandom(bits);

            // Act
            var cycle11 = Enumerable.Range(1, length).Select(i => random1.NextBool()).ToArray();
            var cycle12 = Enumerable.Range(1, length).Select(i => random1.NextBool()).ToArray();
            var cycle13 = Enumerable.Range(1, length).Select(i => random1.NextBool()).ToArray();

            var cycle21 = Enumerable.Range(1, length).Select(i => random2.NextBool()).ToArray();
            var cycle22 = Enumerable.Range(1, length).Select(i => random2.NextBool()).ToArray();
            var cycle23 = Enumerable.Range(1, length).Select(i => random2.NextBool()).ToArray();

            // Assert
            CollectionAssert.AreEqual(cycle11, cycle12);
            CollectionAssert.AreEqual(cycle12, cycle13);

            CollectionAssert.AreEqual(cycle11, cycle21);
            CollectionAssert.AreEqual(cycle12, cycle22);
            CollectionAssert.AreEqual(cycle13, cycle23);
        }
Example #6
0
        public void InitializedRandomlyAndThenReinitializedWithString(int length)
        {
            // Arrange
            var random1 = new DeterministicRandom(length);
            var bits    = random1.ToString();
            var random2 = new DeterministicRandom(bits);

            // Act
            var cycle11 = Enumerable.Range(1, length).Select(i => random1.NextBool()).ToArray();
            var cycle12 = Enumerable.Range(1, length).Select(i => random1.NextBool()).ToArray();
            var cycle13 = Enumerable.Range(1, length).Select(i => random1.NextBool()).ToArray();

            var cycle21 = Enumerable.Range(1, length).Select(i => random2.NextBool()).ToArray();
            var cycle22 = Enumerable.Range(1, length).Select(i => random2.NextBool()).ToArray();
            var cycle23 = Enumerable.Range(1, length).Select(i => random2.NextBool()).ToArray();

            // Assert
            CollectionAssert.AreEqual(cycle11, cycle12);
            CollectionAssert.AreEqual(cycle12, cycle13);

            CollectionAssert.AreEqual(cycle11, cycle21);
            CollectionAssert.AreEqual(cycle12, cycle22);
            CollectionAssert.AreEqual(cycle13, cycle23);
        }
        public static void Shuffle <T>(this IList <T> list, DeterministicRandom random)
        {
            var elementsCount = list.Count;

            Shuffle(list, () => random.NextInt() % elementsCount);
        }
 /// <summary>
 /// Initializes a new instance of <see cref="PatternCollectionGenerator"/>,
 /// using <see cref="DeterministicRandom"/> to get deterministic output.
 /// </summary>
 public PatternCollectionGenerator(DeterministicRandom random)
 {
     this.random = random;
 }
 /// <summary>
 /// Initializes a new instance of <see cref="PatternCollectionGenerator"/>,
 /// using <see cref="DeterministicRandom"/> to get deterministic output.
 /// </summary>
 public PatternCollectionGenerator(DeterministicRandom random)
 {
     this.random = random;
 }
 /// <summary>
 /// Initializes a new instance of <see cref="JContainerGenerator"/>,
 /// using <see cref="DeterministicRandom"/> to get deterministic output.
 /// </summary>
 public JContainerGenerator(DeterministicRandom random)
 {
     this.random = random;
 }
 /// <summary>
 /// Initializes a new instance of <see cref="JContainerGenerator"/>,
 /// using <see cref="DeterministicRandom"/> to get deterministic output.
 /// </summary>
 public JContainerGenerator(DeterministicRandom random)
 {
     this.random = random;
 }
        public void GeneratedTests(int arity, int depth, int patternCount)
        {
            // Arrange
            var random = new DeterministicRandom(3000);
            var treeGenerator = new JContainerGenerator(random);
            var patternGenerator = new PatternCollectionGenerator(random);

            var original = treeGenerator.GeneratePerfectTree(arity, depth);
            var patterns = patternGenerator.GeneratePatterns(original, patternCount);

            var expected = original.DeepClone();
            var actual = original.DeepClone();

            // Act
            expected.NaiveRemove(patterns);
            actual.Subset(patterns);

            // Debug
            Console.WriteLine($"BIT ARRAY:\n{random}\n");
            //Console.WriteLine($"PATTERNS:\n{patterns.MergeLines()}\n");
            //Console.WriteLine($"ORIGINAL:\n{original.ToPrettyString()}\n");
            //Console.WriteLine($"EXPECTED:\n{expected.ToPrettyString()}\n");
            //Console.WriteLine($"WAS:\n{actual.ToPrettyString()}\n");

            // Assert
            Assert.That(JToken.DeepEquals(expected, actual));
        }