1+ #!/bin/java bsh.Interpreter
2+
3+ source("TestHarness.bsh");
4+ source("Assert.bsh");
5+
6+ f=(float) 5;
7+ assertEquals(5f, f, 1);
8+ assertEquals(0i, (int) 0.5);
9+
10+ a=0.3;
11+ assertEquals(0i, (int) a);
12+
13+ d=(double) +1;
14+ assertEquals(1.0d, d, 1);
15+
16+ // this is ok of course
17+ String s = null;
18+ assertNull(s);
19+ // but this should be as well
20+ String s2 = (String) null;
21+ assertNull(s2);
22+ assertNull((Object) null);
23+ assertNotNull((int) null);
24+
25+ // cast null to primitive default value
26+ assertEquals(0o, (byte) null);
27+ assertEquals(0s, (short) null);
28+ assertEquals(0i, (int) null);
29+ assertEquals(0l, (long) null);
30+ assertEquals(0.0f, (float) null, 1);
31+ assertEquals(0.0d, (double) null, 1);
32+ assertEquals(false, (boolean) null);
33+ assertEquals('\000', (char) null);
34+
35+ int x = (int) 'a';
36+ assertEquals(97i, x);
37+
38+ // can't cast void to anything
39+ assert( isEvalError("Cannot cast void value to int", "(int) xyz"));
40+ assert( isEvalError("Cannot cast void value to Object", "(Object) xyz"));
41+
42+ // cast primitives to object types get boxed
43+ assertThat((Object) 5o, instanceOf(Byte.class));
44+ assertThat((Object) 5s, instanceOf(Short.class));
45+ assertThat((Object) 5i, instanceOf(Integer.class));
46+ assertThat((Object) 5l, instanceOf(Long.class));
47+ assertThat((Object) 5f, instanceOf(Float.class));
48+ assertThat((Object) 5d, instanceOf(Double.class));
49+ assertThat((Object) '5', instanceOf(Character.class));
50+ assertThat((Object) true, instanceOf(Boolean.class));
51+ // cast boxed types to primitives
52+ assertEquals('a', (char) Character.valueOf('a'));
53+ assertEquals(1o, (byte) Byte.valueOf(1o));
54+ assertEquals(2s, (short) Short.valueOf(2s));
55+ assertEquals(3i, (int) Integer.valueOf(3i));
56+ assertEquals(4l, (long) Long.valueOf(4l));
57+ assertEquals(5.0f, (float) Float.valueOf(5f), 1);
58+ assertEquals(6.0d, (double) Double.valueOf(6d), 1);
59+ assertEquals(true, (boolean) Boolean.TRUE);
60+
61+ // boolean can be cast to numbers
62+ assertEquals('\000', (char) false);
63+ assertEquals(0o, (byte) false);
64+ assertEquals(0s, (short) false);
65+ assertEquals(0i, (int) false);
66+ assertEquals(0l, (long) false);
67+ assertEquals(0.0f, (float) false, 1);
68+ assertEquals(0.0d, (double) false, 1);
69+ assertEquals('\001', (char) true);
70+ assertEquals(1o, (byte) true);
71+ assertEquals(1s, (short) true);
72+ assertEquals(1i, (int) true);
73+ assertEquals(1l, (long) true);
74+ assertEquals(1.0f, (float) true, 1);
75+ assertEquals(1.0d, (double) true, 1);
76+
77+ // cast string to number
78+ assertEquals('a', (char) "97");
79+ assertEquals(1i, (int) "1.0");
80+ assertEquals(3o, (byte) "3");
81+ assertEquals(2s, (short) "2");
82+ assertEquals(1i, (int) "1.0");
83+ assertEquals(0l, (long) "0");
84+ assertEquals(-1.0f, (float) "-1", 1);
85+ assertEquals(-2.0d, (double) "-2.0", 1);
86+
87+ // cast to boolean
88+ // 0, null, or empty string is false
89+ assertEquals(false, (boolean) false);
90+ assertEquals(false, (boolean) '\000');
91+ assertEquals(false, (boolean) 0o);
92+ assertEquals(false, (boolean) 0s);
93+ assertEquals(false, (boolean) 0i);
94+ assertEquals(false, (boolean) 0l);
95+ assertEquals(false, (boolean) 0.0f);
96+ assertEquals(false, (boolean) 0.0d);
97+ assertEquals(false, (boolean) "");
98+ assertEquals(false, (boolean) null);
99+ // not 0, not null, or not empty string is true
100+ assertEquals(true, (boolean) true);
101+ assertEquals(true, (boolean) ' ');
102+ assertEquals(true, (boolean) 3o);
103+ assertEquals(true, (boolean) 2s);
104+ assertEquals(true, (boolean) 1i);
105+ assertEquals(true, (boolean) -1l);
106+ assertEquals(true, (boolean) -2.0f);
107+ assertEquals(true, (boolean) -3.0d);
108+ assertEquals(true, (boolean) "not empty");
109+ assertEquals(true, (boolean) new Object());
110+ assertEquals(true, (boolean) Class.class);
111+
112+ // typed variable assignment
113+ byte b;
114+ assertEquals(0o, b);
115+ assertEquals(0o, b = null);
116+ assertEquals(0o, b = '\000');
117+ assertEquals(0o, b = false);
118+ assertEquals(1o, b = true);
119+ assertEquals(123o, b = "123");
120+ Byte B;
121+ assertNull(B);
122+ assertNull(B = null);
123+ assertEquals(0o, B = '\000');
124+ assertEquals(0o, B = false);
125+ assertEquals(1o, B = true);
126+ assertEquals(123o, B = "123");
127+ short ss;
128+ assertEquals(0s, ss);
129+ assertEquals(0s, ss = null);
130+ assertEquals(0s, ss = '\000');
131+ assertEquals(0s, ss = false);
132+ assertEquals(1s, ss = true);
133+ assertEquals(123s, ss = "123");
134+ Short S;
135+ assertNull(S);
136+ assertNull(S = null);
137+ assertEquals(0s, S = '\000');
138+ assertEquals(0s, S = false);
139+ assertEquals(1s, S = true);
140+ assertEquals(123s, S = "123");
141+ int i;
142+ assertEquals(0i, i);
143+ assertEquals(0i, i = null);
144+ assertEquals(0i, i = '\000');
145+ assertEquals(0i, i = false);
146+ assertEquals(1i, i = true);
147+ assertEquals(123i, i = "123");
148+ Integer I;
149+ assertNull(I);
150+ assertNull(I = null);
151+ assertEquals(0i, I = '\000');
152+ assertEquals(0i, I = false);
153+ assertEquals(1i, I = true);
154+ assertEquals(123i, I = "123");
155+ long l;
156+ assertEquals(0l, l);
157+ assertEquals(0l, l = null);
158+ assertEquals(0l, l = '\000');
159+ assertEquals(0l, l = false);
160+ assertEquals(1l, l = true);
161+ assertEquals(123l, l = "123");
162+ Long L;
163+ assertNull(L);
164+ assertNull(L = null);
165+ assertEquals(0l, L = '\000');
166+ assertEquals(0l, L = false);
167+ assertEquals(1l, L = true);
168+ assertEquals(123l, L = "123");
169+ float f;
170+ assertEquals(0.0f, f, 1);
171+ assertEquals(0.0f, f = null, 1);
172+ assertEquals(0.0f, f = '\000', 1);
173+ assertEquals(0.0f, f = false, 1);
174+ assertEquals(1.0f, f = true, 1);
175+ assertEquals(123.0f, f = "123", 1);
176+ Float F;
177+ assertNull(F);
178+ assertNull(F = null);
179+ assertEquals(0.0f, F = '\000', 1);
180+ assertEquals(0.0f, F = false, 1);
181+ assertEquals(1.0f, F = true, 1);
182+ assertEquals(123.0f, F = "123", 1);
183+ double d;
184+ assertEquals(0.0d, d, 1);
185+ assertEquals(0.0d, d = null, 1);
186+ assertEquals(0.0d, d = '\000', 1);
187+ assertEquals(0.0d, d = false, 1);
188+ assertEquals(1.0d, d = true, 1);
189+ assertEquals(123.0d, d = "123", 1);
190+ Double D;
191+ assertNull(D);
192+ assertNull(D = null);
193+ assertEquals(0.0d, D = '\000', 1);
194+ assertEquals(0.0d, D = false, 1);
195+ assertEquals(1.0d, D = true, 1);
196+ assertEquals(123.0d, D = "123", 1);
197+ boolean bb;
198+ assertFalse(bb);
199+ assertFalse(bb = null);
200+ assertFalse(bb = 0);
201+ assertFalse(bb = "");
202+ assertFalse(bb = '\000');
203+ assertFalse(bb = false);
204+ assertTrue(bb = Boolean.TYPE);
205+ assertTrue(bb = 123);
206+ assertTrue(bb = "tick");
207+ assertTrue(bb = 'a');
208+ assertTrue(bb = true);
209+ Boolean BB;
210+ assertNull(BB);
211+ assertNull(BB = null);
212+ assertFalse(BB = 0);
213+ assertFalse(BB = "");
214+ assertFalse(BB = '\000');
215+ assertFalse(BB = false);
216+ assertTrue(BB = Boolean.class);
217+ assertTrue(BB = 123);
218+ assertTrue(BB = "tick");
219+ assertTrue(BB = 'a');
220+ assertTrue(BB = true);
221+
222+ // can't cast non parseable strings to number
223+ assert( isEvalError('Cannot cast String with value "foo" to int', '(int) "foo"'));
224+ assert( isEvalError('cannot cast string "" to number', '(short) ""'));
225+ assert( isEvalError('Cannot cast String with value "foo" to Integer', '(Integer) "foo";'));
226+
227+ // cast error throws ClassCastException which can be caught
228+ try {
229+ i=(Integer) "foo";
230+ } catch ( ArithmeticException e0 ) {
231+ assert(false); // just checking
232+ } catch ( ClassCastException e ) {
233+ flag();
234+ }
235+ assertEquals(1, flag());
236+
237+ arr = (long[]) new byte[] { 14, 10, 45, 2 };
238+ assertTrue(arr instanceof long[]);
239+ assertArrayEquals(new long[] { 14, 10, 45, 2 }, arr);
240+
241+ arr = (List<Integer>[]) new List[] { null, new ArrayList(), Arrays.asList(10, 43, 76) };
242+ assertTrue(arr instanceof List[]);
243+ assertArrayEquals(new List[] { null, new ArrayList<>(), Arrays.asList(10, 43, 76) }, arr);
244+
245+ arr = (byte[][]) new int[][] { { 14, 10 }, { 45, 2, 34 } };
246+ assertTrue(arr instanceof byte[][]);
247+ assertArrayEquals(new byte[][] { { 14, 10 }, { 45, 2, 34 } }, arr);
248+
249+ complete();
0 commit comments