forked from marcboeker/go-duckdb
-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathvector_test.go
More file actions
83 lines (68 loc) · 2.16 KB
/
vector_test.go
File metadata and controls
83 lines (68 loc) · 2.16 KB
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
package duckdb
import (
"testing"
"unsafe"
"github.com/stretchr/testify/require"
"github.com/duckdb/duckdb-go/v2/mapping"
)
func TestSetGetPrimitive(t *testing.T) {
t.Run("int32", func(t *testing.T) {
data := make([]byte, 100*unsafe.Sizeof(int32(0)))
vec := &vector{dataPtr: unsafe.Pointer(&data[0])}
testValues := []int32{-100, 0, 42, 1337, 2147483647}
for i, val := range testValues {
setPrimitive(vec, mapping.IdxT(i), val)
got := getPrimitive[int32](vec, mapping.IdxT(i))
require.Equal(t, val, got, "value at index %d", i)
}
})
t.Run("float64", func(t *testing.T) {
data := make([]byte, 100*unsafe.Sizeof(float64(0)))
vec := &vector{dataPtr: unsafe.Pointer(&data[0])}
testValues := []float64{-3.14, 0.0, 2.718, 1e10, -1e-10}
for i, val := range testValues {
setPrimitive(vec, mapping.IdxT(i), val)
got := getPrimitive[float64](vec, mapping.IdxT(i))
require.Equal(t, val, got, "value at index %d", i)
}
})
t.Run("bool", func(t *testing.T) {
data := make([]byte, 100*unsafe.Sizeof(bool(false)))
vec := &vector{dataPtr: unsafe.Pointer(&data[0])}
setPrimitive(vec, 0, true)
setPrimitive(vec, 1, false)
setPrimitive(vec, 2, true)
require.True(t, getPrimitive[bool](vec, 0))
require.False(t, getPrimitive[bool](vec, 1))
require.True(t, getPrimitive[bool](vec, 2))
})
t.Run("uint64", func(t *testing.T) {
data := make([]byte, 100*unsafe.Sizeof(uint64(0)))
vec := &vector{dataPtr: unsafe.Pointer(&data[0])}
testValues := []uint64{0, 1, 42, 18446744073709551615}
for i, val := range testValues {
setPrimitive(vec, mapping.IdxT(i), val)
got := getPrimitive[uint64](vec, mapping.IdxT(i))
require.Equal(t, val, got, "value at index %d", i)
}
})
}
func TestSetGetPrimitiveLargeIndex(t *testing.T) {
data := make([]byte, 10000*int(unsafe.Sizeof(int32(0))))
vec := &vector{dataPtr: unsafe.Pointer(&data[0])}
testCases := []struct {
idx mapping.IdxT
val int32
}{
{0, 100},
{100, 200},
{1000, 300},
{5000, 400},
{9999, 500},
}
for _, tc := range testCases {
setPrimitive(vec, tc.idx, tc.val)
got := getPrimitive[int32](vec, tc.idx)
require.Equal(t, tc.val, got, "value at index %d", tc.idx)
}
}