Files
sqlite3/tests/endian_test.go
2024-05-02 23:24:24 +01:00

76 lines
1.4 KiB
Go

package tests
import (
"bytes"
"encoding/binary"
"log"
"strconv"
"testing"
"github.com/ncruces/go-sqlite3"
)
func Test_endianness(t *testing.T) {
big := binary.BigEndian.AppendUint64(nil, 0x1234567890ABCDEF)
little := binary.LittleEndian.AppendUint64(nil, 0x1234567890ABCDEF)
native := binary.NativeEndian.AppendUint64(nil, 0x1234567890ABCDEF)
switch {
case bytes.Equal(big, native):
t.Log("Platform is big endian")
case bytes.Equal(little, native):
t.Log("Platform is little endian")
default:
t.Fatal("Platform is middle endian")
}
db, err := sqlite3.Open(":memory:")
if err != nil {
log.Fatal(err)
}
defer db.Close()
err = db.Exec(`CREATE TABLE test (col)`)
if err != nil {
log.Fatal(err)
}
const value = -9223372036854775808
{
stmt, _, err := db.Prepare(`INSERT INTO test VALUES (?)`)
if err != nil {
t.Fatal(err)
}
defer stmt.Close()
err = stmt.BindInt64(1, value)
if err != nil {
t.Fatal(err)
}
err = stmt.Exec()
if err != nil {
t.Fatal(err)
}
}
{
stmt, _, err := db.Prepare(`SELECT * FROM test`)
if err != nil {
t.Fatal(err)
}
defer stmt.Close()
if stmt.Step() {
if got := stmt.ColumnInt(0); got != value {
t.Errorf("got %d, want %d", got, value)
}
if got := stmt.ColumnText(0); got != strconv.FormatInt(value, 10) {
t.Errorf("got %s, want %d", got, value)
}
}
if err != nil {
t.Fatal(err)
}
}
}