summaryrefslogtreecommitdiff
path: root/src/lib/strconv/itoa_test.go
blob: 34caf9a3253188162200284cff2e13c27b9e4bf2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// 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

import (
	"fmt";
	"os";
	"strconv";
	"testing";
)

type itob64Test struct {
	in int64;
	base uint;
	out string;
}

var itob64tests = []itob64Test {
	itob64Test{ 0, 10, "0" },
	itob64Test{ 1, 10, "1" },
	itob64Test{ -1, 10, "-1" },
	itob64Test{ 12345678, 10, "12345678" },
	itob64Test{ -987654321, 10, "-987654321" },
	itob64Test{ 1<<31-1, 10, "2147483647" },
	itob64Test{ -1<<31+1, 10, "-2147483647" },
	itob64Test{ 1<<31, 10, "2147483648" },
	itob64Test{ -1<<31, 10, "-2147483648" },
	itob64Test{ 1<<31+1, 10, "2147483649" },
	itob64Test{ -1<<31-1, 10, "-2147483649" },
	itob64Test{ 1<<32-1, 10, "4294967295" },
	itob64Test{ -1<<32+1, 10, "-4294967295" },
	itob64Test{ 1<<32, 10, "4294967296" },
	itob64Test{ -1<<32, 10, "-4294967296" },
	itob64Test{ 1<<32+1, 10, "4294967297" },
	itob64Test{ -1<<32-1, 10, "-4294967297" },
	itob64Test{ 1<<50, 10, "1125899906842624" },
	itob64Test{ 1<<63-1, 10, "9223372036854775807" },
	itob64Test{ -1<<63+1, 10, "-9223372036854775807" },
	itob64Test{ -1<<63, 10, "-9223372036854775808" },

	itob64Test{ 0, 2, "0" },
	itob64Test{ 10, 2, "1010" },
	itob64Test{ -1, 2, "-1" },
	itob64Test{ 1<<15, 2, "1000000000000000" },

	itob64Test{ -8, 8, "-10" },
	itob64Test{ 057635436545, 8, "57635436545" },
	itob64Test{ 1<<24, 8, "100000000" },

	itob64Test{ 16, 16, "10" },
	itob64Test{ -0x123456789abcdef, 16, "-123456789abcdef" },
	itob64Test{ 1<<63-1, 16, "7fffffffffffffff" },

	itob64Test{ 16, 17, "g" },
	itob64Test{ 25, 25, "10" },
	itob64Test{ (((((17*35+24)*35+21)*35+34)*35+12)*35+24)*35+32, 35, "holycow" },
	itob64Test{ (((((17*36+24)*36+21)*36+34)*36+12)*36+24)*36+32, 36, "holycow" },
}

func TestItoa(t *testing.T) {
	for i := 0; i < len(itob64tests); i++ {
		test := itob64tests[i];

		s := strconv.Itob64(test.in, test.base);
		if s != test.out {
			t.Errorf("strconv.Itob64(%v, %v) = %v want %v\n",
				test.in, test.base, s, test.out);
		}

		if int64(int(test.in)) == test.in {
			s := strconv.Itob(int(test.in), test.base);
			if s != test.out {
				t.Errorf("strconv.Itob(%v, %v) = %v want %v\n",
					test.in, test.base, s, test.out);
			}
		}

		if test.base == 10 {
			s := strconv.Itoa64(test.in);
			if s != test.out {
				t.Errorf("strconv.Itoa64(%v) = %v want %v\n",
					test.in, s, test.out);
			}

			if int64(int(test.in)) == test.in {
				s := strconv.Itoa(int(test.in));
				if s != test.out {
					t.Errorf("strconv.Itoa(%v) = %v want %v\n",
						test.in, s, test.out);
				}
			}
		}
	}
}

// TODO: Use once there is a strconv.uitoa
type uitoa64Test struct {
	in uint64;
	out string;
}

// TODO: should be able to call this atoui64tests.
var uitoa64tests = []uitoa64Test {
	uitoa64Test{ 1<<63-1, "9223372036854775807" },
	uitoa64Test{ 1<<63, "9223372036854775808" },
	uitoa64Test{ 1<<63+1, "9223372036854775809" },
	uitoa64Test{ 1<<64-2, "18446744073709551614" },
	uitoa64Test{ 1<<64-1, "18446744073709551615" },
}