map_elem_eface_test.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package test
  2. import (
  3. "testing"
  4. "github.com/modern-go/reflect2"
  5. "github.com/modern-go/test/must"
  6. "github.com/modern-go/test"
  7. "context"
  8. )
  9. func Test_map_elem_eface(t *testing.T) {
  10. t.Run("SetIndex", testOp(func(api reflect2.API) interface{} {
  11. obj := map[int]interface{}{}
  12. valType := api.TypeOf(obj).(reflect2.MapType)
  13. valType.SetIndex(obj, 2, 4)
  14. valType.SetIndex(obj, 3, nil)
  15. return obj
  16. }))
  17. t.Run("GetIndex", testOp(func(api reflect2.API) interface{} {
  18. obj := map[int]interface{}{3: 9, 2: nil}
  19. valType := api.TypeOf(obj).(reflect2.MapType)
  20. return []interface{}{
  21. valType.GetIndex(obj, 3),
  22. valType.GetIndex(obj, 2),
  23. valType.GetIndex(obj, 0),
  24. }
  25. }))
  26. t.Run("TryGetIndex", test.Case(func(ctx context.Context) {
  27. obj := map[int]interface{}{3: 9, 2: nil}
  28. valType := reflect2.TypeOf(obj).(reflect2.MapType)
  29. elem, found := valType.TryGetIndex(obj, 3)
  30. must.Equal(9, elem)
  31. must.Pass(found)
  32. elem, found = valType.TryGetIndex(obj, 2)
  33. must.Nil(elem)
  34. must.Pass(found)
  35. elem, found = valType.TryGetIndex(obj, 0)
  36. must.Nil(elem)
  37. must.Pass(!found)
  38. }))
  39. t.Run("Iterate", testOp(func(api reflect2.API) interface{} {
  40. obj := map[int]interface{}{2: 4}
  41. valType := api.TypeOf(obj).(reflect2.MapType)
  42. iter := valType.Iterate(obj)
  43. must.Pass(iter.HasNext(), "api", api)
  44. key1, elem1 := iter.Next()
  45. must.Pass(!iter.HasNext(), "api", api)
  46. return []interface{}{key1, elem1}
  47. }))
  48. }