-
Notifications
You must be signed in to change notification settings - Fork 0
/
reflect_copy_test.go
106 lines (96 loc) · 1.31 KB
/
reflect_copy_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package perse
import (
"testing"
)
func TestBasicCopy(t *testing.T) {
var v1, v2 int
v1 = 1
c := Copy(v1)
v2, ok := c.(int)
if !ok {
t.Fail()
}
v2 = 2
if v1 == v2 {
t.Fail()
}
}
type simple struct {
A int
}
func TestStructExportedCopy(t *testing.T) {
var v1, v2 simple
v1 = simple{0}
v1.A = 1
c := Copy(v1)
v2, ok := c.(simple)
if !ok {
t.Fail()
}
v2.A = 2
if v1.A == v2.A {
t.Fail()
}
}
type simpleun struct {
a int
}
func TestStructUnExportedCopy(t *testing.T) {
var v1, v2 simpleun
v1 = simpleun{0}
v1.a = 1
c := Copy(v1)
v2, ok := c.(simpleun)
if !ok {
t.Fail()
}
v2.a = 2
if v1.a == v2.a {
t.Fail()
}
}
func TestBasicPtrCopy(t *testing.T) {
var v1, v2 *int
v1 = new(int)
*v1 = 1
c := Copy(v1)
v2, ok := c.(*int)
if !ok {
t.Error("Type missmatch")
}
*v2 = 2
if *v1 == *v2 {
t.Error("Its not a copy")
}
}
func TestStructPtrCopy(t *testing.T) {
var v1, v2 *simple
v1 = &simple{0}
v1.A = 1
c := Copy(v1)
v2, ok := c.(*simple)
if !ok {
t.Fail()
}
v2.A = 2
if v1.A == v2.A {
t.Fail()
}
}
type ptrsimpleptr struct {
B *simple
}
func TestPtrStructPtrCopy(t *testing.T) {
var v1, v2 *ptrsimpleptr
v1 = &ptrsimpleptr{&simple{0}}
v1.B.A = 1
c := Copy(v1)
v2, ok := c.(*ptrsimpleptr)
if !ok {
t.Fail()
}
v2.B.A = 2
if v1.B.A == v2.B.A {
t.Fail()
}
}