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 package groovy.lang;
47
48 import java.util.List;
49 import java.util.Iterator;
50 import java.math.BigDecimal;
51
52 import junit.framework.TestCase;
53
54 /***
55 * @author James Strachan
56 * @version $Revision: 1.9 $
57 */
58 public class RangeTest extends TestCase {
59
60 public void testSize() {
61 Range r = createRange(0, 10);
62 assertEquals("Size of " + r, 11, r.size());
63 r = createRange(0, 1);
64 assertEquals("Size of " + r, 2, r.size());
65 r = createRange(0, 0);
66 assertEquals("Size of " + r, 1, r.size());
67
68 r = createRange(new BigDecimal("2.1"), new BigDecimal("10.0"));
69 assertEquals("Size of " + r, 8, r.size());
70 }
71
72 public void testProperties() {
73 Range r = createRange(0, 10);
74 assertEquals("from", 0, r.getFrom());
75 assertEquals("to", 10, r.getTo());
76 }
77
78 public void testGet() {
79 Range r = createRange(10, 20);
80 for (int i = 0; i < 10; i++) {
81 Integer value = (Integer) r.get(i);
82 assertEquals("Item at index: " + i, i + 10, value.intValue());
83 }
84
85 r = createRange(new BigDecimal("3.2"), new BigDecimal("9.9"));
86 for (int i = 0; i < r.size(); i++) {
87 BigDecimal value = (BigDecimal) r.get(i);
88 assertEquals("Item at index: " + i, new BigDecimal("3.2").add(new BigDecimal("" + i)), value);
89 }
90 }
91
92 public void testGetOutOfRange() {
93 Range r = createRange(10, 20);
94
95 try {
96 r.get(-1);
97 fail("Should have thrown IndexOut");
98 }
99 catch (IndexOutOfBoundsException e) {
100
101 }
102 try {
103 r.get(11);
104 fail("Should have thrown IndexOut");
105 }
106 catch (IndexOutOfBoundsException e) {
107
108 }
109
110 r = createRange(new BigDecimal("-4.3"), new BigDecimal("1.4"));
111
112 try {
113 r.get(-1);
114 fail("Should have thrown IndexOut");
115 }
116 catch (IndexOutOfBoundsException e) {
117
118 }
119 try {
120 r.get(7);
121 fail("Should have thrown IndexOut");
122 }
123 catch (IndexOutOfBoundsException e) {
124
125 }
126
127 }
128
129 public void testContains() {
130 Range r = createRange(10, 20);
131
132 assertTrue("contains 11", r.contains(new Integer(11)));
133 assertTrue("contains 10", r.contains(new Integer(10)));
134 assertTrue("contains 19", r.contains(new Integer(19)));
135 assertFalse("contains 9", r.contains(new Integer(9)));
136 assertFalse("contains 21", r.contains(new Integer(21)));
137 assertFalse("contains 100", r.contains(new Integer(100)));
138 assertFalse("contains -1", r.contains(new Integer(-1)));
139
140 r = createRange(new BigDecimal("2.1"), new BigDecimal("10.0"));
141
142 assertTrue("contains 9.1", r.contains(new BigDecimal("9.1")));
143 assertFalse("contains 8.0", r.contains(new BigDecimal("8.0")));
144 }
145
146 public void testSubList() {
147 Range r = createRange(10, 20);
148
149 List s = r.subList(2, 4);
150
151 Range sr = (Range) s;
152
153 assertEquals("from", 12, sr.getFrom());
154 assertEquals("to", 13, sr.getTo());
155 assertEquals("size", 2, sr.size());
156
157 r = createRange(new BigDecimal("0.5"), new BigDecimal("8.5"));
158 assertEquals("size", 9, r.size());
159 s = r.subList(2, 5);
160 sr = (Range) s;
161
162 assertEquals("from", new BigDecimal("2.5"), sr.getFrom());
163 assertEquals("to", new BigDecimal("4.5"), sr.getTo());
164 assertTrue("contains 4.5", sr.contains(new BigDecimal("4.5")));
165 assertFalse("contains 5.5", sr.contains(new BigDecimal("5.5")));
166 assertEquals("size", 3, sr.size());
167
168 }
169
170 public void testHashCodeAndEquals() {
171 Range a = createRange(1, 11);
172 Range b = createRange(1, 11);
173 Range c = createRange(2, 11);
174
175 assertEquals("hashcode", a.hashCode(), b.hashCode());
176 assertTrue("hashcode", a.hashCode() != c.hashCode());
177
178 assertEquals("a and b", a, b);
179 assertFalse("a != c", a.equals(c));
180 }
181
182 public void testIterator() {
183 Range r = createRange(5, 11);
184
185 int i = 5;
186 for (Iterator it = r.iterator(); it.hasNext(); ) {
187 assertEquals("equals to " + i, new Integer(i), (Integer) (it.next()));
188 i++;
189 }
190
191 r = createRange(new BigDecimal("5.0"), new BigDecimal("11.0"));
192 BigDecimal one = new BigDecimal("1.0");
193
194 BigDecimal val = new BigDecimal("5.0");
195 for (Iterator it = r.iterator(); it.hasNext(); ) {
196 assertEquals("equals to " + val, val, (BigDecimal) (it.next()));
197 val = val.add(one);
198 }
199 }
200
201 protected Range createRange(int from, int to) {
202 return new ObjectRange(new Integer(from), new Integer(to));
203 }
204
205 protected Range createRange(BigDecimal from, BigDecimal to) {
206 return new ObjectRange(from, to);
207 }
208
209 protected void assertEquals(String msg, int expected, Object value) {
210 assertEquals(msg, new Integer(expected), value);
211 }
212
213
214 }