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()); }
private MinTransactionsPerBlockPolicy( MinTransactionsPerBlockPolicy minTransactionsPerBlockPolicy, SpannedSubPolicy <int> spannedSubPolicy) : base(minTransactionsPerBlockPolicy, spannedSubPolicy) { }
private GenericSubPolicy( GenericSubPolicy <T> genericPolicy, SpannedSubPolicy <T> spannedSubPolicy) : base(genericPolicy, spannedSubPolicy) { }
private MaxTransactionsPerSignerPerBlockPolicy( MaxTransactionsPerSignerPerBlockPolicy maxTransactionsPerSignerPerBlockPolicy, SpannedSubPolicy <int> spannedSubPolicy) : base(maxTransactionsPerSignerPerBlockPolicy, spannedSubPolicy) { }
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); }