// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package strconv_test

import (
	"os";
	"reflect";
	. "strconv";
	"testing";
)

type atoui64Test struct {
	in	string;
	out	uint64;
	err	os.Error;
}

var atoui64tests = []atoui64Test{
	atoui64Test{"", 0, os.EINVAL},
	atoui64Test{"0", 0, nil},
	atoui64Test{"1", 1, nil},
	atoui64Test{"12345", 12345, nil},
	atoui64Test{"012345", 12345, nil},
	atoui64Test{"12345x", 0, os.EINVAL},
	atoui64Test{"98765432100", 98765432100, nil},
	atoui64Test{"18446744073709551615", 1<<64 - 1, nil},
	atoui64Test{"18446744073709551616", 1<<64 - 1, os.ERANGE},
	atoui64Test{"18446744073709551620", 1<<64 - 1, os.ERANGE},
}

var btoui64tests = []atoui64Test{
	atoui64Test{"", 0, os.EINVAL},
	atoui64Test{"0", 0, nil},
	atoui64Test{"1", 1, nil},
	atoui64Test{"12345", 12345, nil},
	atoui64Test{"012345", 012345, nil},
	atoui64Test{"0x12345", 0x12345, nil},
	atoui64Test{"0X12345", 0x12345, nil},
	atoui64Test{"12345x", 0, os.EINVAL},
	atoui64Test{"98765432100", 98765432100, nil},
	atoui64Test{"18446744073709551615", 1<<64 - 1, nil},
	atoui64Test{"18446744073709551616", 1<<64 - 1, os.ERANGE},
	atoui64Test{"18446744073709551620", 1<<64 - 1, os.ERANGE},
	atoui64Test{"0xFFFFFFFFFFFFFFFF", 1<<64 - 1, nil},
	atoui64Test{"0x10000000000000000", 1<<64 - 1, os.ERANGE},
	atoui64Test{"01777777777777777777777", 1<<64 - 1, nil},
	atoui64Test{"01777777777777777777778", 0, os.EINVAL},
	atoui64Test{"02000000000000000000000", 1<<64 - 1, os.ERANGE},
	atoui64Test{"0200000000000000000000", 1 << 61, nil},
}

type atoi64Test struct {
	in	string;
	out	int64;
	err	os.Error;
}

var atoi64tests = []atoi64Test{
	atoi64Test{"", 0, os.EINVAL},
	atoi64Test{"0", 0, nil},
	atoi64Test{"-0", 0, nil},
	atoi64Test{"1", 1, nil},
	atoi64Test{"-1", -1, nil},
	atoi64Test{"12345", 12345, nil},
	atoi64Test{"-12345", -12345, nil},
	atoi64Test{"012345", 12345, nil},
	atoi64Test{"-012345", -12345, nil},
	atoi64Test{"98765432100", 98765432100, nil},
	atoi64Test{"-98765432100", -98765432100, nil},
	atoi64Test{"9223372036854775807", 1<<63 - 1, nil},
	atoi64Test{"-9223372036854775807", -(1 << 63 - 1), nil},
	atoi64Test{"9223372036854775808", 1<<63 - 1, os.ERANGE},
	atoi64Test{"-9223372036854775808", -1 << 63, nil},
	atoi64Test{"9223372036854775809", 1<<63 - 1, os.ERANGE},
	atoi64Test{"-9223372036854775809", -1 << 63, os.ERANGE},
}

var btoi64tests = []atoi64Test{
	atoi64Test{"", 0, os.EINVAL},
	atoi64Test{"0", 0, nil},
	atoi64Test{"-0", 0, nil},
	atoi64Test{"1", 1, nil},
	atoi64Test{"-1", -1, nil},
	atoi64Test{"12345", 12345, nil},
	atoi64Test{"-12345", -12345, nil},
	atoi64Test{"012345", 012345, nil},
	atoi64Test{"-012345", -012345, nil},
	atoi64Test{"0x12345", 0x12345, nil},
	atoi64Test{"-0X12345", -0x12345, nil},
	atoi64Test{"12345x", 0, os.EINVAL},
	atoi64Test{"-12345x", 0, os.EINVAL},
	atoi64Test{"98765432100", 98765432100, nil},
	atoi64Test{"-98765432100", -98765432100, nil},
	atoi64Test{"9223372036854775807", 1<<63 - 1, nil},
	atoi64Test{"-9223372036854775807", -(1 << 63 - 1), nil},
	atoi64Test{"9223372036854775808", 1<<63 - 1, os.ERANGE},
	atoi64Test{"-9223372036854775808", -1 << 63, nil},
	atoi64Test{"9223372036854775809", 1<<63 - 1, os.ERANGE},
	atoi64Test{"-9223372036854775809", -1 << 63, os.ERANGE},
}

type atoui32Test struct {
	in	string;
	out	uint32;
	err	os.Error;
}

var atoui32tests = []atoui32Test{
	atoui32Test{"", 0, os.EINVAL},
	atoui32Test{"0", 0, nil},
	atoui32Test{"1", 1, nil},
	atoui32Test{"12345", 12345, nil},
	atoui32Test{"012345", 12345, nil},
	atoui32Test{"12345x", 0, os.EINVAL},
	atoui32Test{"987654321", 987654321, nil},
	atoui32Test{"4294967295", 1<<32 - 1, nil},
	atoui32Test{"4294967296", 1<<32 - 1, os.ERANGE},
}

