@@ -153,10 +153,6 @@ fn test_try_fold_specialization_intersperse_err() {
153153 assert_eq ! ( iter. next( ) , None ) ;
154154}
155155
156- // FIXME(iter_intersperse): `intersperse` current behavior may change for
157- // non-fused iterators, so this test will likely have to
158- // be adjusted; see PR #152855 and issue #79524
159- // if `intersperse` doesn't change, remove this FIXME.
160156#[ test]
161157fn test_non_fused_iterator_intersperse ( ) {
162158 #[ derive( Debug ) ]
@@ -183,24 +179,26 @@ fn test_non_fused_iterator_intersperse() {
183179 }
184180
185181 let counter = 0 ;
186- // places a 2 between `Some(_)` items
182+ // places a 1 between `Some(_)` items
187183 let non_fused_iter = TestCounter { counter } ;
188- let mut intersperse_iter = non_fused_iter. intersperse ( 2 ) ;
189- // Since `intersperse` currently transforms the original
190- // iterator into a fused iterator, this intersperse_iter
191- // should always have `None`
192- for _ in 0 ..counter + 6 {
193- assert_eq ! ( intersperse_iter. next( ) , None ) ;
194- }
184+ let mut intersperse_iter = non_fused_iter. intersperse ( 1 ) ;
185+ // Interspersed iter produces:
186+ // `None` -> `Some(2)` -> `None` -> `Some(1)` -> Some(4)` -> `None` -> `Some(1)` ->
187+ // `Some(6)` -> and then `None` endlessly
188+ assert_eq ! ( intersperse_iter. next( ) , None ) ;
189+ assert_eq ! ( intersperse_iter. next( ) , Some ( 2 ) ) ;
190+ assert_eq ! ( intersperse_iter. next( ) , None ) ;
191+ assert_eq ! ( intersperse_iter. next( ) , Some ( 1 ) ) ;
192+ assert_eq ! ( intersperse_iter. next( ) , Some ( 4 ) ) ;
193+ assert_eq ! ( intersperse_iter. next( ) , None ) ;
194+ assert_eq ! ( intersperse_iter. next( ) , Some ( 1 ) ) ;
195+ assert_eq ! ( intersperse_iter. next( ) , Some ( 6 ) ) ;
196+ assert_eq ! ( intersperse_iter. next( ) , None ) ;
195197
196- // Extra check to make sure it is `None` after processing 6 items
198+ // Extra check to make sure it is `None` after processing all items
197199 assert_eq ! ( intersperse_iter. next( ) , None ) ;
198200}
199201
200- // FIXME(iter_intersperse): `intersperse` current behavior may change for
201- // non-fused iterators, so this test will likely have to
202- // be adjusted; see PR #152855 and issue #79524
203- // if `intersperse` doesn't change, remove this FIXME.
204202#[ test]
205203fn test_non_fused_iterator_intersperse_2 ( ) {
206204 #[ derive( Debug ) ]
@@ -228,35 +226,26 @@ fn test_non_fused_iterator_intersperse_2() {
228226 }
229227
230228 let counter = 0 ;
231- // places a 2 between `Some(_)` items
229+ // places a 100 between `Some(_)` items
232230 let non_fused_iter = TestCounter { counter } ;
233- let mut intersperse_iter = non_fused_iter. intersperse ( 2 ) ;
234- // Since `intersperse` currently transforms the original
235- // iterator into a fused iterator, this interspersed iter
236- // will be `Some(1)` -> `Some(2)` -> `Some(2)` -> and then
237- // `None` endlessly
238- let mut items_processed = 0 ;
239- for num in 0 ..counter + 6 {
240- if num < 3 {
241- if num % 2 != 0 {
242- assert_eq ! ( intersperse_iter. next( ) , Some ( 2 ) ) ;
243- } else {
244- items_processed += 1 ;
245- assert_eq ! ( intersperse_iter. next( ) , Some ( items_processed) ) ;
246- }
247- } else {
248- assert_eq ! ( intersperse_iter. next( ) , None ) ;
249- }
250- }
231+ let mut intersperse_iter = non_fused_iter. intersperse ( 100 ) ;
232+ // Interspersed iter produces:
233+ // `Some(1)` -> `Some(100)` -> `Some(2)` -> `None` -> `Some(100)`
234+ // -> `Some(4)` -> `Some(100)` -> `Some(5)` -> `None` endlessly
235+ assert_eq ! ( intersperse_iter. next( ) , Some ( 1 ) ) ;
236+ assert_eq ! ( intersperse_iter. next( ) , Some ( 100 ) ) ;
237+ assert_eq ! ( intersperse_iter. next( ) , Some ( 2 ) ) ;
238+ assert_eq ! ( intersperse_iter. next( ) , None ) ;
239+ assert_eq ! ( intersperse_iter. next( ) , Some ( 100 ) ) ;
240+ assert_eq ! ( intersperse_iter. next( ) , Some ( 4 ) ) ;
241+ assert_eq ! ( intersperse_iter. next( ) , Some ( 100 ) ) ;
242+ assert_eq ! ( intersperse_iter. next( ) , Some ( 5 ) ) ;
243+ assert_eq ! ( intersperse_iter. next( ) , None ) ;
251244
252245 // Extra check to make sure it is `None` after processing 6 items
253246 assert_eq ! ( intersperse_iter. next( ) , None ) ;
254247}
255248
256- // FIXME(iter_intersperse): `intersperse_with` current behavior may change for
257- // non-fused iterators, so this test will likely have to
258- // be adjusted; see PR #152855 and issue #79524
259- // if `intersperse_with` doesn't change, remove this FIXME.
260249#[ test]
261250fn test_non_fused_iterator_intersperse_with ( ) {
262251 #[ derive( Debug ) ]
@@ -285,22 +274,24 @@ fn test_non_fused_iterator_intersperse_with() {
285274 let counter = 0 ;
286275 let non_fused_iter = TestCounter { counter } ;
287276 // places a 2 between `Some(_)` items
288- let mut intersperse_iter = non_fused_iter. intersperse_with ( || 2 ) ;
289- // Since `intersperse` currently transforms the original
290- // iterator into a fused iterator, this intersperse_iter
291- // should always have `None`
292- for _ in 0 ..counter + 6 {
293- assert_eq ! ( intersperse_iter. next( ) , None ) ;
294- }
277+ let mut intersperse_iter = non_fused_iter. intersperse_with ( || 1 ) ;
278+ // Interspersed iter produces:
279+ // `None` -> `Some(2)` -> `None` -> `Some(1)` -> Some(4)` -> `None` -> `Some(1)` ->
280+ // `Some(6)` -> and then `None` endlessly
281+ assert_eq ! ( intersperse_iter. next( ) , None ) ;
282+ assert_eq ! ( intersperse_iter. next( ) , Some ( 2 ) ) ;
283+ assert_eq ! ( intersperse_iter. next( ) , None ) ;
284+ assert_eq ! ( intersperse_iter. next( ) , Some ( 1 ) ) ;
285+ assert_eq ! ( intersperse_iter. next( ) , Some ( 4 ) ) ;
286+ assert_eq ! ( intersperse_iter. next( ) , None ) ;
287+ assert_eq ! ( intersperse_iter. next( ) , Some ( 1 ) ) ;
288+ assert_eq ! ( intersperse_iter. next( ) , Some ( 6 ) ) ;
289+ assert_eq ! ( intersperse_iter. next( ) , None ) ;
295290
296291 // Extra check to make sure it is `None` after processing 6 items
297292 assert_eq ! ( intersperse_iter. next( ) , None ) ;
298293}
299294
300- // FIXME(iter_intersperse): `intersperse_with` current behavior may change for
301- // non-fused iterators, so this test will likely have to
302- // be adjusted; see PR #152855 and issue #79524
303- // if `intersperse_with` doesn't change, remove this FIXME.
304295#[ test]
305296fn test_non_fused_iterator_intersperse_with_2 ( ) {
306297 #[ derive( Debug ) ]
@@ -328,26 +319,21 @@ fn test_non_fused_iterator_intersperse_with_2() {
328319 }
329320
330321 let counter = 0 ;
331- // places a 2 between `Some(_)` items
322+ // places a 100 between `Some(_)` items
332323 let non_fused_iter = TestCounter { counter } ;
333- let mut intersperse_iter = non_fused_iter. intersperse ( 2 ) ;
334- // Since `intersperse` currently transforms the original
335- // iterator into a fused iterator, this interspersed iter
336- // will be `Some(1)` -> `Some(2)` -> `Some(2)` -> and then
337- // `None` endlessly
338- let mut items_processed = 0 ;
339- for num in 0 ..counter + 6 {
340- if num < 3 {
341- if num % 2 != 0 {
342- assert_eq ! ( intersperse_iter. next( ) , Some ( 2 ) ) ;
343- } else {
344- items_processed += 1 ;
345- assert_eq ! ( intersperse_iter. next( ) , Some ( items_processed) ) ;
346- }
347- } else {
348- assert_eq ! ( intersperse_iter. next( ) , None ) ;
349- }
350- }
324+ let mut intersperse_iter = non_fused_iter. intersperse_with ( || 100 ) ;
325+ // Interspersed iter produces:
326+ // `Some(1)` -> `Some(100)` -> `Some(2)` -> `None` -> `Some(100)`
327+ // -> `Some(4)` -> `Some(100)` -> `Some(5)` -> `None` endlessly
328+ assert_eq ! ( intersperse_iter. next( ) , Some ( 1 ) ) ;
329+ assert_eq ! ( intersperse_iter. next( ) , Some ( 100 ) ) ;
330+ assert_eq ! ( intersperse_iter. next( ) , Some ( 2 ) ) ;
331+ assert_eq ! ( intersperse_iter. next( ) , None ) ;
332+ assert_eq ! ( intersperse_iter. next( ) , Some ( 100 ) ) ;
333+ assert_eq ! ( intersperse_iter. next( ) , Some ( 4 ) ) ;
334+ assert_eq ! ( intersperse_iter. next( ) , Some ( 100 ) ) ;
335+ assert_eq ! ( intersperse_iter. next( ) , Some ( 5 ) ) ;
336+ assert_eq ! ( intersperse_iter. next( ) , None ) ;
351337
352338 // Extra check to make sure it is `None` after processing 6 items
353339 assert_eq ! ( intersperse_iter. next( ) , None ) ;
0 commit comments