@@ -42,9 +42,40 @@ public void IntegerStep_InvalidIntervalAndStep_ArgOutOfRange(int from, int to, i
4242 Assert . Throws < ArgumentOutOfRangeException > ( ( ) => new CombinatorialRangeAttribute ( from , to , step ) ) ;
4343 }
4444
45+ [ Theory ]
46+ [ InlineData ( 0u , 5u ) ]
47+ public void CountOfUnsignedIntegers_HappyPath_SetsAttributeWithRange ( uint from , uint count )
48+ {
49+ object [ ] values = UnsignedSequence ( from , from + count - 1u , 1u ) . Cast < object > ( ) . ToArray ( ) ;
50+ var attribute = new CombinatorialRangeAttribute ( from , count ) ;
51+ Assert . Equal ( values , attribute . Values ) ;
52+ }
53+
54+ [ Theory ]
55+ [ InlineData ( 0u , 0u ) ]
56+ public void CountOfUnsignedIntegers_ZeroCount_ArgOutOfRange ( uint from , uint count )
57+ {
58+ Assert . Throws < ArgumentOutOfRangeException > ( ( ) => new CombinatorialRangeAttribute ( from , count ) ) ;
59+ }
60+
61+ [ Theory ]
62+ [ InlineData ( 0u , 7u , 2u ) ]
63+ [ InlineData ( 0u , 8u , 2u ) ]
64+ [ InlineData ( 7u , 0u , 2u ) ]
65+ public void UnsignedIntegerStep_HappyPath_SetsAttributeWithRange ( uint from , uint to , uint step )
66+ {
67+ object [ ] expectedValues = UnsignedSequence ( from , to , step ) . Cast < object > ( ) . ToArray ( ) ;
68+
69+ var attribute = new CombinatorialRangeAttribute ( from , to , step ) ;
70+ Assert . Equal ( expectedValues , attribute . Values ) ;
71+ }
72+
4573 internal static IEnumerable < int > Sequence ( int from , int to , int step )
4674 => step >= 0 ? SequenceIterator ( from , to , step ) : SequenceReverseIterator ( from , to , step ) ;
4775
76+ internal static IEnumerable < uint > UnsignedSequence ( uint from , uint to , uint step )
77+ => from < to ? UnsignedSequenceIterator ( from , to , step ) : UnsignedSequenceReverseIterator ( from , to , step ) ;
78+
4879 private static IEnumerable < int > SequenceIterator ( int from , int to , int step )
4980 {
5081 int value = from ;
@@ -70,4 +101,30 @@ private static IEnumerable<int> SequenceReverseIterator(int from, int to, int st
70101 }
71102 }
72103 }
104+
105+ private static IEnumerable < uint > UnsignedSequenceIterator ( uint from , uint to , uint step )
106+ {
107+ uint value = from ;
108+ while ( value <= to )
109+ {
110+ yield return value ;
111+ unchecked
112+ {
113+ value += step ;
114+ }
115+ }
116+ }
117+
118+ private static IEnumerable < uint > UnsignedSequenceReverseIterator ( uint from , uint to , uint step )
119+ {
120+ uint value = from ;
121+ while ( value >= to && value <= from )
122+ {
123+ yield return value ;
124+ unchecked
125+ {
126+ value -= step ;
127+ }
128+ }
129+ }
73130}
0 commit comments