This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
package langext
|
||||
|
||||
import (
|
||||
"git.blackforestbytes.com/BlackForestBytes/goext/tst"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
type stringerImpl struct{ v string }
|
||||
|
||||
func (s stringerImpl) String() string { return s.v }
|
||||
|
||||
func TestCoalesceWithValue(t *testing.T) {
|
||||
v := 42
|
||||
tst.AssertEqual(t, Coalesce(&v, 0), 42)
|
||||
}
|
||||
|
||||
func TestCoalesceWithNil(t *testing.T) {
|
||||
var p *int
|
||||
tst.AssertEqual(t, Coalesce(p, 99), 99)
|
||||
}
|
||||
|
||||
func TestCoalesceOpt(t *testing.T) {
|
||||
v := 1
|
||||
w := 2
|
||||
tst.AssertDeRefEqual(t, CoalesceOpt(&v, &w), 1)
|
||||
|
||||
var p *int
|
||||
tst.AssertDeRefEqual(t, CoalesceOpt(p, &w), 2)
|
||||
|
||||
tst.AssertPtrEqual(t, CoalesceOpt[int](nil, nil), nil)
|
||||
}
|
||||
|
||||
func TestCoalesce3(t *testing.T) {
|
||||
v := 1
|
||||
w := 2
|
||||
tst.AssertEqual(t, Coalesce3(&v, &w, 99), 1)
|
||||
tst.AssertEqual(t, Coalesce3[int](nil, &w, 99), 2)
|
||||
tst.AssertEqual(t, Coalesce3[int](nil, nil, 99), 99)
|
||||
}
|
||||
|
||||
func TestCoalesce3Opt(t *testing.T) {
|
||||
v := 1
|
||||
tst.AssertDeRefEqual(t, Coalesce3Opt[int](nil, nil, &v), 1)
|
||||
tst.AssertPtrEqual(t, Coalesce3Opt[int](nil, nil, nil), nil)
|
||||
}
|
||||
|
||||
func TestCoalesce4(t *testing.T) {
|
||||
v := 1
|
||||
w := 2
|
||||
x := 3
|
||||
tst.AssertEqual(t, Coalesce4(&v, &w, &x, 99), 1)
|
||||
tst.AssertEqual(t, Coalesce4[int](nil, &w, &x, 99), 2)
|
||||
tst.AssertEqual(t, Coalesce4[int](nil, nil, &x, 99), 3)
|
||||
tst.AssertEqual(t, Coalesce4[int](nil, nil, nil, 99), 99)
|
||||
}
|
||||
|
||||
func TestCoalesce4Opt(t *testing.T) {
|
||||
v := 4
|
||||
tst.AssertDeRefEqual(t, Coalesce4Opt[int](nil, nil, nil, &v), 4)
|
||||
tst.AssertPtrEqual(t, Coalesce4Opt[int](nil, nil, nil, nil), nil)
|
||||
}
|
||||
|
||||
func TestCoalesceString(t *testing.T) {
|
||||
s := "hello"
|
||||
tst.AssertEqual(t, CoalesceString(&s, "def"), "hello")
|
||||
tst.AssertEqual(t, CoalesceString(nil, "def"), "def")
|
||||
}
|
||||
|
||||
func TestCoalesceInt(t *testing.T) {
|
||||
v := 5
|
||||
tst.AssertEqual(t, CoalesceInt(&v, 99), 5)
|
||||
tst.AssertEqual(t, CoalesceInt(nil, 99), 99)
|
||||
}
|
||||
|
||||
func TestCoalesceInt32(t *testing.T) {
|
||||
v := int32(7)
|
||||
tst.AssertEqual(t, CoalesceInt32(&v, 99), int32(7))
|
||||
tst.AssertEqual(t, CoalesceInt32(nil, 99), int32(99))
|
||||
}
|
||||
|
||||
func TestCoalesceBool(t *testing.T) {
|
||||
v := true
|
||||
tst.AssertEqual(t, CoalesceBool(&v, false), true)
|
||||
tst.AssertEqual(t, CoalesceBool(nil, true), true)
|
||||
tst.AssertEqual(t, CoalesceBool(nil, false), false)
|
||||
}
|
||||
|
||||
func TestCoalesceTime(t *testing.T) {
|
||||
now := time.Now()
|
||||
def := time.Unix(0, 0)
|
||||
tst.AssertEqual(t, CoalesceTime(&now, def), now)
|
||||
tst.AssertEqual(t, CoalesceTime(nil, def), def)
|
||||
}
|
||||
|
||||
func TestCoalesceStringer(t *testing.T) {
|
||||
s := stringerImpl{v: "hi"}
|
||||
tst.AssertEqual(t, CoalesceStringer(s, "def"), "hi")
|
||||
|
||||
var nilStringer *stringerImpl
|
||||
tst.AssertEqual(t, CoalesceStringer(nilStringer, "def"), "def")
|
||||
}
|
||||
|
||||
func TestCoalesceDefault(t *testing.T) {
|
||||
tst.AssertEqual(t, CoalesceDefault(0, 99), 99)
|
||||
tst.AssertEqual(t, CoalesceDefault(5, 99), 5)
|
||||
tst.AssertEqual(t, CoalesceDefault("", "def"), "def")
|
||||
tst.AssertEqual(t, CoalesceDefault("v", "def"), "v")
|
||||
}
|
||||
|
||||
func TestSafeCastMatching(t *testing.T) {
|
||||
var v any = "hello"
|
||||
tst.AssertEqual(t, SafeCast(v, "default"), "hello")
|
||||
}
|
||||
|
||||
func TestSafeCastMismatch(t *testing.T) {
|
||||
var v any = 42
|
||||
tst.AssertEqual(t, SafeCast(v, "default"), "default")
|
||||
}
|
||||
|
||||
func TestSafeCastNil(t *testing.T) {
|
||||
tst.AssertEqual(t, SafeCast(nil, 99), 99)
|
||||
}
|
||||
|
||||
func TestCoalesceDblPtrWithValue(t *testing.T) {
|
||||
v := 1
|
||||
pv := &v
|
||||
tst.AssertDeRefEqual(t, CoalesceDblPtr(&pv, nil), 1)
|
||||
}
|
||||
|
||||
func TestCoalesceDblPtrFallback(t *testing.T) {
|
||||
w := 2
|
||||
tst.AssertDeRefEqual(t, CoalesceDblPtr[int](nil, &w), 2)
|
||||
}
|
||||
Reference in New Issue
Block a user