(t *testing.T)
| 28 | } |
| 29 | |
| 30 | func TestInterner_UnsafeClone(t *testing.T) { |
| 31 | i := New() |
| 32 | defer i.Close() |
| 33 | |
| 34 | value1 := pq.ByteArrayValue([]byte("foo")) |
| 35 | value2 := pq.ByteArrayValue([]byte("foo")) |
| 36 | |
| 37 | clone1 := i.UnsafeClone(&value1) |
| 38 | clone2 := i.UnsafeClone(&value2) |
| 39 | |
| 40 | clone1Addr := unsafe.SliceData(clone1.ByteArray()) |
| 41 | clone2Addr := unsafe.SliceData(clone2.ByteArray()) |
| 42 | if clone1Addr != clone2Addr { |
| 43 | t.Errorf("expected interned values to have same memory address, got %p and %p", clone1Addr, clone2Addr) |
| 44 | } |
| 45 | |
| 46 | value1Addr := unsafe.SliceData(value1.ByteArray()) |
| 47 | value2Addr := unsafe.SliceData(value2.ByteArray()) |
| 48 | if value1Addr == value2Addr { |
| 49 | t.Error("expected original values to have different memory addresses") |
| 50 | } |
| 51 | |
| 52 | if string(clone1.ByteArray()) != string(clone2.ByteArray()) { |
| 53 | t.Error("expected same byte values") |
| 54 | } |
| 55 | if string(value1.ByteArray()) != string(value2.ByteArray()) { |
| 56 | t.Error("expected original values to have same content") |
| 57 | } |
| 58 | |
| 59 | clone3 := i.UnsafeClone(&value1) // Clone the same value again |
| 60 | clone3Addr := unsafe.SliceData(clone3.ByteArray()) |
| 61 | if clone1Addr != clone3Addr { |
| 62 | t.Errorf("expected repeated interning to return same memory, got %p and %p", clone1Addr, clone3Addr) |
| 63 | } |
| 64 | |
| 65 | differentValue := pq.ByteArrayValue([]byte("bar")) |
| 66 | differentClone := i.UnsafeClone(&differentValue) |
| 67 | differentAddr := unsafe.SliceData(differentClone.ByteArray()) |
| 68 | if clone1Addr == differentAddr { |
| 69 | t.Error("expected different strings to have different interned memory") |
| 70 | } |
| 71 | } |
| 72 | |
| 73 | func TestPqValueMemoryLayout(t *testing.T) { |
| 74 | var pqVal pq.Value |
nothing calls this directly
no test coverage detected