github.com/best4tires/kit@v1.0.5/convert/convert_test.go (about) 1 package convert 2 3 import "testing" 4 5 func TestToBool(t *testing.T) { 6 tests := []struct { 7 name string 8 v interface{} 9 want bool 10 }{ 11 {name: "bool true", v: true, want: true}, 12 {name: "bool false", v: false, want: false}, 13 {name: "string true", v: "true", want: true}, 14 {name: "string false", v: "false", want: false}, 15 {name: "string yes", v: "yes", want: true}, 16 {name: "string no", v: "no", want: false}, 17 {name: "string on", v: "on", want: true}, 18 {name: "string off", v: "off", want: false}, 19 {name: "int 1", v: 1, want: true}, 20 {name: "int 0", v: 0, want: false}, 21 {name: "float 1", v: 1.0, want: true}, 22 {name: "float 0", v: 0.0, want: false}, 23 {name: "nil", v: nil, want: false}, 24 } 25 for _, tt := range tests { 26 t.Run(tt.name, func(t *testing.T) { 27 if got := ToBool(tt.v); got != tt.want { 28 t.Errorf("ToBool() = %v, want %v", got, tt.want) 29 } 30 }) 31 } 32 } 33 34 func TestToInt(t *testing.T) { 35 tests := []struct { 36 name string 37 v interface{} 38 want int 39 }{ 40 {name: "int", v: 1, want: 1}, 41 {name: "float64", v: 1.5, want: 1}, 42 {name: "float32", v: float32(1.5), want: 1}, 43 {name: "string", v: "1", want: 1}, 44 {name: "bool true", v: true, want: 1}, 45 {name: "bool false", v: false, want: 0}, 46 {name: "nil", v: nil, want: 0}, 47 } 48 for _, tt := range tests { 49 t.Run(tt.name, func(t *testing.T) { 50 if got, _ := ToInt(tt.v); got != tt.want { 51 t.Errorf("ToInt() = %v, want %v", got, tt.want) 52 } 53 }) 54 } 55 } 56 57 func TestToFloat(t *testing.T) { 58 tests := []struct { 59 name string 60 input interface{} 61 expected float64 62 success bool 63 }{ 64 { 65 name: "int conversion", 66 input: 10, 67 expected: 10.0, 68 success: true, 69 }, 70 { 71 name: "float conversion", 72 input: 3.14, 73 expected: 3.14, 74 success: true, 75 }, 76 { 77 name: "string conversion", 78 input: "2.718", 79 expected: 2.718, 80 success: true, 81 }, 82 { 83 name: "invalid string conversion", 84 input: "not a number", 85 expected: 0, 86 success: false, 87 }, 88 { 89 name: "unsupported type conversion", 90 input: []int{1, 2, 3}, 91 expected: 0, 92 success: false, 93 }, 94 } 95 96 for _, test := range tests { 97 t.Run(test.name, func(t *testing.T) { 98 result, success := ToFloat(test.input) 99 if success != test.success { 100 t.Errorf("expected success value of %v, but got %v", test.success, success) 101 } 102 if success && result != test.expected { 103 t.Errorf("expected %v, but got %v", test.expected, result) 104 } 105 }) 106 } 107 } 108 109 func TestToString(t *testing.T) { 110 tests := []struct { 111 name string 112 input interface{} 113 expected string 114 }{ 115 { 116 name: "int conversion", 117 input: 10, 118 expected: "10", 119 }, 120 { 121 name: "float conversion", 122 input: 3.14, 123 expected: "3.14", 124 }, 125 { 126 name: "bool conversion", 127 input: true, 128 expected: "true", 129 }, 130 { 131 name: "slice conversion", 132 input: []int{1, 2, 3}, 133 expected: "[1 2 3]", 134 }, 135 { 136 name: "struct conversion", 137 input: struct { 138 A int 139 B string 140 }{ 141 A: 10, 142 B: "hello", 143 }, 144 expected: "{10 hello}", 145 }, 146 } 147 148 for _, test := range tests { 149 t.Run(test.name, func(t *testing.T) { 150 result := ToString(test.input) 151 if result != test.expected { 152 t.Errorf("expected %q, but got %q", test.expected, result) 153 } 154 }) 155 } 156 }