Skip to content

Commit ba0a5b6

Browse files
Merge pull request #153 from yveshield/more-int-to-bool
Add more integer to boolean conversions
2 parents 7ef7a18 + 557a6a2 commit ba0a5b6

File tree

2 files changed

+53
-4
lines changed

2 files changed

+53
-4
lines changed

cast_test.go

+28
Original file line numberDiff line numberDiff line change
@@ -796,6 +796,18 @@ func TestToBoolE(t *testing.T) {
796796
iserr bool
797797
}{
798798
{0, false, false},
799+
{int64(0), false, false},
800+
{int32(0), false, false},
801+
{int16(0), false, false},
802+
{int8(0), false, false},
803+
{uint(0), false, false},
804+
{uint64(0), false, false},
805+
{uint32(0), false, false},
806+
{uint16(0), false, false},
807+
{uint8(0), false, false},
808+
{float64(0), false, false},
809+
{float32(0), false, false},
810+
{time.Duration(0), false, false},
799811
{jf, false, false},
800812
{nil, false, false},
801813
{"false", false, false},
@@ -811,10 +823,26 @@ func TestToBoolE(t *testing.T) {
811823
{"t", true, false},
812824
{"T", true, false},
813825
{1, true, false},
826+
{int64(1), true, false},
827+
{int32(1), true, false},
828+
{int16(1), true, false},
829+
{int8(1), true, false},
830+
{uint(1), true, false},
831+
{uint64(1), true, false},
832+
{uint32(1), true, false},
833+
{uint16(1), true, false},
834+
{uint8(1), true, false},
835+
{float64(1), true, false},
836+
{float32(1), true, false},
837+
{time.Duration(1), true, false},
814838
{jt, true, false},
815839
{je, true, false},
816840
{true, true, false},
817841
{-1, true, false},
842+
{int64(-1), true, false},
843+
{int32(-1), true, false},
844+
{int16(-1), true, false},
845+
{int8(-1), true, false},
818846

819847
// errors
820848
{"test", false, true},

caste.go

+25-4
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,31 @@ func ToBoolE(i interface{}) (bool, error) {
9898
case nil:
9999
return false, nil
100100
case int:
101-
if i.(int) != 0 {
102-
return true, nil
103-
}
104-
return false, nil
101+
return b != 0, nil
102+
case int64:
103+
return b != 0, nil
104+
case int32:
105+
return b != 0, nil
106+
case int16:
107+
return b != 0, nil
108+
case int8:
109+
return b != 0, nil
110+
case uint:
111+
return b != 0, nil
112+
case uint64:
113+
return b != 0, nil
114+
case uint32:
115+
return b != 0, nil
116+
case uint16:
117+
return b != 0, nil
118+
case uint8:
119+
return b != 0, nil
120+
case float64:
121+
return b != 0, nil
122+
case float32:
123+
return b != 0, nil
124+
case time.Duration:
125+
return b != 0, nil
105126
case string:
106127
return strconv.ParseBool(i.(string))
107128
case json.Number:

0 commit comments

Comments
 (0)