mem: simplify Sizeof/Alignof; testx: add ShouldPanic

This commit is contained in:
Judah Caruso 2025-12-13 12:13:18 -07:00
parent e2cec86c39
commit 43e07fcbac
2 changed files with 16 additions and 8 deletions

View file

@ -11,18 +11,18 @@ const (
Terabyte
)
// SizeOf returns the size (in bytes) of the given type.
// Sizeof returns the size (in bytes) of the given type.
//
// Not to be confused with [unsafe.Sizeof] which returns the size of a type via an expression.
func SizeOf[T any]() uintptr {
return unsafe.Sizeof(ZeroValue[T]())
func Sizeof[T any]() uintptr {
return unsafe.Sizeof(*(*T)(nil))
}
// AlignOf returns the alignment (in bytes) of the given type.
// Alignof returns the alignment (in bytes) of the given type.
//
// Not to be confused with [unsafe.AlignOf] which returns the alignment of a type via an expression.
func AlignOf[T any]() uintptr {
return unsafe.Alignof(ZeroValue[T]())
func Alignof[T any]() uintptr {
return unsafe.Alignof(*(*T)(nil))
}
// ZeroValue returns the zero value of a given type.
@ -34,7 +34,7 @@ func ZeroValue[T any]() (_ T) {
//
// BitCast panics if the sizes of the types differ.
func BitCast[TOut any, TIn any](value *TIn) TOut {
if SizeOf[TOut]() != SizeOf[TIn]() {
if Sizeof[TOut]() != Sizeof[TIn]() {
panic("bitcast: sizes of types must match")
}
return *((*TOut)(unsafe.Pointer(value)))

View file

@ -7,10 +7,18 @@ func Expect(t *testing.T, cond bool, message ...any) {
if !cond {
if len(message) == 0 {
message = append(message, "assertion failed")
message = append(message, "expectation failed")
}
str := message[0].(string)
t.Fatalf(str, message[1:]...)
}
}
func ShouldPanic(t *testing.T, f func()) {
t.Helper()
defer func() { recover() }()
f()
t.Fatal("expected panic")
}