@@ -376,9 +376,12 @@ fn test_windows_zip() {
376376    assert_eq ! ( res,  [ 14 ,  18 ,  22 ,  26 ] ) ; 
377377} 
378378
379+ // The current implementation of SliceIndex fails to handle methods 
380+ // orthogonally from range types; therefore, it is worth testing 
381+ // all of the indexing operations on each input. 
379382mod  slice_index { 
380-     // Test a slicing operation that should succeed,  
381-     // testing  it on all of the indexing methods.  
383+     // This checks all six indexing methods, given an input range that  
384+     // should succeed. ( it is NOT suitable for testing invalid inputs)  
382385    macro_rules!  assert_range_eq { 
383386        ( $arr: expr,  $range: expr,  $expected: expr) 
384387        => { 
@@ -423,7 +426,7 @@ mod slice_index {
423426    // because if it can't, then what are we even doing here? 
424427    // 
425428    // (Be aware this only demonstrates the ability to detect bugs 
426-     //  in the FIRST method it calls , as the macro is not designed 
429+     //  in the FIRST method that panics , as the macro is not designed 
427430    //  to be used in `should_panic`) 
428431    #[ test]  
429432    #[ should_panic( expected = "out of range" ) ]  
@@ -446,30 +449,29 @@ mod slice_index {
446449    // and `None` test cases for get/get_mut. 
447450    macro_rules!  panic_cases { 
448451        ( $( 
449-             mod  $case_name: ident { 
450-                 let  DATA :  $Data:  ty = $data: expr; 
452+             // each test case needs a unique name to namespace the tests 
453+             in mod  $case_name: ident { 
454+                 data:  $data: expr; 
451455
452456                // optional: 
453457                // 
454-                 // a similar input for which DATA[input] succeeds, and the corresponding 
455-                 // output as an array.  This helps validate "critical points" where an 
456-                 // input range straddles the boundary between valid and invalid. 
458+                 // one or more similar inputs for which data[input] succeeds, 
459+                 // and the corresponding output as an array.  This helps validate 
460+                 // "critical points" where an input range straddles the boundary 
461+                 // between valid and invalid. 
457462                // (such as the input `len..len`, which is just barely valid) 
458463                $( 
459-                     let  GOOD_INPUT  = $good: expr; 
460-                     let  GOOD_OUTPUT  = $output: expr; 
464+                     good:  data[ $good: expr]  == $output: expr; 
461465                ) * 
462466
463-                 let  BAD_INPUT  = $bad: expr; 
464-                 const  EXPECT_MSG  = $expect_msg: expr; 
465- 
466-                 !!generate_tests!!
467+                 bad:  data[ $bad: expr] ; 
468+                 message:  $expect_msg: expr; 
467469            } 
468470        ) * )  => { $( 
469471            mod  $case_name { 
470472                #[ test] 
471473                fn  pass( )  { 
472-                     let  mut  v:  $Data  = $data; 
474+                     let  mut  v = $data; 
473475
474476                    $(  assert_range_eq!( $data,  $good,  $output) ;  ) * 
475477
@@ -487,15 +489,15 @@ mod slice_index {
487489                #[ test] 
488490                #[ should_panic( expected = $expect_msg) ] 
489491                fn  index_fail( )  { 
490-                     let  v:  $Data  = $data; 
492+                     let  v = $data; 
491493                    let  v:  & [ _]  = & v; 
492494                    let  _v = & v[ $bad] ; 
493495                } 
494496
495497                #[ test] 
496498                #[ should_panic( expected = $expect_msg) ] 
497499                fn  index_mut_fail( )  { 
498-                     let  mut  v:  $Data  = $data; 
500+                     let  mut  v = $data; 
499501                    let  v:  & mut  [ _]  = & mut  v; 
500502                    let  _v = & mut  v[ $bad] ; 
501503                } 
@@ -516,112 +518,80 @@ mod slice_index {
516518    } 
517519
518520    panic_cases !  { 
519-         mod  rangefrom_len { 
520-             let  DATA :  [ i32 ;  6 ]  = [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
521- 
522-             let  GOOD_INPUT  = 6 ..; 
523-             let  GOOD_OUTPUT  = [ ] ; 
521+         in mod  rangefrom_len { 
522+             data:  [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
524523
525-             let  BAD_INPUT  = 7 ..; 
526-             const  EXPECT_MSG  = "but ends at" ;  // perhaps not ideal 
527- 
528-             !!generate_tests!!
524+             good:  data[ 6 ..]  == [ ] ; 
525+             bad:  data[ 7 ..] ; 
526+             message:  "but ends at" ;  // perhaps not ideal 
529527        } 
530528
531-         mod  rangeto_len { 
532-             let  DATA :  [ i32 ;  6 ]  = [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
533- 
534-             let  GOOD_INPUT  = ..6 ; 
535-             let  GOOD_OUTPUT  = [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
529+         in mod  rangeto_len { 
530+             data:  [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
536531
537-             let  BAD_INPUT  = ..7 ; 
538-             const  EXPECT_MSG  = "out of range" ; 
539- 
540-             !!generate_tests!!
532+             good:  data[ ..6 ]  == [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
533+             bad:  data[ ..7 ] ; 
534+             message:  "out of range" ; 
541535        } 
542536
543-         mod  rangetoinclusive_len { 
544-             let  DATA :  [ i32 ;  6 ]  = [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
545- 
546-             let  GOOD_INPUT  = ..=5 ; 
547-             let  GOOD_OUTPUT  = [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
537+         in mod  rangetoinclusive_len { 
538+             data:  [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
548539
549-             let  BAD_INPUT  = ..=6 ; 
550-             const  EXPECT_MSG  = "out of range" ; 
551- 
552-             !!generate_tests!!
540+             good:  data[ ..=5 ]  == [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
541+             bad:  data[ ..=6 ] ; 
542+             message:  "out of range" ; 
553543        } 
554544
555-         mod  range_len_len { 
556-             let  DATA :  [ i32 ;  6 ]  = [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
557- 
558-             let  GOOD_INPUT  = 6 ..6 ; 
559-             let  GOOD_OUTPUT  = [ ] ; 
545+         in mod  range_len_len { 
546+             data:  [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
560547
561-             let  BAD_INPUT  = 7 ..7 ; 
562-             const  EXPECT_MSG  = "out of range" ; 
563- 
564-             !!generate_tests!!
548+             good:  data[ 6 ..6 ]  == [ ] ; 
549+             bad:  data[ 7 ..7 ] ; 
550+             message:  "out of range" ; 
565551        } 
566552
567-         mod  rangeinclusive_len_len{ 
568-             let  DATA :  [ i32 ;  6 ]  = [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
569- 
570-             let  GOOD_INPUT  = 6 ..=5 ; 
571-             let  GOOD_OUTPUT  = [ ] ; 
572- 
573-             let  BAD_INPUT  = 7 ..=6 ; 
574-             const  EXPECT_MSG  = "out of range" ; 
553+         in mod  rangeinclusive_len_len { 
554+             data:  [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
575555
576-             !!generate_tests!!
556+             good:  data[ 6 ..=5 ]  == [ ] ; 
557+             bad:  data[ 7 ..=6 ] ; 
558+             message:  "out of range" ; 
577559        } 
578560    } 
579561
580562    panic_cases !  { 
581-         mod  range_neg_width { 
582-             let  DATA :  [ i32 ;  6 ]  = [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
583- 
584-             let  GOOD_INPUT  = 4 ..4 ; 
585-             let  GOOD_OUTPUT  = [ ] ; 
586- 
587-             let  BAD_INPUT  = 4 ..3 ; 
588-             const  EXPECT_MSG  = "but ends at" ; 
563+         in mod  range_neg_width { 
564+             data:  [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
589565
590-             !!generate_tests!!
566+             good:  data[ 4 ..4 ]  == [ ] ; 
567+             bad:  data[ 4 ..3 ] ; 
568+             message:  "but ends at" ; 
591569        } 
592570
593-         mod  rangeinclusive_neg_width { 
594-             let   DATA :   [ i32 ;   6 ]  =  [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
571+         in  mod  rangeinclusive_neg_width { 
572+             data :  [ 0 ,  1 ,  2 ,  3 ,  4 ,  5 ] ; 
595573
596-             let  GOOD_INPUT  = 4 ..=3 ; 
597-             let  GOOD_OUTPUT  = [ ] ; 
598- 
599-             let  BAD_INPUT  = 4 ..=2 ; 
600-             const  EXPECT_MSG  = "but ends at" ; 
601- 
602-             !!generate_tests!!
574+             good:  data[ 4 ..=3 ]  == [ ] ; 
575+             bad:  data[ 4 ..=2 ] ; 
576+             message:  "but ends at" ; 
603577        } 
604578    } 
605579
606580    panic_cases !  { 
607-         mod  rangeinclusive_overflow { 
608-             let   DATA :   [ i32 ;   2 ]  =  [ 0 ,  1 ] ; 
581+         in  mod  rangeinclusive_overflow { 
582+             data :  [ 0 ,  1 ] ; 
609583
610584            // note: using 0 specifically ensures that the result of overflowing is 0..0, 
611585            //       so that `get` doesn't simply return None for the wrong reason. 
612-             let  BAD_INPUT  = 0  ..= :: std:: usize :: MAX ; 
613-             const  EXPECT_MSG  = "maximum usize" ; 
614- 
615-             !!generate_tests!!
586+             bad:  data[ 0  ..= :: std:: usize :: MAX ] ; 
587+             message:  "maximum usize" ; 
616588        } 
617589
618-         mod  rangetoinclusive_overflow { 
619-             let  DATA :  [ i32 ;  2 ]  = [ 0 ,  1 ] ; 
620- 
621-             let  BAD_INPUT  = ..= :: std:: usize :: MAX ; 
622-             const  EXPECT_MSG  = "maximum usize" ; 
590+         in mod  rangetoinclusive_overflow { 
591+             data:  [ 0 ,  1 ] ; 
623592
624-             !!generate_tests!!
593+             bad:  data[ ..= :: std:: usize :: MAX ] ; 
594+             message:  "maximum usize" ; 
625595        } 
626596    }  // panic_cases! 
627597} 
0 commit comments