package mem_test import ( "testing" "unsafe" "git.brut.systems/judah/xx/mem" "git.brut.systems/judah/xx/testx" ) func TestBitCast(t *testing.T) { a := uint32(0xFFFF_FFFF) b := mem.BitCast[float32](&a) c := mem.BitCast[uint32](&b) if a != c { t.Fail() } v := uint8(0xFF) d := mem.BitCast[int8](&v) if d != -1 { t.Fail() } e := mem.BitCast[uint8](&d) if e != 255 { t.Fail() } } func TestAllocationPrimitives(t *testing.T) { t.Run("reserve, unreserve", func(t *testing.T) { data, err := mem.Reserve(1 * mem.Gigabyte) testx.Expect(t, err == nil, "mem.Reserve returned an error - %s", err) testx.Expect(t, len(data) == 1*mem.Gigabyte, "len was %d", len(data)) testx.Expect(t, cap(data) == 1*mem.Gigabyte, "len was %d", cap(data)) err = mem.Release(data) testx.Expect(t, err == nil, "mem.Unreserve returned an error - %s", err) }) t.Run("commit", func(t *testing.T) { data, err := mem.Reserve(1 * mem.Gigabyte) testx.Expect(t, err == nil, "mem.Reserve returned an error - %s", err) err = mem.Commit(data, mem.AccessRead|mem.AccessWrite) testx.Expect(t, err == nil, "mem.Commit returned an error - %s", err) for i := range data { data[i] = byte(i * i) } }) t.Run("decommit", func(t *testing.T) { data, err := mem.Reserve(1 * mem.Gigabyte) testx.Expect(t, err == nil, "mem.Reserve returned an error - %s", err) err = mem.Commit(data, mem.AccessRead|mem.AccessWrite) testx.Expect(t, err == nil, "mem.Commit returned an error - %s", err) before := uintptr(unsafe.Pointer(&data[0])) err = mem.Decommit(data) testx.Expect(t, err == nil, "mem.Decommit returned an error - %s", err) // accessing data before recommitting it will fail err = mem.Commit(data, mem.AccessRead|mem.AccessWrite) testx.Expect(t, err == nil, "mem.Commit returned an error - %s", err) after := uintptr(unsafe.Pointer(&data[0])) testx.Expect(t, before == after, "base pointers did not match between after recommit %d != %d", before, after) for i := range data { data[i] = byte(i * i) } }) }