// Copyright 2019 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package mapsort_test import ( "reflect" "testing" "google.golang.org/protobuf/internal/mapsort" "google.golang.org/protobuf/internal/value" pref "google.golang.org/protobuf/reflect/protoreflect" ) func TestRange(t *testing.T) { for _, test := range []struct { mapv interface{} kind pref.Kind }{ { mapv: &map[bool]int32{ false: 0, true: 1, }, kind: pref.BoolKind, }, { mapv: &map[int32]int32{ 0: 0, 1: 1, 2: 2, }, kind: pref.Int32Kind, }, { mapv: &map[uint64]int32{ 0: 0, 1: 1, 2: 2, }, kind: pref.Uint64Kind, }, { mapv: &map[string]int32{ "a": 0, "b": 1, "c": 2, }, kind: pref.StringKind, }, } { rv := reflect.TypeOf(test.mapv).Elem() mapv := value.MapOf(test.mapv, value.NewConverter(rv.Key(), test.kind), value.NewConverter(rv.Elem(), pref.Int32Kind)) var got []pref.MapKey mapsort.Range(mapv, test.kind, func(key pref.MapKey, _ pref.Value) bool { got = append(got, key) return true }) for i, key := range got { if int64(i) != mapv.Get(key).Int() { t.Errorf("out of order range over map: %v", got) break } } } }