diff --git a/tests/endian_test.go b/tests/endian_test.go new file mode 100644 index 0000000..5c081bf --- /dev/null +++ b/tests/endian_test.go @@ -0,0 +1,75 @@ +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) + } + } + +}