| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- // 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
- }
- }
- }
- }
|