type atoi32Test struct {
	in	string;
	out	int32;
	err	os.Error;
}

var atoi32tests = []atoi32Test{
	atoi32Test{"", 0, os.EINVAL},
	atoi32Test{"0", 0, nil},
	atoi32Test{"-0", 0, nil},
	atoi32Test{"1", 1, nil},
	atoi32Test{"-1", -1, nil},
	atoi32Test{"12345", 12345, nil},
	atoi32Test{"-12345", -12345, nil},
	atoi32Test{"012345", 12345, nil},
	atoi32Test{"-012345", -12345, nil},
	atoi32Test{"12345x", 0, os.EINVAL},
	atoi32Test{"-12345x", 0, os.EINVAL},
	atoi32Test{"987654321", 987654321, nil},
	atoi32Test{"-987654321", -987654321, nil},
	atoi32Test{"2147483647", 1<<31 - 1, nil},
	atoi32Test{"-2147483647", -(1 << 31 - 1), nil},
	atoi32Test{"2147483648", 1<<31 - 1, os.ERANGE},
	atoi32Test{"-2147483648", -1 << 31, nil},
	atoi32Test{"2147483649", 1<<31 - 1, os.ERANGE},
	atoi32Test{"-2147483649", -1 << 31, os.ERANGE},
}

func init() {
	// The atoi routines return NumErrors wrapping
	// the error and the string.  Convert the tables above.
	for i := range atoui64tests {
		test := &atoui64tests[i];
		if test.err != nil {
			test.err = &NumError{test.in, test.err}
		}
	}
	for i := range btoui64tests {
		test := &btoui64tests[i];
		if test.err != nil {
			test.err = &NumError{test.in, test.err}
		}
	}
	for i := range atoi64tests {
		test := &atoi64tests[i];
		if test.err != nil {
			test.err = &NumError{test.in, test.err}
		}
	}
	for i := range btoi64tests {
		test := &btoi64tests[i];
		if test.err != nil {
			test.err = &NumError{test.in, test.err}
		}
	}
	for i := range atoui32tests {
		test := &atoui32tests[i];
		if test.err != nil {
			test.err = &NumError{test.in, test.err}
		}
	}
	for i := range atoi32tests {
		test := &atoi32tests[i];
		if test.err != nil {
			test.err = &NumError{test.in, test.err}
		}
	}
}

func TestAtoui64(t *testing.T) {
	for i := range atoui64tests {
		test := &atoui64tests[i];
		out, err := Atoui64(test.in);
		if test.out != out || !reflect.DeepEqual(test.err, err) {
			t.Errorf("Atoui64(%q) = %v, %v want %v, %v\n",
				test.in, out, err, test.out, test.err)
		}
	}
}

func TestBtoui64(t *testing.T) {
	for i := range btoui64tests {
		test := &btoui64tests[i];
		out, err := Btoui64(test.in, 0);
		if test.out != out || !reflect.DeepEqual(test.err, err) {
			t.Errorf("Btoui64(%q) = %v, %v want %v, %v\n",
				test.in, out, err, test.out, test.err)
		}
	}
}

func TestAtoi64(t *testing.T) {
	for i := range atoi64tests {
		test := &atoi64tests[i];
		out, err := Atoi64(test.in);
		if test.out != out || !reflect.DeepEqual(test.err, err) {
			t.Errorf("Atoi64(%q) = %v, %v want %v, %v\n",
				test.in, out, err, test.out, test.err)
		}
	}
}

func TestBtoi64(t *testing.T) {
	for i := range btoi64tests {
		test := &btoi64tests[i];
		out, err := Btoi64(test.in, 0);
		if test.out != out || !reflect.DeepEqual(test.err, err) {
			t.Errorf("Btoi64(%q) = %v, %v want %v, %v\n",
				test.in, out, err, test.out, test.err)
		}
	}
}

func TestAtoui(t *testing.T) {
	switch IntSize {
	case 32:
		for i := range atoui32tests {
			test := &atoui32tests[i];
			out, err := Atoui(test.in);
			if test.out != uint32(out) || !reflect.DeepEqual(test.err, err) {
				t.Errorf("Atoui(%q) = %v, %v want %v, %v\n",
					test.in, out, err, test.out, test.err)
			}
		}
	case 64:
		for i := range atoui64tests {
			test := &atoui64tests[i];
			out, err := Atoui(test.in);
			if test.out != uint64(out) || !reflect.DeepEqual(test.err, err) {
				t.Errorf("Atoui(%q) = %v, %v want %v, %v\n",
					test.in, out, err, test.out, test.err)
			}
		}
	}
}

func TestAtoi(t *testing.T) {
	switch IntSize {
	case 32:
		for i := range atoi32tests {
			test := &atoi32tests[i];
			out, err := Atoi(test.in);
			if test.out != int32(out) || !reflect.DeepEqual(test.err, err) {
				t.Errorf("Atoi(%q) = %v, %v want %v, %v\n",
					test.in, out, err, test.out, test.err)
			}
		}
	case 64:
		for i := range atoi64tests {
			test := &atoi64tests[i];
			out, err := Atoi(test.in);
			if test.out != int64(out) || !reflect.DeepEqual(test.err, err) {
				t.Errorf("Atoi(%q) = %v, %v want %v, %v\n",
					test.in, out, err, test.out, test.err)
			}
		}
	}
}
