xorm/internal/utils/zero_test.go

76 lines
1.4 KiB
Go
Raw Normal View History

// Copyright 2020 The Xorm Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package utils
import (
"fmt"
"reflect"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
type (
MyInt int
ZeroStruct struct{}
)
func TestZero(t *testing.T) {
zeroValues := []any{
int8(0),
int16(0),
int(0),
int32(0),
int64(0),
uint8(0),
uint16(0),
uint(0),
uint32(0),
uint64(0),
MyInt(0),
reflect.ValueOf(0),
nil,
time.Time{},
&time.Time{},
nilTime,
ZeroStruct{},
&ZeroStruct{},
}
for _, v := range zeroValues {
t.Run(fmt.Sprintf("%#v", v), func(t *testing.T) {
assert.True(t, IsZero(v))
})
}
}
func TestIsValueZero(t *testing.T) {
zeroReflectValues := []reflect.Value{
reflect.ValueOf(int8(0)),
reflect.ValueOf(int16(0)),
reflect.ValueOf(int(0)),
reflect.ValueOf(int32(0)),
reflect.ValueOf(int64(0)),
reflect.ValueOf(uint8(0)),
reflect.ValueOf(uint16(0)),
reflect.ValueOf(uint(0)),
reflect.ValueOf(uint32(0)),
reflect.ValueOf(uint64(0)),
reflect.ValueOf(MyInt(0)),
reflect.ValueOf(time.Time{}),
reflect.ValueOf(&time.Time{}),
reflect.ValueOf(nilTime),
reflect.ValueOf(ZeroStruct{}),
reflect.ValueOf(&ZeroStruct{}),
}
for _, v := range zeroReflectValues {
t.Run(fmt.Sprintf("%#v", v), func(t *testing.T) {
assert.True(t, IsValueZero(v))
})
}
}