Commit c7a9d981 authored by Russ Cox's avatar Russ Cox

fix atoi test

R=r
DELTA=28  (5 added, 0 deleted, 23 changed)
OCL=31093
CL=31093
parent 7ae0c678
...@@ -113,16 +113,19 @@ func Atoui64(s string) (n uint64, err os.Error) { ...@@ -113,16 +113,19 @@ func Atoui64(s string) (n uint64, err os.Error) {
} }
// Look for octal, hex prefix. // Look for octal, hex prefix.
if s[0] == '0' && len(s) > 1 { switch {
if s[1] == 'x' || s[1] == 'X' { case s[0] == '0' && len(s) > 1 && (s[1] == 'x' || s[1] == 'X'):
// hex n, err = Btoui64(s[2:len(s)], 16);
return Btoui64(s[2:len(s)], 16); case s[0] == '0':
} n, err = Btoui64(s, 8);
// octal default:
return Btoui64(s[1:len(s)], 8); n, err = Btoui64(s, 10);
}
if err != nil {
err.(*NumError).Num = s;
} }
// decimal return;
return Btoui64(s, 10);
} }
...@@ -135,6 +138,7 @@ func Atoi64(s string) (i int64, err os.Error) { ...@@ -135,6 +138,7 @@ func Atoi64(s string) (i int64, err os.Error) {
} }
// Pick off leading sign. // Pick off leading sign.
s0 := s;
neg := false; neg := false;
if s[0] == '+' { if s[0] == '+' {
s = s[1:len(s)] s = s[1:len(s)]
...@@ -147,13 +151,14 @@ func Atoi64(s string) (i int64, err os.Error) { ...@@ -147,13 +151,14 @@ func Atoi64(s string) (i int64, err os.Error) {
var un uint64; var un uint64;
un, err = Atoui64(s); un, err = Atoui64(s);
if err != nil && err.(*NumError).Error != os.ERANGE { if err != nil && err.(*NumError).Error != os.ERANGE {
err.(*NumError).Num = s0;
return 0, err return 0, err
} }
if !neg && un >= 1<<63 { if !neg && un >= 1<<63 {
return 1<<63-1, &NumError{s, os.ERANGE} return 1<<63-1, &NumError{s0, os.ERANGE}
} }
if neg && un > 1<<63 { if neg && un > 1<<63 {
return -1<<63, &NumError{s, os.ERANGE} return -1<<63, &NumError{s0, os.ERANGE}
} }
n := int64(un); n := int64(un);
if neg { if neg {
......
...@@ -153,7 +153,7 @@ func TestAtoui64(t *testing.T) { ...@@ -153,7 +153,7 @@ func TestAtoui64(t *testing.T) {
test := &atoui64tests[i]; test := &atoui64tests[i];
out, err := strconv.Atoui64(test.in); out, err := strconv.Atoui64(test.in);
if test.out != out || !reflect.DeepEqual(test.err, err) { if test.out != out || !reflect.DeepEqual(test.err, err) {
t.Errorf("strconv.Atoui64(%v) = %v, %v want %v, %v\n", t.Errorf("strconv.Atoui64(%q) = %v, %v want %v, %v\n",
test.in, out, err, test.out, test.err); test.in, out, err, test.out, test.err);
} }
} }
...@@ -164,7 +164,7 @@ func TestAtoi64(t *testing.T) { ...@@ -164,7 +164,7 @@ func TestAtoi64(t *testing.T) {
test := &atoi64tests[i]; test := &atoi64tests[i];
out, err := strconv.Atoi64(test.in); out, err := strconv.Atoi64(test.in);
if test.out != out || !reflect.DeepEqual(test.err, err) { if test.out != out || !reflect.DeepEqual(test.err, err) {
t.Errorf("strconv.Atoi64(%v) = %v, %v want %v, %v\n", t.Errorf("strconv.Atoi64(%q) = %v, %v want %v, %v\n",
test.in, out, err, test.out, test.err); test.in, out, err, test.out, test.err);
} }
} }
...@@ -177,7 +177,7 @@ func TestAtoui(t *testing.T) { ...@@ -177,7 +177,7 @@ func TestAtoui(t *testing.T) {
test := &atoui32tests[i]; test := &atoui32tests[i];
out, err := strconv.Atoui(test.in); out, err := strconv.Atoui(test.in);
if test.out != uint32(out) || !reflect.DeepEqual(test.err, err) { if test.out != uint32(out) || !reflect.DeepEqual(test.err, err) {
t.Errorf("strconv.Atoui(%v) = %v, %v want %v, %v\n", t.Errorf("strconv.Atoui(%q) = %v, %v want %v, %v\n",
test.in, out, err, test.out, test.err); test.in, out, err, test.out, test.err);
} }
} }
...@@ -186,7 +186,7 @@ func TestAtoui(t *testing.T) { ...@@ -186,7 +186,7 @@ func TestAtoui(t *testing.T) {
test := &atoui64tests[i]; test := &atoui64tests[i];
out, err := strconv.Atoui(test.in); out, err := strconv.Atoui(test.in);
if test.out != uint64(out) || !reflect.DeepEqual(test.err, err) { if test.out != uint64(out) || !reflect.DeepEqual(test.err, err) {
t.Errorf("strconv.Atoui(%v) = %v, %v want %v, %v\n", t.Errorf("strconv.Atoui(%q) = %v, %v want %v, %v\n",
test.in, out, err, test.out, test.err); test.in, out, err, test.out, test.err);
} }
} }
...@@ -200,7 +200,7 @@ func TestAtoi(t *testing.T) { ...@@ -200,7 +200,7 @@ func TestAtoi(t *testing.T) {
test := &atoi32tests[i]; test := &atoi32tests[i];
out, err := strconv.Atoi(test.in); out, err := strconv.Atoi(test.in);
if test.out != int32(out) || !reflect.DeepEqual(test.err, err) { if test.out != int32(out) || !reflect.DeepEqual(test.err, err) {
t.Errorf("strconv.Atoi(%v) = %v, %v want %v, %v\n", t.Errorf("strconv.Atoi(%q) = %v, %v want %v, %v\n",
test.in, out, err, test.out, test.err); test.in, out, err, test.out, test.err);
} }
} }
...@@ -209,7 +209,7 @@ func TestAtoi(t *testing.T) { ...@@ -209,7 +209,7 @@ func TestAtoi(t *testing.T) {
test := &atoi64tests[i]; test := &atoi64tests[i];
out, err := strconv.Atoi(test.in); out, err := strconv.Atoi(test.in);
if test.out != int64(out) || !reflect.DeepEqual(test.err, err) { if test.out != int64(out) || !reflect.DeepEqual(test.err, err) {
t.Errorf("strconv.Atoi(%v) = %v, %v want %v, %v\n", t.Errorf("strconv.Atoi(%q) = %v, %v want %v, %v\n",
test.in, out, err, test.out, test.err); test.in, out, err, test.out, test.err);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment