@@ -3353,6 +3353,91 @@ func testMapValuesBreak(t *testing.T, builder baseMapCollIntBuilder) {
33533353 }
33543354}
33553355
3356+ func getMapValuesRevCases (builder baseMapCollIntBuilder ) []baseMapTestCase {
3357+ return []baseMapTestCase {
3358+ {
3359+ name : "ValuesRev() on empty collection" ,
3360+ coll : builder .Empty (),
3361+ want1 : []Pair [int , int ](nil ),
3362+ },
3363+ {
3364+ name : "ValuesRev() on one-item collection" ,
3365+ coll : builder .One (),
3366+ want1 : []Pair [int , int ]{NewPair (1 , 111 )},
3367+ },
3368+ {
3369+ name : "ValuesRev() on three-item collection" ,
3370+ coll : builder .Three (),
3371+ want1 : []Pair [int , int ]{NewPair (3 , 333 ), NewPair (2 , 222 ), NewPair (1 , 111 )},
3372+ },
3373+ }
3374+ }
3375+
3376+ func testMapValuesRev (t * testing.T , builder baseMapCollIntBuilder ) {
3377+ cases := getMapValuesRevCases (builder )
3378+ for _ , tt := range cases {
3379+ t .Run (tt .name , func (t * testing.T ) {
3380+ got := slices .Collect (tt .coll .ValuesRev ())
3381+ if ! reflect .DeepEqual (got , tt .want1 ) {
3382+ t .Errorf ("ValuesRev() = %v, want1 = %v" , got , tt .want1 )
3383+ }
3384+ })
3385+ }
3386+ }
3387+
3388+ func getMapValuesRevBreakCases (builder baseMapCollIntBuilder ) []* baseMapTestCase {
3389+ return []* baseMapTestCase {
3390+ {
3391+ name : "ValuesRev() on three-item collection, break immediately" ,
3392+ coll : builder .Three (),
3393+ args : baseMapIntArgs {
3394+ predicate : func (_ int , p Pair [int , int ]) bool {
3395+ return false
3396+ },
3397+ },
3398+ want1 : []Pair [int , int ](nil ),
3399+ },
3400+ {
3401+ name : "ValuesRev() on three-item collection, break at middle" ,
3402+ coll : builder .Three (),
3403+ args : baseMapIntArgs {
3404+ predicate : func (_ int , p Pair [int , int ]) bool {
3405+ return p .Key () > 2
3406+ },
3407+ },
3408+ want1 : []Pair [int , int ]{NewPair (3 , 333 )},
3409+ },
3410+ {
3411+ name : "ValuesRev() on three-item collection, break after middle" ,
3412+ coll : builder .Three (),
3413+ args : baseMapIntArgs {
3414+ predicate : func (_ int , p Pair [int , int ]) bool {
3415+ return p .Key () >= 2
3416+ },
3417+ },
3418+ want1 : []Pair [int , int ]{NewPair (3 , 333 ), NewPair (2 , 222 )},
3419+ },
3420+ }
3421+ }
3422+
3423+ func testMapValuesRevBreak (t * testing.T , builder baseMapCollIntBuilder ) {
3424+ cases := getMapValuesRevBreakCases (builder )
3425+ for _ , tt := range cases {
3426+ t .Run (tt .name , func (t * testing.T ) {
3427+ got := []Pair [int , int ](nil )
3428+ for v := range tt .coll .ValuesRev () {
3429+ if ! tt .args .predicate (- 1 , v ) {
3430+ break
3431+ }
3432+ got = append (got , v )
3433+ }
3434+ if ! reflect .DeepEqual (got , tt .want1 ) {
3435+ t .Errorf ("ValuesRev() = %v, want1 = %v" , got , tt .want1 )
3436+ }
3437+ })
3438+ }
3439+ }
3440+
33563441func getMapCopyCases (builder baseMapCollIntBuilder ) []baseMapTestCase {
33573442 return []baseMapTestCase {
33583443 {
0 commit comments