@@ -42,9 +42,40 @@ public void IntegerStep_InvalidIntervalAndStep_ArgOutOfRange(int from, int to, i
42
42
Assert . Throws < ArgumentOutOfRangeException > ( ( ) => new CombinatorialRangeAttribute ( from , to , step ) ) ;
43
43
}
44
44
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
+
45
73
internal static IEnumerable < int > Sequence ( int from , int to , int step )
46
74
=> step >= 0 ? SequenceIterator ( from , to , step ) : SequenceReverseIterator ( from , to , step ) ;
47
75
76
+ internal static IEnumerable < uint > UnsignedSequence ( uint from , uint to , uint step )
77
+ => from < to ? UnsignedSequenceIterator ( from , to , step ) : UnsignedSequenceReverseIterator ( from , to , step ) ;
78
+
48
79
private static IEnumerable < int > SequenceIterator ( int from , int to , int step )
49
80
{
50
81
int value = from ;
@@ -70,4 +101,30 @@ private static IEnumerable<int> SequenceReverseIterator(int from, int to, int st
70
101
}
71
102
}
72
103
}
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
+ }
73
130
}
0 commit comments