@@ -25,18 +25,25 @@ public void TestNegativeSubsetSize()
25
25
new BreakingSequence < int > ( ) . Subsets ( - 5 ) ) ;
26
26
}
27
27
28
+ public static IEnumerable < object ? [ ] > GetSubsetSequences ( ) =>
29
+ Enumerable . Range ( 1 , 10 )
30
+ . GetCollectionSequences ( )
31
+ . Select ( x => new object ? [ ] { x , } ) ;
32
+
28
33
/// <summary>
29
34
/// Verify that requesting subsets larger than the original sequence length result in an exception.
30
35
/// </summary>
31
- [ Fact ]
32
- public void TestSubsetLargerThanSequence ( )
36
+ [ Theory ]
37
+ [ MemberData ( nameof ( GetSubsetSequences ) ) ]
38
+ public void TestSubsetLargerThanSequence ( IDisposableEnumerable < int > seq )
33
39
{
34
- using var sequence = Enumerable . Range ( 1 , 10 ) . AsTestingSequence ( ) ;
35
-
36
- _ = Assert . Throws < ArgumentOutOfRangeException > ( ( ) =>
37
- sequence
38
- . Subsets ( 15 )
39
- . Consume ( ) ) ;
40
+ using ( seq )
41
+ {
42
+ _ = Assert . Throws < ArgumentOutOfRangeException > ( ( ) =>
43
+ seq
44
+ . Subsets ( 15 )
45
+ . Consume ( ) ) ;
46
+ }
40
47
}
41
48
42
49
/// <summary>
@@ -54,30 +61,35 @@ public void TestEmptySequenceSubsets()
54
61
/// <summary>
55
62
/// Verify that subsets are returned in increasing size, starting with the empty set.
56
63
/// </summary>
57
- [ Fact ]
58
- public void TestSubsetsInIncreasingOrder ( )
64
+ [ Theory ]
65
+ [ MemberData ( nameof ( GetSubsetSequences ) ) ]
66
+ public void TestSubsetsInIncreasingOrder ( IDisposableEnumerable < int > seq )
59
67
{
60
- using var sequence = Enumerable . Range ( 1 , 10 ) . AsTestingSequence ( ) ;
61
-
62
- var result = sequence . Subsets ( ) ;
63
- var prevSubsetCount = - 1 ;
64
- foreach ( var subset in result )
68
+ using ( seq )
65
69
{
66
- Assert . True ( subset . Count >= prevSubsetCount ) ;
67
- prevSubsetCount = subset . Count ;
70
+ var result = seq . Subsets ( ) ;
71
+
72
+ var prevSubsetCount = - 1 ;
73
+ foreach ( var subset in result )
74
+ {
75
+ Assert . True ( subset . Count >= prevSubsetCount ) ;
76
+ prevSubsetCount = subset . Count ;
77
+ }
68
78
}
69
79
}
70
80
71
81
/// <summary>
72
82
/// Verify that the number of subsets returned is correct, but don't verify the subset contents.
73
83
/// </summary>
74
- [ Fact ]
75
- public void TestAllSubsetsExpectedCount ( )
84
+ [ Theory ]
85
+ [ MemberData ( nameof ( GetSubsetSequences ) ) ]
86
+ public void TestAllSubsetsExpectedCount ( IDisposableEnumerable < int > seq )
76
87
{
77
- using var sequence = Enumerable . Range ( 1 , 20 ) . AsTestingSequence ( ) ;
78
-
79
- var result = sequence . Subsets ( ) ;
80
- Assert . Equal ( Math . Pow ( 2 , 20 ) , result . Count ( ) ) ;
88
+ using ( seq )
89
+ {
90
+ var result = seq . Subsets ( ) . Count ( ) ;
91
+ Assert . Equal ( Math . Pow ( 2 , 10 ) , result ) ;
92
+ }
81
93
}
82
94
83
95
/// <summary>
@@ -103,20 +115,31 @@ public void TestAllSubsetsExpectedResults()
103
115
}
104
116
105
117
public static IEnumerable < object [ ] > SubsetSizes ( ) =>
106
- Enumerable . Range ( 1 , 20 ) . Select ( i => new object [ ] { i , } ) ;
118
+ Enumerable . Range ( 1 , 20 )
119
+ . SelectMany ( size =>
120
+ Enumerable . Range ( 1 , 20 )
121
+ . GetCollectionSequences ( )
122
+ . Select ( seq => new object [ ]
123
+ {
124
+ seq ,
125
+ size ,
126
+ } ) ) ;
107
127
108
128
/// <summary>
109
129
/// Verify that the number of subsets for a given subset-size is correct.
110
130
/// </summary>
111
- [ Theory , MemberData ( nameof ( SubsetSizes ) ) ]
112
- public void TestKSubsetExpectedCount ( int subsetSize )
131
+ [ Theory ]
132
+ [ MemberData ( nameof ( SubsetSizes ) ) ]
133
+ public void TestKSubsetExpectedCount ( IDisposableEnumerable < int > seq , int subsetSize )
113
134
{
114
- using var sequence = Enumerable . Range ( 1 , 20 ) . AsTestingSequence ( ) ;
115
-
116
- var result = sequence . Subsets ( subsetSize ) ;
135
+ using ( seq )
136
+ {
137
+ var result = seq . Subsets ( subsetSize ) . Count ( ) ;
117
138
118
- // number of subsets of a given size is defined by the binomial coefficient: c! / ((c-s)!*s!)
119
- Assert . Equal ( Combinatorics . Binomial ( 20 , subsetSize ) , result . Count ( ) ) ;
139
+ // number of subsets of a given size is defined by the binomial coefficient: c! / ((c-s)!*s!)
140
+ var expected = Combinatorics . Binomial ( 20 , subsetSize ) ;
141
+ Assert . Equal ( expected , result ) ;
142
+ }
120
143
}
121
144
122
145
/// <summary>
0 commit comments