map_elem_array_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package tests
  2. import (
  3. "github.com/modern-go/reflect2"
  4. "testing"
  5. )
  6. func Test_map_elem_array(t *testing.T) {
  7. var pInt = func(val int) *int {
  8. return &val
  9. }
  10. t.Run("SetIndex", testOp(func(api reflect2.API) interface{} {
  11. obj := map[int][2]*int{}
  12. valType := api.TypeOf(obj).(reflect2.MapType)
  13. elem1 := [2]*int{(*int)(reflect2.PtrOf(1)), (*int)(reflect2.PtrOf(2))}
  14. valType.SetIndex(&obj, pInt(2), &elem1)
  15. elem2 := [2]*int{(*int)(reflect2.PtrOf(3)), (*int)(reflect2.PtrOf(4))}
  16. valType.SetIndex(&obj, pInt(3), &elem2)
  17. return obj
  18. }))
  19. t.Run("SetIndex zero length array", testOp(func(api reflect2.API) interface{} {
  20. obj := map[int][0]*int{}
  21. valType := api.TypeOf(obj).(reflect2.MapType)
  22. elem1 := [0]*int{}
  23. valType.SetIndex(&obj, pInt(2), &elem1)
  24. elem2 := [0]*int{}
  25. valType.SetIndex(&obj, pInt(3), &elem2)
  26. return obj
  27. }))
  28. t.Run("SetIndex single ptr array", testOp(func(api reflect2.API) interface{} {
  29. obj := map[int][1]*int{}
  30. valType := api.TypeOf(obj).(reflect2.MapType)
  31. elem1 := [1]*int{(*int)(reflect2.PtrOf(1))}
  32. valType.SetIndex(&obj, pInt(2), &elem1)
  33. elem2 := [1]*int{}
  34. valType.SetIndex(&obj, pInt(3), &elem2)
  35. return obj
  36. }))
  37. t.Run("SetIndex single chan array", testOp(func(api reflect2.API) interface{} {
  38. obj := map[int][1]chan int{}
  39. valType := api.TypeOf(obj).(reflect2.MapType)
  40. elem1 := [1]chan int{}
  41. valType.SetIndex(&obj, pInt(2), &elem1)
  42. elem2 := [1]chan int{}
  43. valType.SetIndex(&obj, pInt(3), &elem2)
  44. return obj
  45. }))
  46. t.Run("SetIndex single func array", testOp(func(api reflect2.API) interface{} {
  47. obj := map[int][1]func(){}
  48. valType := api.TypeOf(obj).(reflect2.MapType)
  49. elem1 := [1]func(){}
  50. valType.SetIndex(&obj, pInt(2), &elem1)
  51. elem2 := [1]func(){}
  52. valType.SetIndex(&obj, pInt(3), &elem2)
  53. return obj
  54. }))
  55. }