initail commits
parent
7befe15b0e
commit
69d362c4b8
|
@ -0,0 +1,29 @@
|
||||||
|
package jsonint
|
||||||
|
|
||||||
|
func isNumeric(data []byte) bool {
|
||||||
|
if len(data) <= 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
datum := data[0]
|
||||||
|
|
||||||
|
if '-' == datum || '+' == datum {
|
||||||
|
data = data[1:]
|
||||||
|
|
||||||
|
if len(data) <= 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is safe to do even though it is UTF-8 encoded Unicode.
|
||||||
|
for _, datum := range data {
|
||||||
|
|
||||||
|
if datum < '0' || '9' < datum {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
|
@ -0,0 +1,288 @@
|
||||||
|
package jsonint
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestIsNumeric(t *testing.T) {
|
||||||
|
|
||||||
|
tests := []struct{
|
||||||
|
Value []byte
|
||||||
|
Expected bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
Value: nil,
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Value: []byte(""),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Value: []byte(" "),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte(" "),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte(" "),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte(" "),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte(" "),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Value: []byte("apple"),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("banana"),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("cherry"),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Value: []byte("ONCE"),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("TWICE"),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("THRICE"),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("FOURCE"),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Value: []byte("one"),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("two"),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("three"),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("four"),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("five"),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Value: []byte(`"-255"`),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
Value: []byte(`"-5"`),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte(`"-4"`),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte(`"-3"`),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte(`"-2"`),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte(`"-1"`),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte(`"0"`),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte(`"1"`),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte(`"2"`),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte(`"3"`),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte(`"4"`),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte(`"5"`),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
Value: []byte(`"255"`),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Value: []byte("-255"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
Value: []byte("-5"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("-4"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("-3"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("-2"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("-1"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("0"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("1"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("2"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("3"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("4"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("5"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
Value: []byte("255"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Value: []byte("-0"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("+0"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Value: []byte("+0"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("+1"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("+2"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("+3"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("+4"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("+5"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("+255"),
|
||||||
|
Expected: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Value: []byte("-"),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Value: []byte("+"),
|
||||||
|
Expected: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for testNumber, test := range tests {
|
||||||
|
|
||||||
|
actual := isNumeric(test.Value)
|
||||||
|
expected := test.Expected
|
||||||
|
|
||||||
|
if expected != actual {
|
||||||
|
t.Errorf("For test #%d, the actual value return from isNumeric() is not what was expected.", testNumber)
|
||||||
|
t.Logf("EXPECTED: %t", expected)
|
||||||
|
t.Logf("ACTUAL: %t", actual)
|
||||||
|
t.Logf("VALUE: %#v", test.Value)
|
||||||
|
t.Logf("VALUE: %q", test.Value)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue