mirror of
https://github.com/aykhans/dodo.git
synced 2025-09-01 00:53:34 +00:00
156 lines
3.2 KiB
Go
156 lines
3.2 KiB
Go
package utils
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestToPtr(t *testing.T) {
|
|
t.Run("ToPtr with int", func(t *testing.T) {
|
|
value := 42
|
|
ptr := ToPtr(value)
|
|
|
|
require.NotNil(t, ptr)
|
|
assert.Equal(t, value, *ptr)
|
|
assert.NotSame(t, &value, ptr, "Should return a new pointer")
|
|
})
|
|
|
|
t.Run("ToPtr with string", func(t *testing.T) {
|
|
value := "test string"
|
|
ptr := ToPtr(value)
|
|
|
|
require.NotNil(t, ptr)
|
|
assert.Equal(t, value, *ptr)
|
|
})
|
|
|
|
t.Run("ToPtr with bool", func(t *testing.T) {
|
|
value := true
|
|
ptr := ToPtr(value)
|
|
|
|
require.NotNil(t, ptr)
|
|
assert.Equal(t, value, *ptr)
|
|
})
|
|
|
|
t.Run("ToPtr with float64", func(t *testing.T) {
|
|
value := 3.14159
|
|
ptr := ToPtr(value)
|
|
|
|
require.NotNil(t, ptr)
|
|
assert.InEpsilon(t, value, *ptr, 0.0001)
|
|
})
|
|
|
|
t.Run("ToPtr with struct", func(t *testing.T) {
|
|
type TestStruct struct {
|
|
Field1 string
|
|
Field2 int
|
|
}
|
|
|
|
value := TestStruct{Field1: "test", Field2: 123}
|
|
ptr := ToPtr(value)
|
|
|
|
require.NotNil(t, ptr)
|
|
assert.Equal(t, value, *ptr)
|
|
assert.Equal(t, "test", ptr.Field1)
|
|
assert.Equal(t, 123, ptr.Field2)
|
|
})
|
|
|
|
t.Run("ToPtr with slice", func(t *testing.T) {
|
|
value := []int{1, 2, 3}
|
|
ptr := ToPtr(value)
|
|
|
|
require.NotNil(t, ptr)
|
|
assert.Equal(t, value, *ptr)
|
|
assert.Len(t, *ptr, 3)
|
|
})
|
|
|
|
t.Run("ToPtr with map", func(t *testing.T) {
|
|
value := map[string]int{"one": 1, "two": 2}
|
|
ptr := ToPtr(value)
|
|
|
|
require.NotNil(t, ptr)
|
|
assert.Equal(t, value, *ptr)
|
|
assert.Len(t, *ptr, 2)
|
|
})
|
|
|
|
t.Run("ToPtr with nil interface", func(t *testing.T) {
|
|
var value any = nil
|
|
ptr := ToPtr(value)
|
|
|
|
require.NotNil(t, ptr)
|
|
assert.Nil(t, *ptr)
|
|
})
|
|
|
|
t.Run("ToPtr with pointer", func(t *testing.T) {
|
|
originalValue := 42
|
|
originalPtr := &originalValue
|
|
ptr := ToPtr(originalPtr)
|
|
|
|
require.NotNil(t, ptr)
|
|
assert.Equal(t, originalPtr, *ptr)
|
|
assert.NotSame(t, originalPtr, ptr, "Should return a pointer to pointer")
|
|
})
|
|
|
|
t.Run("ToPtr with uint", func(t *testing.T) {
|
|
value := uint(100)
|
|
ptr := ToPtr(value)
|
|
|
|
require.NotNil(t, ptr)
|
|
assert.Equal(t, value, *ptr)
|
|
})
|
|
|
|
t.Run("ToPtr modification safety", func(t *testing.T) {
|
|
value := 10
|
|
ptr := ToPtr(value)
|
|
|
|
*ptr = 20
|
|
assert.Equal(t, 10, value, "Original value should not be modified")
|
|
assert.Equal(t, 20, *ptr, "Pointer value should be modified")
|
|
})
|
|
|
|
t.Run("ToPtr with byte array", func(t *testing.T) {
|
|
value := [3]byte{1, 2, 3}
|
|
ptr := ToPtr(value)
|
|
|
|
require.NotNil(t, ptr)
|
|
assert.Equal(t, value, *ptr)
|
|
})
|
|
|
|
t.Run("ToPtr with rune", func(t *testing.T) {
|
|
value := 'A'
|
|
ptr := ToPtr(value)
|
|
|
|
require.NotNil(t, ptr)
|
|
assert.Equal(t, value, *ptr)
|
|
assert.Equal(t, int32(65), *ptr)
|
|
})
|
|
|
|
t.Run("ToPtr with empty string", func(t *testing.T) {
|
|
value := ""
|
|
ptr := ToPtr(value)
|
|
|
|
require.NotNil(t, ptr)
|
|
assert.Equal(t, value, *ptr)
|
|
assert.Empty(t, *ptr)
|
|
})
|
|
|
|
t.Run("ToPtr with zero values", func(t *testing.T) {
|
|
// Test with various zero values
|
|
intZero := 0
|
|
intPtr := ToPtr(intZero)
|
|
require.NotNil(t, intPtr)
|
|
assert.Equal(t, 0, *intPtr)
|
|
|
|
boolZero := false
|
|
boolPtr := ToPtr(boolZero)
|
|
require.NotNil(t, boolPtr)
|
|
assert.False(t, *boolPtr)
|
|
|
|
floatZero := 0.0
|
|
floatPtr := ToPtr(floatZero)
|
|
require.NotNil(t, floatPtr)
|
|
assert.Equal(t, 0.0, *floatPtr) //nolint:testifylint
|
|
})
|
|
}
|