Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 1 | // Copyright 2009 The Go Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
Russ Cox | 3b864e4 | 2009-08-12 13:18:37 -0700 | [diff] [blame] | 5 | package strconv_test |
Russ Cox | eb3823a | 2009-02-16 20:44:21 -0800 | [diff] [blame] | 6 | |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 7 | import ( |
Matt Brown | 1300fb5 | 2013-02-28 10:08:05 -0800 | [diff] [blame] | 8 | "errors" |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 9 | "reflect" |
| 10 | . "strconv" |
| 11 | "testing" |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 12 | ) |
| 13 | |
Russ Cox | 8a7cbad | 2009-01-15 17:22:17 -0800 | [diff] [blame] | 14 | type atoui64Test struct { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 15 | in string |
| 16 | out uint64 |
Russ Cox | eb69292 | 2011-11-01 22:05:34 -0400 | [diff] [blame] | 17 | err error |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 18 | } |
| 19 | |
Russ Cox | 9154943 | 2009-10-07 11:55:06 -0700 | [diff] [blame] | 20 | var atoui64tests = []atoui64Test{ |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 21 | {"", 0, ErrSyntax}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 22 | {"0", 0, nil}, |
| 23 | {"1", 1, nil}, |
| 24 | {"12345", 12345, nil}, |
| 25 | {"012345", 12345, nil}, |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 26 | {"12345x", 0, ErrSyntax}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 27 | {"98765432100", 98765432100, nil}, |
| 28 | {"18446744073709551615", 1<<64 - 1, nil}, |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 29 | {"18446744073709551616", 1<<64 - 1, ErrRange}, |
| 30 | {"18446744073709551620", 1<<64 - 1, ErrRange}, |
Russ Cox | fcdba72 | 2009-10-11 23:46:11 -0700 | [diff] [blame] | 31 | } |
| 32 | |
| 33 | var btoui64tests = []atoui64Test{ |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 34 | {"", 0, ErrSyntax}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 35 | {"0", 0, nil}, |
Martin Möhrmann | 878fa88 | 2015-01-08 02:18:16 +0100 | [diff] [blame] | 36 | {"0x", 0, ErrSyntax}, |
| 37 | {"0X", 0, ErrSyntax}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 38 | {"1", 1, nil}, |
| 39 | {"12345", 12345, nil}, |
| 40 | {"012345", 012345, nil}, |
| 41 | {"0x12345", 0x12345, nil}, |
| 42 | {"0X12345", 0x12345, nil}, |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 43 | {"12345x", 0, ErrSyntax}, |
Martin Möhrmann | 878fa88 | 2015-01-08 02:18:16 +0100 | [diff] [blame] | 44 | {"0xabcdefg123", 0, ErrSyntax}, |
| 45 | {"123456789abc", 0, ErrSyntax}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 46 | {"98765432100", 98765432100, nil}, |
| 47 | {"18446744073709551615", 1<<64 - 1, nil}, |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 48 | {"18446744073709551616", 1<<64 - 1, ErrRange}, |
| 49 | {"18446744073709551620", 1<<64 - 1, ErrRange}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 50 | {"0xFFFFFFFFFFFFFFFF", 1<<64 - 1, nil}, |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 51 | {"0x10000000000000000", 1<<64 - 1, ErrRange}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 52 | {"01777777777777777777777", 1<<64 - 1, nil}, |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 53 | {"01777777777777777777778", 0, ErrSyntax}, |
| 54 | {"02000000000000000000000", 1<<64 - 1, ErrRange}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 55 | {"0200000000000000000000", 1 << 61, nil}, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 56 | } |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 57 | |
Russ Cox | 8a7cbad | 2009-01-15 17:22:17 -0800 | [diff] [blame] | 58 | type atoi64Test struct { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 59 | in string |
| 60 | out int64 |
Russ Cox | eb69292 | 2011-11-01 22:05:34 -0400 | [diff] [blame] | 61 | err error |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 62 | } |
| 63 | |
Russ Cox | 9154943 | 2009-10-07 11:55:06 -0700 | [diff] [blame] | 64 | var atoi64tests = []atoi64Test{ |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 65 | {"", 0, ErrSyntax}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 66 | {"0", 0, nil}, |
| 67 | {"-0", 0, nil}, |
| 68 | {"1", 1, nil}, |
| 69 | {"-1", -1, nil}, |
| 70 | {"12345", 12345, nil}, |
| 71 | {"-12345", -12345, nil}, |
| 72 | {"012345", 12345, nil}, |
| 73 | {"-012345", -12345, nil}, |
| 74 | {"98765432100", 98765432100, nil}, |
| 75 | {"-98765432100", -98765432100, nil}, |
| 76 | {"9223372036854775807", 1<<63 - 1, nil}, |
| 77 | {"-9223372036854775807", -(1<<63 - 1), nil}, |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 78 | {"9223372036854775808", 1<<63 - 1, ErrRange}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 79 | {"-9223372036854775808", -1 << 63, nil}, |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 80 | {"9223372036854775809", 1<<63 - 1, ErrRange}, |
| 81 | {"-9223372036854775809", -1 << 63, ErrRange}, |
Russ Cox | fcdba72 | 2009-10-11 23:46:11 -0700 | [diff] [blame] | 82 | } |
| 83 | |
Martin Möhrmann | 878fa88 | 2015-01-08 02:18:16 +0100 | [diff] [blame] | 84 | type btoi64Test struct { |
| 85 | in string |
| 86 | base int |
| 87 | out int64 |
| 88 | err error |
| 89 | } |
| 90 | |
| 91 | var btoi64tests = []btoi64Test{ |
| 92 | {"", 0, 0, ErrSyntax}, |
| 93 | {"0", 0, 0, nil}, |
| 94 | {"-0", 0, 0, nil}, |
| 95 | {"1", 0, 1, nil}, |
| 96 | {"-1", 0, -1, nil}, |
| 97 | {"12345", 0, 12345, nil}, |
| 98 | {"-12345", 0, -12345, nil}, |
| 99 | {"012345", 0, 012345, nil}, |
| 100 | {"-012345", 0, -012345, nil}, |
| 101 | {"0x12345", 0, 0x12345, nil}, |
| 102 | {"-0X12345", 0, -0x12345, nil}, |
| 103 | {"12345x", 0, 0, ErrSyntax}, |
| 104 | {"-12345x", 0, 0, ErrSyntax}, |
| 105 | {"98765432100", 0, 98765432100, nil}, |
| 106 | {"-98765432100", 0, -98765432100, nil}, |
| 107 | {"9223372036854775807", 0, 1<<63 - 1, nil}, |
| 108 | {"-9223372036854775807", 0, -(1<<63 - 1), nil}, |
| 109 | {"9223372036854775808", 0, 1<<63 - 1, ErrRange}, |
| 110 | {"-9223372036854775808", 0, -1 << 63, nil}, |
| 111 | {"9223372036854775809", 0, 1<<63 - 1, ErrRange}, |
| 112 | {"-9223372036854775809", 0, -1 << 63, ErrRange}, |
| 113 | |
| 114 | // other bases |
| 115 | {"g", 17, 16, nil}, |
| 116 | {"10", 25, 25, nil}, |
| 117 | {"holycow", 35, (((((17*35+24)*35+21)*35+34)*35+12)*35+24)*35 + 32, nil}, |
| 118 | {"holycow", 36, (((((17*36+24)*36+21)*36+34)*36+12)*36+24)*36 + 32, nil}, |
| 119 | |
| 120 | // base 2 |
| 121 | {"0", 2, 0, nil}, |
| 122 | {"-1", 2, -1, nil}, |
| 123 | {"1010", 2, 10, nil}, |
| 124 | {"1000000000000000", 2, 1 << 15, nil}, |
| 125 | {"111111111111111111111111111111111111111111111111111111111111111", 2, 1<<63 - 1, nil}, |
| 126 | {"1000000000000000000000000000000000000000000000000000000000000000", 2, 1<<63 - 1, ErrRange}, |
| 127 | {"-1000000000000000000000000000000000000000000000000000000000000000", 2, -1 << 63, nil}, |
| 128 | {"-1000000000000000000000000000000000000000000000000000000000000001", 2, -1 << 63, ErrRange}, |
| 129 | |
| 130 | // base 8 |
| 131 | {"-10", 8, -8, nil}, |
| 132 | {"57635436545", 8, 057635436545, nil}, |
| 133 | {"100000000", 8, 1 << 24, nil}, |
| 134 | |
| 135 | // base 16 |
| 136 | {"10", 16, 16, nil}, |
| 137 | {"-123456789abcdef", 16, -0x123456789abcdef, nil}, |
| 138 | {"7fffffffffffffff", 16, 1<<63 - 1, nil}, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 139 | } |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 140 | |
Russ Cox | 8a7cbad | 2009-01-15 17:22:17 -0800 | [diff] [blame] | 141 | type atoui32Test struct { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 142 | in string |
| 143 | out uint32 |
Russ Cox | eb69292 | 2011-11-01 22:05:34 -0400 | [diff] [blame] | 144 | err error |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 145 | } |
| 146 | |
Russ Cox | 9154943 | 2009-10-07 11:55:06 -0700 | [diff] [blame] | 147 | var atoui32tests = []atoui32Test{ |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 148 | {"", 0, ErrSyntax}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 149 | {"0", 0, nil}, |
| 150 | {"1", 1, nil}, |
| 151 | {"12345", 12345, nil}, |
| 152 | {"012345", 12345, nil}, |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 153 | {"12345x", 0, ErrSyntax}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 154 | {"987654321", 987654321, nil}, |
| 155 | {"4294967295", 1<<32 - 1, nil}, |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 156 | {"4294967296", 1<<32 - 1, ErrRange}, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 157 | } |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 158 | |
Russ Cox | 8a7cbad | 2009-01-15 17:22:17 -0800 | [diff] [blame] | 159 | type atoi32Test struct { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 160 | in string |
| 161 | out int32 |
Russ Cox | eb69292 | 2011-11-01 22:05:34 -0400 | [diff] [blame] | 162 | err error |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 163 | } |
| 164 | |
Russ Cox | 9154943 | 2009-10-07 11:55:06 -0700 | [diff] [blame] | 165 | var atoi32tests = []atoi32Test{ |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 166 | {"", 0, ErrSyntax}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 167 | {"0", 0, nil}, |
| 168 | {"-0", 0, nil}, |
| 169 | {"1", 1, nil}, |
| 170 | {"-1", -1, nil}, |
| 171 | {"12345", 12345, nil}, |
| 172 | {"-12345", -12345, nil}, |
| 173 | {"012345", 12345, nil}, |
| 174 | {"-012345", -12345, nil}, |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 175 | {"12345x", 0, ErrSyntax}, |
| 176 | {"-12345x", 0, ErrSyntax}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 177 | {"987654321", 987654321, nil}, |
| 178 | {"-987654321", -987654321, nil}, |
| 179 | {"2147483647", 1<<31 - 1, nil}, |
| 180 | {"-2147483647", -(1<<31 - 1), nil}, |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 181 | {"2147483648", 1<<31 - 1, ErrRange}, |
Robert Griesemer | 3478891 | 2010-10-22 10:06:33 -0700 | [diff] [blame] | 182 | {"-2147483648", -1 << 31, nil}, |
Russ Cox | c1178aa | 2011-10-27 19:46:31 -0700 | [diff] [blame] | 183 | {"2147483649", 1<<31 - 1, ErrRange}, |
| 184 | {"-2147483649", -1 << 31, ErrRange}, |
Russ Cox | be2edb5 | 2009-03-03 08:39:12 -0800 | [diff] [blame] | 185 | } |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 186 | |
Matt Brown | 1300fb5 | 2013-02-28 10:08:05 -0800 | [diff] [blame] | 187 | type numErrorTest struct { |
| 188 | num, want string |
| 189 | } |
| 190 | |
| 191 | var numErrorTests = []numErrorTest{ |
| 192 | {"0", `strconv.ParseFloat: parsing "0": failed`}, |
| 193 | {"`", "strconv.ParseFloat: parsing \"`\": failed"}, |
| 194 | {"1\x00.2", `strconv.ParseFloat: parsing "1\x00.2": failed`}, |
| 195 | } |
| 196 | |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 197 | func init() { |
| 198 | // The atoi routines return NumErrors wrapping |
| 199 | // the error and the string. Convert the tables above. |
| 200 | for i := range atoui64tests { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 201 | test := &atoui64tests[i] |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 202 | if test.err != nil { |
Rob Pike | 02f6719 | 2011-12-13 10:42:05 -0800 | [diff] [blame] | 203 | test.err = &NumError{"ParseUint", test.in, test.err} |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 204 | } |
| 205 | } |
Russ Cox | fcdba72 | 2009-10-11 23:46:11 -0700 | [diff] [blame] | 206 | for i := range btoui64tests { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 207 | test := &btoui64tests[i] |
Russ Cox | fcdba72 | 2009-10-11 23:46:11 -0700 | [diff] [blame] | 208 | if test.err != nil { |
Rob Pike | 02f6719 | 2011-12-13 10:42:05 -0800 | [diff] [blame] | 209 | test.err = &NumError{"ParseUint", test.in, test.err} |
Russ Cox | fcdba72 | 2009-10-11 23:46:11 -0700 | [diff] [blame] | 210 | } |
| 211 | } |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 212 | for i := range atoi64tests { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 213 | test := &atoi64tests[i] |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 214 | if test.err != nil { |
Rob Pike | 02f6719 | 2011-12-13 10:42:05 -0800 | [diff] [blame] | 215 | test.err = &NumError{"ParseInt", test.in, test.err} |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 216 | } |
| 217 | } |
Russ Cox | fcdba72 | 2009-10-11 23:46:11 -0700 | [diff] [blame] | 218 | for i := range btoi64tests { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 219 | test := &btoi64tests[i] |
Russ Cox | fcdba72 | 2009-10-11 23:46:11 -0700 | [diff] [blame] | 220 | if test.err != nil { |
Rob Pike | 02f6719 | 2011-12-13 10:42:05 -0800 | [diff] [blame] | 221 | test.err = &NumError{"ParseInt", test.in, test.err} |
Russ Cox | fcdba72 | 2009-10-11 23:46:11 -0700 | [diff] [blame] | 222 | } |
| 223 | } |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 224 | for i := range atoui32tests { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 225 | test := &atoui32tests[i] |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 226 | if test.err != nil { |
Rob Pike | 02f6719 | 2011-12-13 10:42:05 -0800 | [diff] [blame] | 227 | test.err = &NumError{"ParseUint", test.in, test.err} |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 228 | } |
| 229 | } |
| 230 | for i := range atoi32tests { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 231 | test := &atoi32tests[i] |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 232 | if test.err != nil { |
Rob Pike | 02f6719 | 2011-12-13 10:42:05 -0800 | [diff] [blame] | 233 | test.err = &NumError{"ParseInt", test.in, test.err} |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 234 | } |
| 235 | } |
| 236 | } |
| 237 | |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 238 | func TestParseUint64(t *testing.T) { |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 239 | for i := range atoui64tests { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 240 | test := &atoui64tests[i] |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 241 | out, err := ParseUint(test.in, 10, 64) |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 242 | if test.out != out || !reflect.DeepEqual(test.err, err) { |
Rob Pike | 1959c3a | 2010-09-23 13:48:56 +1000 | [diff] [blame] | 243 | t.Errorf("Atoui64(%q) = %v, %v want %v, %v", |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 244 | test.in, out, err, test.out, test.err) |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 245 | } |
| 246 | } |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 247 | } |
| 248 | |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 249 | func TestParseUint64Base(t *testing.T) { |
Russ Cox | fcdba72 | 2009-10-11 23:46:11 -0700 | [diff] [blame] | 250 | for i := range btoui64tests { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 251 | test := &btoui64tests[i] |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 252 | out, err := ParseUint(test.in, 0, 64) |
Russ Cox | fcdba72 | 2009-10-11 23:46:11 -0700 | [diff] [blame] | 253 | if test.out != out || !reflect.DeepEqual(test.err, err) { |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 254 | t.Errorf("ParseUint(%q) = %v, %v want %v, %v", |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 255 | test.in, out, err, test.out, test.err) |
Russ Cox | fcdba72 | 2009-10-11 23:46:11 -0700 | [diff] [blame] | 256 | } |
| 257 | } |
| 258 | } |
| 259 | |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 260 | func TestParseInt64(t *testing.T) { |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 261 | for i := range atoi64tests { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 262 | test := &atoi64tests[i] |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 263 | out, err := ParseInt(test.in, 10, 64) |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 264 | if test.out != out || !reflect.DeepEqual(test.err, err) { |
Rob Pike | 1959c3a | 2010-09-23 13:48:56 +1000 | [diff] [blame] | 265 | t.Errorf("Atoi64(%q) = %v, %v want %v, %v", |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 266 | test.in, out, err, test.out, test.err) |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 267 | } |
| 268 | } |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 269 | } |
| 270 | |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 271 | func TestParseInt64Base(t *testing.T) { |
Russ Cox | fcdba72 | 2009-10-11 23:46:11 -0700 | [diff] [blame] | 272 | for i := range btoi64tests { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 273 | test := &btoi64tests[i] |
Martin Möhrmann | 878fa88 | 2015-01-08 02:18:16 +0100 | [diff] [blame] | 274 | out, err := ParseInt(test.in, test.base, 64) |
Russ Cox | fcdba72 | 2009-10-11 23:46:11 -0700 | [diff] [blame] | 275 | if test.out != out || !reflect.DeepEqual(test.err, err) { |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 276 | t.Errorf("ParseInt(%q) = %v, %v want %v, %v", |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 277 | test.in, out, err, test.out, test.err) |
Russ Cox | fcdba72 | 2009-10-11 23:46:11 -0700 | [diff] [blame] | 278 | } |
| 279 | } |
| 280 | } |
| 281 | |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 282 | func TestParseUint(t *testing.T) { |
Russ Cox | 3b864e4 | 2009-08-12 13:18:37 -0700 | [diff] [blame] | 283 | switch IntSize { |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 284 | case 32: |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 285 | for i := range atoui32tests { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 286 | test := &atoui32tests[i] |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 287 | out, err := ParseUint(test.in, 10, 0) |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 288 | if test.out != uint32(out) || !reflect.DeepEqual(test.err, err) { |
Rob Pike | 1959c3a | 2010-09-23 13:48:56 +1000 | [diff] [blame] | 289 | t.Errorf("Atoui(%q) = %v, %v want %v, %v", |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 290 | test.in, out, err, test.out, test.err) |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 291 | } |
| 292 | } |
| 293 | case 64: |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 294 | for i := range atoui64tests { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 295 | test := &atoui64tests[i] |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 296 | out, err := ParseUint(test.in, 10, 0) |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 297 | if test.out != uint64(out) || !reflect.DeepEqual(test.err, err) { |
Rob Pike | 1959c3a | 2010-09-23 13:48:56 +1000 | [diff] [blame] | 298 | t.Errorf("Atoui(%q) = %v, %v want %v, %v", |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 299 | test.in, out, err, test.out, test.err) |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 300 | } |
| 301 | } |
| 302 | } |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 303 | } |
| 304 | |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 305 | func TestParseInt(t *testing.T) { |
Russ Cox | 3b864e4 | 2009-08-12 13:18:37 -0700 | [diff] [blame] | 306 | switch IntSize { |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 307 | case 32: |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 308 | for i := range atoi32tests { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 309 | test := &atoi32tests[i] |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 310 | out, err := ParseInt(test.in, 10, 0) |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 311 | if test.out != int32(out) || !reflect.DeepEqual(test.err, err) { |
Rob Pike | 1959c3a | 2010-09-23 13:48:56 +1000 | [diff] [blame] | 312 | t.Errorf("Atoi(%q) = %v, %v want %v, %v", |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 313 | test.in, out, err, test.out, test.err) |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 314 | } |
| 315 | } |
| 316 | case 64: |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 317 | for i := range atoi64tests { |
Robert Griesemer | d65a5cc | 2009-12-15 15:40:16 -0800 | [diff] [blame] | 318 | test := &atoi64tests[i] |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 319 | out, err := ParseInt(test.in, 10, 0) |
Russ Cox | a0bcaf4 | 2009-06-25 20:24:55 -0700 | [diff] [blame] | 320 | if test.out != int64(out) || !reflect.DeepEqual(test.err, err) { |
Rob Pike | 1959c3a | 2010-09-23 13:48:56 +1000 | [diff] [blame] | 321 | t.Errorf("Atoi(%q) = %v, %v want %v, %v", |
Robert Griesemer | 40621d5 | 2009-11-09 12:07:39 -0800 | [diff] [blame] | 322 | test.in, out, err, test.out, test.err) |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 323 | } |
| 324 | } |
| 325 | } |
Russ Cox | 92a4fe1 | 2008-11-18 17:12:14 -0800 | [diff] [blame] | 326 | } |
Trevor Strohman | f586870 | 2009-11-24 00:21:50 -0800 | [diff] [blame] | 327 | |
Matt Brown | 1300fb5 | 2013-02-28 10:08:05 -0800 | [diff] [blame] | 328 | func TestNumError(t *testing.T) { |
| 329 | for _, test := range numErrorTests { |
| 330 | err := &NumError{ |
| 331 | Func: "ParseFloat", |
| 332 | Num: test.num, |
| 333 | Err: errors.New("failed"), |
| 334 | } |
| 335 | if got := err.Error(); got != test.want { |
| 336 | t.Errorf(`(&NumError{"ParseFloat", %q, "failed"}).Error() = %v, want %v`, test.num, got, test.want) |
| 337 | } |
| 338 | } |
| 339 | } |
| 340 | |
Trevor Strohman | f586870 | 2009-11-24 00:21:50 -0800 | [diff] [blame] | 341 | func BenchmarkAtoi(b *testing.B) { |
| 342 | for i := 0; i < b.N; i++ { |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 343 | ParseInt("12345678", 10, 0) |
Trevor Strohman | f586870 | 2009-11-24 00:21:50 -0800 | [diff] [blame] | 344 | } |
| 345 | } |
| 346 | |
| 347 | func BenchmarkAtoiNeg(b *testing.B) { |
| 348 | for i := 0; i < b.N; i++ { |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 349 | ParseInt("-12345678", 10, 0) |
Trevor Strohman | f586870 | 2009-11-24 00:21:50 -0800 | [diff] [blame] | 350 | } |
| 351 | } |
| 352 | |
| 353 | func BenchmarkAtoi64(b *testing.B) { |
| 354 | for i := 0; i < b.N; i++ { |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 355 | ParseInt("12345678901234", 10, 64) |
Trevor Strohman | f586870 | 2009-11-24 00:21:50 -0800 | [diff] [blame] | 356 | } |
| 357 | } |
| 358 | |
| 359 | func BenchmarkAtoi64Neg(b *testing.B) { |
| 360 | for i := 0; i < b.N; i++ { |
Russ Cox | efbeaed | 2011-12-05 15:48:21 -0500 | [diff] [blame] | 361 | ParseInt("-12345678901234", 10, 64) |
Trevor Strohman | f586870 | 2009-11-24 00:21:50 -0800 | [diff] [blame] | 362 | } |
| 363 | } |