示例#1
0
        public void Constructor()
        {
            SpannedSubPolicy <int> spannedSubPolicy;
            List <long>            indices = Enumerable.Range(0, 100).Select(i => (long)i).ToList();

            // Bad start index
            Assert.Throws <ArgumentOutOfRangeException>(() =>
                                                        new SpannedSubPolicy <int>(-1, null, null, 1));
            // Bad end index
            Assert.Throws <ArgumentOutOfRangeException>(() =>
                                                        new SpannedSubPolicy <int>(10, 9, null, 1));
            // Same start index and end index should be fine
            spannedSubPolicy = new SpannedSubPolicy <int>(10, 10, null, 1);

            // Count indices in range
            Assert.Equal(11, indices.Where(i =>
                                           new SpannedSubPolicy <int>(10, 20, index => index % 30 == 0, 1).IsTargetRange(i)).Count());
            // No index in range satisfies predicate
            Assert.False(indices.Where(i =>
                                       new SpannedSubPolicy <int>(10, 20, index => index % 30 == 0, 1).IsTargetIndex(i)).Any());
            // Predicate of null counts everything in range
            Assert.Equal(11, indices.Where(i =>
                                           new SpannedSubPolicy <int>(10, 20, null, 1).IsTargetIndex(i)).Count());
            // Count target indices
            Assert.Equal(3, indices.Where(i =>
                                          new SpannedSubPolicy <int>(10, 20, index => index % 5 == 0, 1).IsTargetIndex(i)).Count());
            // Count indices in range for indefinite case
            Assert.Equal(90, indices.Where(i =>
                                           new SpannedSubPolicy <int>(10, null, index => index % 5 == 0, 1).IsTargetRange(i)).Count());
            // Count target indices for indefinite case
            Assert.Equal(18, indices.Where(i =>
                                           new SpannedSubPolicy <int>(10, null, index => index % 5 == 0, 1).IsTargetIndex(i)).Count());
        }
示例#2
0
 private MinTransactionsPerBlockPolicy(
     MinTransactionsPerBlockPolicy minTransactionsPerBlockPolicy,
     SpannedSubPolicy <int> spannedSubPolicy)
     : base(minTransactionsPerBlockPolicy, spannedSubPolicy)
 {
 }
示例#3
0
 private GenericSubPolicy(
     GenericSubPolicy <T> genericPolicy,
     SpannedSubPolicy <T> spannedSubPolicy)
     : base(genericPolicy, spannedSubPolicy)
 {
 }
示例#4
0
 private MaxTransactionsPerSignerPerBlockPolicy(
     MaxTransactionsPerSignerPerBlockPolicy maxTransactionsPerSignerPerBlockPolicy,
     SpannedSubPolicy <int> spannedSubPolicy)
     : base(maxTransactionsPerSignerPerBlockPolicy, spannedSubPolicy)
 {
 }
示例#5
0
        public void Constructor()
        {
            IVariableSubPolicy <bool> genericSubPolicy;
            List <long> indices = Enumerable.Range(0, 100).Select(i => (long)i).ToList();

            SpannedSubPolicy <bool> first     = new SpannedSubPolicy <bool>(10, null, null, true);
            SpannedSubPolicy <bool> badSecond = new SpannedSubPolicy <bool>(5, null, index => index % 2 == 0, true);
            SpannedSubPolicy <bool> second    = new SpannedSubPolicy <bool>(20, 50, index => index % 2 == 0, true);
            SpannedSubPolicy <bool> third     = new SpannedSubPolicy <bool>(30, 40, null, true);
            SpannedSubPolicy <bool> fourth    = new SpannedSubPolicy <bool>(50, 80, index => index % 5 == 0, true);

            // Should be fine.
            genericSubPolicy = GenericSubPolicy <bool>
                               .Create(false)
                               // 10 ~ 19 => count 10
                               .Add(first)
                               // 20 ~ 29 && mod 2 => count 5
                               .Add(second)
                               // 30 ~ 40 => count 11
                               .Add(third)
                               // 50 ~ 80 && mod 5 => count 7
                               .Add(fourth);

            Assert.Equal(4, genericSubPolicy.SpannedSubPolicies.Count);
            Assert.Equal(10, genericSubPolicy.SpannedSubPolicies[0].StartIndex);
            Assert.Equal(19, genericSubPolicy.SpannedSubPolicies[0].EndIndex);
            Assert.Equal(20, genericSubPolicy.SpannedSubPolicies[1].StartIndex);
            Assert.Equal(29, genericSubPolicy.SpannedSubPolicies[1].EndIndex);
            Assert.Equal(30, genericSubPolicy.SpannedSubPolicies[2].StartIndex);
            Assert.Equal(40, genericSubPolicy.SpannedSubPolicies[2].EndIndex);
            Assert.Equal(50, genericSubPolicy.SpannedSubPolicies[3].StartIndex);
            Assert.Equal(80, genericSubPolicy.SpannedSubPolicies[3].EndIndex);

            Assert.Equal(
                indices.Where(i => genericSubPolicy.Getter(i)).Count(),
                genericSubPolicy.SpannedSubPolicies
                .Select(s => indices.Where(i => s.IsTargetIndex(i)).Count())
                .Sum());
            Assert.Equal(33, indices.Where(i => genericSubPolicy.Getter(i)).Count());
            // Check first one is no longer indefinite and cut short.
            Assert.True(first.Indefinite);
            Assert.False(genericSubPolicy.SpannedSubPolicies.First().Indefinite);
            Assert.Equal(19, genericSubPolicy.SpannedSubPolicies.First().EndIndex);

            // Out of order addition should not work.
            Assert.Throws <ArgumentOutOfRangeException>(() => GenericSubPolicy <bool>
                                                        .Create(false)
                                                        .Add(fourth)
                                                        .Add(third));
            Assert.Throws <ArgumentOutOfRangeException>(() => GenericSubPolicy <bool>
                                                        .Create(false)
                                                        .Add(first)
                                                        .Add(badSecond));

            // Create using AddRange().
            genericSubPolicy = GenericSubPolicy <bool>
                               .Create(false)
                               .AddRange(new List <SpannedSubPolicy <bool> >()
            {
                first, second, third, fourth
            }.ToImmutableList());

            Assert.Throws <ArgumentOutOfRangeException>(() => GenericSubPolicy <bool>
                                                        .Create(false)
                                                        .AddRange(new List <SpannedSubPolicy <bool> >()
            {
                second, first
            }.ToImmutableList()));

            // Type check
            Assert.IsType <GenericSubPolicy <bool> >(genericSubPolicy);
        }