mirror of https://github.com/ollama/ollama.git
209 lines
4.9 KiB
Go
209 lines
4.9 KiB
Go
package gguf
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
)
|
|
|
|
func split(name string, values map[string][]any) (matched []any, unmatched []any) {
|
|
for key, value := range values {
|
|
if key == name {
|
|
matched = value
|
|
} else {
|
|
unmatched = append(unmatched, value...)
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func TestValue(t *testing.T) {
|
|
values := map[string][]any{
|
|
"int64": {int(42), int8(42), int16(42), int32(42), int64(42)},
|
|
"uint64": {uint(42), uint8(42), uint16(42), uint32(42), uint64(42)},
|
|
"float64": {float32(42), float64(42)},
|
|
"string": {"42", "hello"},
|
|
"bool": {true, false},
|
|
}
|
|
|
|
t.Run("int64", func(t *testing.T) {
|
|
matched, unmatched := split("int64", values)
|
|
for _, v := range matched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if i64 := kv.Int(); i64 != 42 {
|
|
t.Errorf("expected 42, got %d", i64)
|
|
}
|
|
}
|
|
|
|
for _, v := range unmatched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if i64 := kv.Int(); i64 != 0 {
|
|
t.Errorf("expected 42, got %d", i64)
|
|
}
|
|
}
|
|
})
|
|
|
|
t.Run("uint64", func(t *testing.T) {
|
|
matched, unmatched := split("uint64", values)
|
|
for _, v := range matched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if u64 := kv.Uint(); u64 != 42 {
|
|
t.Errorf("expected 42, got %d", u64)
|
|
}
|
|
}
|
|
|
|
for _, v := range unmatched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if u64 := kv.Uint(); u64 != 0 {
|
|
t.Errorf("expected 42, got %d", u64)
|
|
}
|
|
}
|
|
})
|
|
|
|
t.Run("float64", func(t *testing.T) {
|
|
matched, unmatched := split("float64", values)
|
|
for _, v := range matched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if f64 := kv.Float(); f64 != 42 {
|
|
t.Errorf("expected 42, got %f", f64)
|
|
}
|
|
}
|
|
|
|
for _, v := range unmatched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if f64 := kv.Float(); f64 != 0 {
|
|
t.Errorf("expected 42, got %f", f64)
|
|
}
|
|
}
|
|
})
|
|
|
|
t.Run("string", func(t *testing.T) {
|
|
matched, unmatched := split("string", values)
|
|
for _, v := range matched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if s := kv.String(); s != v {
|
|
t.Errorf("expected 42, got %s", s)
|
|
}
|
|
}
|
|
|
|
for _, v := range unmatched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if s := kv.String(); s != "" {
|
|
t.Errorf("expected 42, got %s", s)
|
|
}
|
|
}
|
|
})
|
|
|
|
t.Run("bool", func(t *testing.T) {
|
|
matched, unmatched := split("bool", values)
|
|
for _, v := range matched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if b := kv.Bool(); b != v {
|
|
t.Errorf("expected true, got %v", b)
|
|
}
|
|
}
|
|
|
|
for _, v := range unmatched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if b := kv.Bool(); b != false {
|
|
t.Errorf("expected false, got %v", b)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestValues(t *testing.T) {
|
|
values := map[string][]any{
|
|
"int64s": {[]int{42}, []int8{42}, []int16{42}, []int32{42}, []int64{42}},
|
|
"uint64s": {[]uint{42}, []uint8{42}, []uint16{42}, []uint32{42}, []uint64{42}},
|
|
"float64s": {[]float32{42}, []float64{42}},
|
|
"strings": {[]string{"42"}, []string{"hello"}},
|
|
"bools": {[]bool{true}, []bool{false}},
|
|
}
|
|
|
|
t.Run("int64s", func(t *testing.T) {
|
|
matched, unmatched := split("int64s", values)
|
|
for _, v := range matched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if diff := cmp.Diff(kv.Ints(), []int64{42}); diff != "" {
|
|
t.Errorf("diff: %s", diff)
|
|
}
|
|
}
|
|
|
|
for _, v := range unmatched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if i64s := kv.Ints(); i64s != nil {
|
|
t.Errorf("expected nil, got %v", i64s)
|
|
}
|
|
}
|
|
})
|
|
|
|
t.Run("uint64s", func(t *testing.T) {
|
|
matched, unmatched := split("uint64s", values)
|
|
for _, v := range matched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if diff := cmp.Diff(kv.Uints(), []uint64{42}); diff != "" {
|
|
t.Errorf("diff: %s", diff)
|
|
}
|
|
}
|
|
|
|
for _, v := range unmatched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if u64s := kv.Uints(); u64s != nil {
|
|
t.Errorf("expected nil, got %v", u64s)
|
|
}
|
|
}
|
|
})
|
|
|
|
t.Run("float64s", func(t *testing.T) {
|
|
matched, unmatched := split("float64s", values)
|
|
for _, v := range matched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if diff := cmp.Diff(kv.Floats(), []float64{42}); diff != "" {
|
|
t.Errorf("diff: %s", diff)
|
|
}
|
|
}
|
|
|
|
for _, v := range unmatched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if f64s := kv.Floats(); f64s != nil {
|
|
t.Errorf("expected nil, got %v", f64s)
|
|
}
|
|
}
|
|
})
|
|
|
|
t.Run("strings", func(t *testing.T) {
|
|
matched, unmatched := split("strings", values)
|
|
for _, v := range matched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if diff := cmp.Diff(kv.Strings(), v); diff != "" {
|
|
t.Errorf("diff: %s", diff)
|
|
}
|
|
}
|
|
|
|
for _, v := range unmatched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if s := kv.Strings(); s != nil {
|
|
t.Errorf("expected nil, got %v", s)
|
|
}
|
|
}
|
|
})
|
|
|
|
t.Run("bools", func(t *testing.T) {
|
|
matched, unmatched := split("bools", values)
|
|
for _, v := range matched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if diff := cmp.Diff(kv.Bools(), v); diff != "" {
|
|
t.Errorf("diff: %s", diff)
|
|
}
|
|
}
|
|
|
|
for _, v := range unmatched {
|
|
kv := KeyValue{"key", Value{v}}
|
|
if b := kv.Bools(); b != nil {
|
|
t.Errorf("expected nil, got %v", b)
|
|
}
|
|
}
|
|
})
|
|
}
|