1// Copyright 2013 Google Inc.  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
5package getopt
6
7import (
8	"fmt"
9	"strings"
10	"testing"
11)
12
13var signedNumberTests = []struct {
14	where string
15	in    []string
16	l     SignedLimit
17	out   int64
18	err   string
19}{
20	{
21		where: loc(),
22	},
23	{
24		loc(),
25		[]string{"test", "-n", "1010"},
26		SignedLimit{Base: 2, Bits: 5},
27		10,
28		"",
29	},
30	{
31		loc(),
32		[]string{"test", "-n", "1010"},
33		SignedLimit{Base: 2, Bits: 4},
34		0,
35		"test: value out of range: 1010\n",
36	},
37	{
38		loc(),
39		[]string{"test", "-n", "-1000"},
40		SignedLimit{Base: 2, Bits: 4},
41		-8,
42		"",
43	},
44	{
45		loc(),
46		[]string{"test", "-n", "3"},
47		SignedLimit{Min: 4, Max: 6},
48		0,
49		"test: value out of range (<4): 3\n",
50	},
51	{
52		loc(),
53		[]string{"test", "-n", "4"},
54		SignedLimit{Min: 4, Max: 6},
55		4,
56		"",
57	},
58	{
59		loc(),
60		[]string{"test", "-n", "5"},
61		SignedLimit{Min: 4, Max: 6},
62		5,
63		"",
64	},
65	{
66		loc(),
67		[]string{"test", "-n", "6"},
68		SignedLimit{Min: 4, Max: 6},
69		6,
70		"",
71	},
72	{
73		loc(),
74		[]string{"test", "-n", "7"},
75		SignedLimit{Min: 4, Max: 6},
76		0,
77		"test: value out of range (>6): 7\n",
78	},
79}
80
81func TestSigneds(t *testing.T) {
82	for x, tt := range signedNumberTests {
83		if strings.Index(tt.where, ":-") > 0 {
84			tt.where = fmt.Sprintf("#%d", x)
85		}
86
87		reset()
88		n := Signed('n', 0, &tt.l)
89		parse(tt.in)
90		if s := checkError(tt.err); s != "" {
91			t.Errorf("%s: %s", tt.where, s)
92		}
93		if *n != tt.out {
94			t.Errorf("%s: got %v, want %v", tt.where, *n, tt.out)
95		}
96	}
97}
98