@@ -96,100 +96,6 @@ mod tests {
96
96
97
97
#[ test]
98
98
fn query_filtered_exactsizeiterator_len ( ) {
99
- fn assert_all_sizes_iterator_equal (
100
- iterator : impl ExactSizeIterator ,
101
- expected_size : usize ,
102
- query_type : & ' static str ,
103
- ) {
104
- let len = iterator. len ( ) ;
105
- let size_hint_0 = iterator. size_hint ( ) . 0 ;
106
- let size_hint_1 = iterator. size_hint ( ) . 1 ;
107
- // `count` tests that not only it is the expected value, but also
108
- // the value is accurate to what the query returns.
109
- let count = iterator. count ( ) ;
110
- // This will show up when one of the asserts in this function fails
111
- println ! (
112
- r#"query declared sizes:
113
- for query: {query_type}
114
- expected: {expected_size}
115
- len: {len}
116
- size_hint().0: {size_hint_0}
117
- size_hint().1: {size_hint_1:?}
118
- count(): {count}"#
119
- ) ;
120
- assert_eq ! ( len, expected_size) ;
121
- assert_eq ! ( size_hint_0, expected_size) ;
122
- assert_eq ! ( size_hint_1, Some ( expected_size) ) ;
123
- assert_eq ! ( count, expected_size) ;
124
- }
125
- fn assert_all_sizes_equal < Q , F > ( world : & mut World , expected_size : usize )
126
- where
127
- Q : ReadOnlyWorldQuery ,
128
- F : ReadOnlyWorldQuery ,
129
- F :: ReadOnly : ArchetypeFilter ,
130
- {
131
- let mut query = world. query_filtered :: < Q , F > ( ) ;
132
- let iter = query. iter ( world) ;
133
- let query_type = type_name :: < QueryState < Q , F > > ( ) ;
134
- assert_all_sizes_iterator_equal ( iter, expected_size, query_type) ;
135
- }
136
-
137
- let mut world = World :: new ( ) ;
138
- world. spawn ( ( A ( 1 ) , B ( 1 ) ) ) ;
139
- world. spawn ( A ( 2 ) ) ;
140
- world. spawn ( A ( 3 ) ) ;
141
-
142
- assert_all_sizes_equal :: < & A , With < B > > ( & mut world, 1 ) ;
143
- assert_all_sizes_equal :: < & A , Without < B > > ( & mut world, 2 ) ;
144
-
145
- let mut world = World :: new ( ) ;
146
- world. spawn ( ( A ( 1 ) , B ( 1 ) , C ( 1 ) ) ) ;
147
- world. spawn ( ( A ( 2 ) , B ( 2 ) ) ) ;
148
- world. spawn ( ( A ( 3 ) , B ( 3 ) ) ) ;
149
- world. spawn ( ( A ( 4 ) , C ( 4 ) ) ) ;
150
- world. spawn ( ( A ( 5 ) , C ( 5 ) ) ) ;
151
- world. spawn ( ( A ( 6 ) , C ( 6 ) ) ) ;
152
- world. spawn ( A ( 7 ) ) ;
153
- world. spawn ( A ( 8 ) ) ;
154
- world. spawn ( A ( 9 ) ) ;
155
- world. spawn ( A ( 10 ) ) ;
156
-
157
- // With/Without for B and C
158
- assert_all_sizes_equal :: < & A , With < B > > ( & mut world, 3 ) ;
159
- assert_all_sizes_equal :: < & A , With < C > > ( & mut world, 4 ) ;
160
- assert_all_sizes_equal :: < & A , Without < B > > ( & mut world, 7 ) ;
161
- assert_all_sizes_equal :: < & A , Without < C > > ( & mut world, 6 ) ;
162
-
163
- // With/Without (And) combinations
164
- assert_all_sizes_equal :: < & A , ( With < B > , With < C > ) > ( & mut world, 1 ) ;
165
- assert_all_sizes_equal :: < & A , ( With < B > , Without < C > ) > ( & mut world, 2 ) ;
166
- assert_all_sizes_equal :: < & A , ( Without < B > , With < C > ) > ( & mut world, 3 ) ;
167
- assert_all_sizes_equal :: < & A , ( Without < B > , Without < C > ) > ( & mut world, 4 ) ;
168
-
169
- // With/Without Or<()> combinations
170
- assert_all_sizes_equal :: < & A , Or < ( With < B > , With < C > ) > > ( & mut world, 6 ) ;
171
- assert_all_sizes_equal :: < & A , Or < ( With < B > , Without < C > ) > > ( & mut world, 7 ) ;
172
- assert_all_sizes_equal :: < & A , Or < ( Without < B > , With < C > ) > > ( & mut world, 8 ) ;
173
- assert_all_sizes_equal :: < & A , Or < ( Without < B > , Without < C > ) > > ( & mut world, 9 ) ;
174
- assert_all_sizes_equal :: < & A , ( Or < ( With < B > , ) > , Or < ( With < C > , ) > ) > ( & mut world, 1 ) ;
175
- assert_all_sizes_equal :: < & A , Or < ( Or < ( With < B > , With < C > ) > , With < D > ) > > ( & mut world, 6 ) ;
176
-
177
- for i in 11 ..14 {
178
- world. spawn ( ( A ( i) , D ( i) ) ) ;
179
- }
180
-
181
- assert_all_sizes_equal :: < & A , Or < ( Or < ( With < B > , With < C > ) > , With < D > ) > > ( & mut world, 9 ) ;
182
- assert_all_sizes_equal :: < & A , Or < ( Or < ( With < B > , With < C > ) > , Without < D > ) > > ( & mut world, 10 ) ;
183
-
184
- // a fair amount of entities
185
- for i in 14 ..20 {
186
- world. spawn ( ( C ( i) , D ( i) ) ) ;
187
- }
188
- assert_all_sizes_equal :: < Entity , ( With < C > , With < D > ) > ( & mut world, 6 ) ;
189
- }
190
-
191
- #[ test]
192
- fn query_filtered_combination_size ( ) {
193
99
fn choose ( n : usize , k : usize ) -> usize {
194
100
if n == 0 || k == 0 || n < k {
195
101
return 0 ;
@@ -200,52 +106,73 @@ mod tests {
200
106
}
201
107
fn assert_combination < Q , F , const K : usize > ( world : & mut World , expected_size : usize )
202
108
where
203
- Q : WorldQuery ,
109
+ Q : ReadOnlyWorldQuery ,
204
110
F : ReadOnlyWorldQuery ,
205
111
F :: ReadOnly : ArchetypeFilter ,
206
112
{
207
113
let mut query = world. query_filtered :: < Q , F > ( ) ;
208
- let iter = query. iter_combinations :: < K > ( world) ;
209
114
let query_type = type_name :: < QueryCombinationIter < Q , F , K > > ( ) ;
210
- assert_all_sizes_iterator_equal ( iter, expected_size, query_type) ;
115
+ let iter = query. iter_combinations :: < K > ( world) ;
116
+ assert_all_sizes_iterator_equal ( iter, expected_size, 0 , query_type) ;
117
+ let iter = query. iter_combinations :: < K > ( world) ;
118
+ assert_all_sizes_iterator_equal ( iter, expected_size, 1 , query_type) ;
119
+ let iter = query. iter_combinations :: < K > ( world) ;
120
+ assert_all_sizes_iterator_equal ( iter, expected_size, 5 , query_type) ;
211
121
}
212
122
fn assert_all_sizes_equal < Q , F > ( world : & mut World , expected_size : usize )
213
123
where
214
- Q : WorldQuery ,
124
+ Q : ReadOnlyWorldQuery ,
215
125
F : ReadOnlyWorldQuery ,
216
126
F :: ReadOnly : ArchetypeFilter ,
217
127
{
218
128
let mut query = world. query_filtered :: < Q , F > ( ) ;
219
- let iter = query. iter ( world) ;
220
129
let query_type = type_name :: < QueryState < Q , F > > ( ) ;
221
- assert_all_sizes_iterator_equal ( iter, expected_size, query_type) ;
130
+ assert_all_exact_sizes_iterator_equal ( query. iter ( world) , expected_size, 0 , query_type) ;
131
+ assert_all_exact_sizes_iterator_equal ( query. iter ( world) , expected_size, 1 , query_type) ;
132
+ assert_all_exact_sizes_iterator_equal ( query. iter ( world) , expected_size, 5 , query_type) ;
222
133
223
134
let expected = expected_size;
224
135
assert_combination :: < Q , F , 0 > ( world, choose ( expected, 0 ) ) ;
225
136
assert_combination :: < Q , F , 1 > ( world, choose ( expected, 1 ) ) ;
226
137
assert_combination :: < Q , F , 2 > ( world, choose ( expected, 2 ) ) ;
227
138
assert_combination :: < Q , F , 5 > ( world, choose ( expected, 5 ) ) ;
228
139
assert_combination :: < Q , F , 43 > ( world, choose ( expected, 43 ) ) ;
229
- assert_combination :: < Q , F , 128 > ( world, choose ( expected, 128 ) ) ;
140
+ assert_combination :: < Q , F , 64 > ( world, choose ( expected, 64 ) ) ;
141
+ }
142
+ fn assert_all_exact_sizes_iterator_equal (
143
+ iterator : impl ExactSizeIterator ,
144
+ expected_size : usize ,
145
+ skip : usize ,
146
+ query_type : & ' static str ,
147
+ ) {
148
+ let len = iterator. len ( ) ;
149
+ println ! ( "len: {len}" ) ;
150
+ assert_all_sizes_iterator_equal ( iterator, expected_size, skip, query_type) ;
151
+ assert_eq ! ( len, expected_size) ;
230
152
}
231
153
fn assert_all_sizes_iterator_equal (
232
- iterator : impl Iterator ,
154
+ mut iterator : impl Iterator ,
233
155
expected_size : usize ,
156
+ skip : usize ,
234
157
query_type : & ' static str ,
235
158
) {
159
+ let expected_size = expected_size. saturating_sub ( skip) ;
160
+ for _ in 0 ..skip {
161
+ iterator. next ( ) ;
162
+ }
236
163
let size_hint_0 = iterator. size_hint ( ) . 0 ;
237
164
let size_hint_1 = iterator. size_hint ( ) . 1 ;
238
165
// `count` tests that not only it is the expected value, but also
239
166
// the value is accurate to what the query returns.
240
167
let count = iterator. count ( ) ;
241
168
// This will show up when one of the asserts in this function fails
242
169
println ! (
243
- r# "query declared sizes:
244
- for query: {query_type}
245
- expected: {expected_size}
246
- size_hint().0: {size_hint_0}
247
- size_hint().1: {size_hint_1:?}
248
- count(): {count}"#
170
+ "query declared sizes: \n \
171
+ for query: {query_type} \n \
172
+ expected: {expected_size} \n \
173
+ size_hint().0: {size_hint_0} \n \
174
+ size_hint().1: {size_hint_1:?} \n \
175
+ count(): {count}"
249
176
) ;
250
177
assert_eq ! ( size_hint_0, expected_size) ;
251
178
assert_eq ! ( size_hint_1, Some ( expected_size) ) ;
0 commit comments