@@ -11,6 +11,7 @@ import (
11
11
"reflect"
12
12
"strings"
13
13
"testing"
14
+ "unsafe"
14
15
)
15
16
16
17
var compareTests = [][]reflect.Value {
@@ -32,6 +33,7 @@ var compareTests = [][]reflect.Value{
32
33
ct (reflect .TypeOf (complex128 (0 + 1i )), - 1 - 1i , - 1 + 0i , - 1 + 1i , 0 - 1i , 0 + 0i , 0 + 1i , 1 - 1i , 1 + 0i , 1 + 1i ),
33
34
ct (reflect .TypeOf (false ), false , true ),
34
35
ct (reflect .TypeOf (& ints [0 ]), & ints [0 ], & ints [1 ], & ints [2 ]),
36
+ ct (reflect .TypeOf (unsafe .Pointer (& ints [0 ])), unsafe .Pointer (& ints [0 ]), unsafe .Pointer (& ints [1 ]), unsafe .Pointer (& ints [2 ])),
35
37
ct (reflect .TypeOf (chans [0 ]), chans [0 ], chans [1 ], chans [2 ]),
36
38
ct (reflect .TypeOf (toy {}), toy {0 , 1 }, toy {0 , 2 }, toy {1 , - 1 }, toy {1 , 1 }),
37
39
ct (reflect .TypeOf ([2 ]int {}), [2 ]int {1 , 1 }, [2 ]int {1 , 2 }, [2 ]int {2 , 0 }),
@@ -118,6 +120,10 @@ var sortTests = []sortTest{
118
120
pointerMap (),
119
121
"PTR0:0 PTR1:1 PTR2:2" ,
120
122
},
123
+ {
124
+ unsafePointerMap (),
125
+ "UNSAFEPTR0:0 UNSAFEPTR1:1 UNSAFEPTR2:2" ,
126
+ },
121
127
{
122
128
map [toy ]string {{7 , 2 }: "72" , {7 , 1 }: "71" , {3 , 4 }: "34" },
123
129
"{3 4}:34 {7 1}:71 {7 2}:72" ,
@@ -159,6 +165,14 @@ func sprintKey(key reflect.Value) string {
159
165
}
160
166
}
161
167
return "PTR???"
168
+ case "unsafe.Pointer" :
169
+ ptr := key .Interface ().(unsafe.Pointer )
170
+ for i := range ints {
171
+ if ptr == unsafe .Pointer (& ints [i ]) {
172
+ return fmt .Sprintf ("UNSAFEPTR%d" , i )
173
+ }
174
+ }
175
+ return "UNSAFEPTR???"
162
176
case "chan int" :
163
177
c := key .Interface ().(chan int )
164
178
for i := range chans {
@@ -185,6 +199,14 @@ func pointerMap() map[*int]string {
185
199
return m
186
200
}
187
201
202
+ func unsafePointerMap () map [unsafe.Pointer ]string {
203
+ m := make (map [unsafe.Pointer ]string )
204
+ for i := 2 ; i >= 0 ; i -- {
205
+ m [unsafe .Pointer (& ints [i ])] = fmt .Sprint (i )
206
+ }
207
+ return m
208
+ }
209
+
188
210
func chanMap () map [chan int ]string {
189
211
m := make (map [chan int ]string )
190
212
for i := 2 ; i >= 0 ; i -- {
0 commit comments