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 unsignedTests = []struct {
14	where string
15	in    []string
16	l     UnsignedLimit
17	out   uint64
18	err   string
19}{
20	{
21		where: loc(),
22	},
23	{
24		loc(),
25		[]string{"test", "-n", "1010"},
26		UnsignedLimit{Base: 2, Bits: 5},
27		10,
28		"",
29	},
30	{
31		loc(),
32		[]string{"test", "-n", "1010"},
33		UnsignedLimit{Base: 2, Bits: 4},
34		10,
35		"",
36	},
37	{
38		loc(),
39		[]string{"test", "-n", "1010"},
40		UnsignedLimit{Base: 2, Bits: 3},
41		0,
42		"test: value out of range: 1010\n",
43	},
44	{
45		loc(),
46		[]string{"test", "-n", "3"},
47		UnsignedLimit{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		UnsignedLimit{Min: 4, Max: 6},
55		4,
56		"",
57	},
58	{
59		loc(),
60		[]string{"test", "-n", "5"},
61		UnsignedLimit{Min: 4, Max: 6},
62		5,
63		"",
64	},
65	{
66		loc(),
67		[]string{"test", "-n", "6"},
68		UnsignedLimit{Min: 4, Max: 6},
69		6,
70		"",
71	},
72	{
73		loc(),
74		[]string{"test", "-n", "7"},
75		UnsignedLimit{Min: 4, Max: 6},
76		0,
77		"test: value out of range (>6): 7\n",
78	},
79}
80
81func TestUnsigneds(t *testing.T) {
82	for x, tt := range unsignedTests {
83		if strings.Index(tt.where, ":-") > 0 {
84			tt.where = fmt.Sprintf("#%d", x)
85		}
86
87		reset()
88		n := Unsigned('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