gitee.com/quant1x/gox@v1.7.6/fastjson/fastfloat_test.go (about) 1 package fastjson 2 3 import ( 4 "math" 5 "testing" 6 ) 7 8 func TestParseUint64BestEffort(t *testing.T) { 9 f := func(s string, expectedNum uint64) { 10 t.Helper() 11 12 num := ParseUint64BestEffort(s) 13 if num != expectedNum { 14 t.Fatalf("unexpected umber parsed from %q; got %v; want %v", s, num, expectedNum) 15 } 16 } 17 18 // Invalid first char 19 f("", 0) 20 f(" ", 0) 21 f("foo", 0) 22 f("-", 0) 23 f("-foo", 0) 24 f("-123", 0) 25 26 // Invalid suffix 27 f("1foo", 0) 28 f("13223 ", 0) 29 f("1-2", 0) 30 31 // Int 32 f("1", 1) 33 f("123", 123) 34 f("1234567890", 1234567890) 35 f("9223372036854775807", 9223372036854775807) 36 f("18446744073709551615", 18446744073709551615) 37 38 // Too big int 39 f("18446744073709551616", 0) 40 } 41 42 func TestParseInt64BestEffort(t *testing.T) { 43 f := func(s string, expectedNum int64) { 44 t.Helper() 45 46 num := ParseInt64BestEffort(s) 47 if num != expectedNum { 48 t.Fatalf("unexpected umber parsed from %q; got %v; want %v", s, num, expectedNum) 49 } 50 } 51 52 // Invalid first char 53 f("", 0) 54 f(" ", 0) 55 f("foo", 0) 56 f("-", 0) 57 f("-foo", 0) 58 59 // Invalid suffix 60 f("1foo", 0) 61 f("13223 ", 0) 62 f("1-2", 0) 63 64 // Int 65 f("0", 0) 66 f("-0", 0) 67 f("1", 1) 68 f("123", 123) 69 f("-123", -123) 70 f("1234567890", 1234567890) 71 f("9223372036854775807", 9223372036854775807) 72 f("-9223372036854775807", -9223372036854775807) 73 74 // Too big int 75 f("9223372036854775808", 0) 76 f("18446744073709551615", 0) 77 } 78 79 func TestParseBestEffort(t *testing.T) { 80 f := func(s string, expectedNum float64) { 81 t.Helper() 82 83 num := ParseBestEffort(s) 84 if num != expectedNum { 85 t.Fatalf("unexpected number parsed from %q; got %v; want %v", s, num, expectedNum) 86 } 87 } 88 89 // Invalid first char 90 f("", 0) 91 f(" ", 0) 92 f("foo", 0) 93 f(" bar ", 0) 94 f("-", 0) 95 f("--", 0) 96 f("-.", 0) 97 f("-.e", 0) 98 f("+112", 0) 99 f("++", 0) 100 f("e123", 0) 101 f("E123", 0) 102 f("-e12", 0) 103 f(".", 0) 104 f("..34", 0) 105 f("-.32", 0) 106 f("-.e3", 0) 107 f(".e+3", 0) 108 109 // Invalid suffix 110 f("1foo", 0) 111 f("1 foo", 0) 112 f("12.34.56", 0) 113 f("13e34.56", 0) 114 f("12.34e56e4", 0) 115 f("12.", 0) 116 f("123..45", 0) 117 f("123ee34", 0) 118 f("123e", 0) 119 f("123e+", 0) 120 f("123E-", 0) 121 f("123E+.", 0) 122 f("-123e-23foo", 0) 123 124 // Integer 125 f("0", 0) 126 f("-0", 0) 127 f("0123", 123) 128 f("-00123", -123) 129 f("1", 1) 130 f("-1", -1) 131 f("1234567890123456", 1234567890123456) 132 f("12345678901234567", 12345678901234567) 133 f("123456789012345678", 123456789012345678) 134 f("1234567890123456789", 1234567890123456789) 135 f("12345678901234567890", 12345678901234567890) 136 f("-12345678901234567890", -12345678901234567890) 137 f("9223372036854775807", 9223372036854775807) 138 f("18446744073709551615", 18446744073709551615) 139 f("-18446744073709551615", -18446744073709551615) 140 141 // Fractional part 142 f("0.0", 0) 143 f("0.000", 0) 144 f("0.1", 0.1) 145 f("0.3", 0.3) 146 f("-0.1", -0.1) 147 f("-0.123", -0.123) 148 f("12345.1234567890123456", 12345.1234567890123456) 149 f("12345.12345678901234567", 12345.12345678901234567) 150 f("12345.123456789012345678", 12345.123456789012345678) 151 f("12345.1234567890123456789", 12345.1234567890123456789) 152 f("12345.12345678901234567890", 12345.12345678901234567890) 153 f("-12345.12345678901234567890", -12345.12345678901234567890) 154 f("18446744073709551615.18446744073709551615", 18446744073709551615.18446744073709551615) 155 f("-18446744073709551615.18446744073709551615", -18446744073709551615.18446744073709551615) 156 157 // Exponent part 158 f("0e0", 0) 159 f("123e+001", 123e1) 160 f("0e12", 0) 161 f("-0E123", 0) 162 f("-0E-123", 0) 163 f("-0E+123", 0) 164 f("123e12", 123e12) 165 f("-123E-12", -123E-12) 166 f("-123e-400", 0) 167 f("123e456", math.Inf(1)) // too big exponent 168 f("-123e456", math.Inf(-1)) // too big exponent 169 170 // Fractional + exponent part 171 f("0.123e4", 0.123e4) 172 f("-123.456E-10", -123.456E-10) 173 }