cp_test.go 882 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package cputil
  2. import (
  3. "testing"
  4. "github.com/google/go-cmp/cmp"
  5. "github.com/stretchr/testify/require"
  6. )
  7. type Dummy struct {
  8. A1 int
  9. A2 int
  10. B1 bool
  11. B2 bool
  12. C1 map[string]interface{}
  13. D1 []int
  14. }
  15. func TestShallowCopy(t *testing.T) {
  16. d1 := &Dummy{
  17. A1: 0,
  18. A2: 1,
  19. B1: false,
  20. B2: true,
  21. C1: map[string]interface{}{
  22. "a": 1,
  23. },
  24. D1: []int{0, 1},
  25. }
  26. d2 := &Dummy{}
  27. _ = ShallowCopy(&d2, d1)
  28. require.Empty(t, cmp.Diff(d1, d2))
  29. // case: 浅拷贝会互相影响
  30. d1.C1["a"] = 2
  31. require.Equal(t, d2.C1["a"], d1.C1["a"])
  32. }
  33. func TestDeepCopy(t *testing.T) {
  34. d1 := &Dummy{
  35. A1: 0,
  36. A2: 1,
  37. B1: false,
  38. B2: true,
  39. C1: map[string]interface{}{
  40. "a": 1,
  41. },
  42. D1: []int{0, 1},
  43. }
  44. d2 := &Dummy{}
  45. _ = DeepCopy(&d2, d1)
  46. require.Empty(t, cmp.Diff(d1, d2))
  47. // case: 深拷贝不会互相影响
  48. d1.C1["a"] = 2
  49. require.NotEqual(t, d2.C1["a"], d1.C1["a"])
  50. }