// Tags: JDK1.0
// Copyright (C) 1998, 1999, 2001 Cygnus Solutions
// This file is part of Mauve.
// Mauve is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2, or (at your option)
// any later version.
// Mauve is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Mauve; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330,
// Boston, MA 02111-1307, USA. */
package gnu.testlet.wonka.lang.Integer;
import gnu.testlet.Testlet;
import gnu.testlet.TestHarness;
import gnu.testlet.UnicodeSubsets;
public class new_Integer implements Testlet
{
public void test (TestHarness harness)
{
Integer a = new Integer(0);
Integer b = new Integer(1);
Integer c = new Integer(-1);
Integer d = new Integer(Integer.MAX_VALUE);
Integer e = new Integer(Integer.MIN_VALUE);
Integer f = new Integer("0");
Integer g = new Integer("1");
Integer h = new Integer("-1");
Integer i = new Integer("2147483647");
Integer j = new Integer("-2147483648");
Integer k = new Integer("-0");
Integer l = new Integer("012345");
Integer m = new Integer("0012345");
harness.checkPoint ("toString");
harness.check (a + " " + b + " " + c + " " + d + " " + e,
"0 1 -1 2147483647 -2147483648");
harness.check (f + " " + g + " " + h + " " + i + " " + j,
"0 1 -1 2147483647 -2147483648");
harness.check (k + " " + l + " " + m,
"0 12345 12345");
harness.check (Integer.MAX_VALUE, 2147483647);
harness.check (Integer.MAX_VALUE + 1, -2147483648);
harness.check (Integer.MAX_VALUE + 2, -2147483647);
harness.check (Integer.MIN_VALUE, -2147483648);
harness.check (Integer.MIN_VALUE - 1, 2147483647);
harness.check (Integer.MIN_VALUE - 2, 2147483646);
harness.check (c.toString(), "-1");
harness.check (e.toString(), "-2147483648");
harness.check (Integer.toString(-1, 2),
"-1");
harness.check (Integer.toString(Integer.MIN_VALUE + 1, 2),
"-1111111111111111111111111111111");
harness.check (Integer.toString(Integer.MIN_VALUE, 2),
"-10000000000000000000000000000000");
harness.check (Integer.toString(Integer.MAX_VALUE, 2),
"1111111111111111111111111111111");
harness.check (Integer.toString(-1, 16),
"-1");
harness.check (Integer.toString(Integer.MIN_VALUE + 1, 16),
"-7fffffff");
harness.check (Integer.toString(Integer.MIN_VALUE, 16),
"-80000000");
harness.check (Integer.toString(Integer.MAX_VALUE, 16),
"7fffffff");
harness.check (Integer.toString(-1, 36),
"-1");
harness.check (Integer.toString(Integer.MIN_VALUE + 1, 36),
"-zik0zj");
harness.check (Integer.toString(Integer.MIN_VALUE, 36),
"-zik0zk");
harness.check (Integer.toString(Integer.MAX_VALUE, 36),
"zik0zj");
harness.check (Integer.toString(12345, 1), "12345");
harness.check (Integer.toString(12345, 37), "12345");
harness.checkPoint ("exceptions");
Integer bad = null;
try
{
bad = new Integer("2147483648");
}
catch (NumberFormatException ex)
{
}
harness.check (bad, null);
bad = null;
try
{
bad = new Integer("-2147483649");
}
catch (NumberFormatException ex)
{
}
harness.check (bad, null);
bad = null;
try
{
bad = new Integer("12345a");
}
catch (NumberFormatException ex)
{
}
harness.check (bad, null);
bad = null;
try
{
bad = new Integer("-");
}
catch (NumberFormatException ex)
{
}
harness.check (bad, null);
bad = null;
try
{
bad = new Integer("0x1e");
}
catch (NumberFormatException ex)
{
}
harness.check (bad, null);
bad = null;
try
{
bad = new Integer(null);
}
catch (NullPointerException npe)
{
harness.fail("wrong exception");
}
catch (NumberFormatException ex)
{
}
harness.check (bad, null);
bad = null;
try
{
bad = new Integer(" ");
}
catch (NumberFormatException ex)
{
}
harness.check (bad, null);
harness.checkPoint ("hashCode");
harness.check (a.hashCode(), 0);
harness.check (b.hashCode(), 1);
harness.check (c.hashCode(), -1);
harness.check (d.hashCode(), 2147483647);
harness.check (e.hashCode(), -2147483648);
// harness.check (a.compareTo(a));
// harness.check (b.compareTo(c));
// harness.check (c.compareTo(b));
// harness.check (d.compareTo(e));
// harness.check (e.compareTo(d));
harness.checkPoint ("decode");
harness.check (Integer.decode("123456789"), new Integer (123456789));
harness.check (Integer.decode("01234567"), new Integer (342391));
harness.check (Integer.decode("0x1234FF"), new Integer (1193215));
harness.check (Integer.decode("#1234FF"), new Integer (1193215));
harness.check (Integer.decode("-123456789"), new Integer (-123456789));
harness.check (Integer.decode("-01234567"), new Integer (-01234567));
harness.check (Integer.decode("-0"), new Integer (0));
harness.check (Integer.decode("0"), new Integer (0));
harness.check (Integer.decode(Integer.toString(Integer.MIN_VALUE)),
new Integer (-2147483648));
harness.check (Integer.decode("-01"), new Integer(-1));
harness.check (Integer.decode("-0x1"), new Integer(-1));
harness.check (Integer.decode("-#1"), new Integer(-1));
// \\u0660 is a Unicode digit, value 0, but does not trigger octal or hex
// [CG 20080901] Nice try, but only works if "arabic extended" is supported
if (UnicodeSubsets.isSupported("15")) {
harness.check (Integer.decode("\u06609"), new Integer(9));
}
harness.checkPoint ("decode exceptions");
boolean ok = false;
try
{
Integer.decode("");
}
catch (NumberFormatException ex)
{
ok = true;
}
harness.check (ok);
ok = false;
try
{
Integer.decode(" ");
}
catch (NumberFormatException ex)
{
ok = true;
}
harness.check (ok);
ok = false;
try
{
Integer.decode(null);
}
catch (NullPointerException npe)
{
ok = true;
}
catch (NumberFormatException ex)
{
// not ok
}
harness.check (ok);
ok = false;
try
{
Integer.decode("X1234");
}
catch (NumberFormatException ex)
{
ok = true;
}
harness.check (ok);
ok = false;
try
{
Integer.decode("0xF0000000");
}
catch (NumberFormatException ex)
{
ok = true;
}
harness.check (ok);
ok = false;
try
{
Integer.decode("0x");
}
catch (NumberFormatException ex)
{
ok = true;
}
harness.check (ok);
ok = false;
try
{
Integer.decode("-");
}
catch (NumberFormatException ex)
{
ok = true;
}
harness.check (ok);
ok = false;
try
{
Integer.decode("#");
}
catch (NumberFormatException ex)
{
ok = true;
}
harness.check (ok);
harness.checkPoint ("toBinaryString");
harness.check (Integer.toBinaryString(0),
"0");
harness.check (Integer.toBinaryString(1),
"1");
harness.check (Integer.toBinaryString(-1),
"11111111111111111111111111111111");
harness.check (Integer.toBinaryString(Integer.MIN_VALUE),
"10000000000000000000000000000000");
harness.check (Integer.toBinaryString(Integer.MAX_VALUE),
"1111111111111111111111111111111");
harness.check (Integer.toBinaryString(Integer.MIN_VALUE - 1),
"1111111111111111111111111111111");
harness.check (Integer.toBinaryString(Integer.MAX_VALUE + 1),
"10000000000000000000000000000000");
harness.checkPoint ("toOctalString");
harness.check (Integer.toOctalString(0),
"0");
harness.check (Integer.toOctalString(1),
"1");
harness.check (Integer.toOctalString(-1),
"37777777777");
harness.check (Integer.toOctalString(Integer.MIN_VALUE),
"20000000000");
harness.check (Integer.toOctalString(Integer.MAX_VALUE),
"17777777777");
harness.check (Integer.toOctalString(Integer.MIN_VALUE - 1),
"17777777777");
harness.check (Integer.toOctalString(Integer.MAX_VALUE + 1),
"20000000000");
harness.checkPoint ("toHexString");
harness.check (Integer.toHexString(0),
"0");
harness.check (Integer.toHexString(1),
"1");
harness.check (Integer.toHexString(-1),
"ffffffff");
harness.check (Integer.toHexString(Integer.MIN_VALUE),
"80000000");
harness.check (Integer.toHexString(Integer.MAX_VALUE),
"7fffffff");
harness.check (Integer.toHexString(Integer.MIN_VALUE - 1),
"7fffffff");
harness.check (Integer.toHexString(Integer.MAX_VALUE + 1),
"80000000");
harness.checkPoint ("parseInt");
harness.check (Integer.parseInt("0012345", 8),
5349);
harness.check (Integer.parseInt("xyz", 36),
44027);
harness.check (Integer.parseInt("12345", 6),
1865);
harness.check (Integer.parseInt("abcdef", 16),
11259375);
harness.check (Integer.parseInt("-0012345", 8),
-5349);
harness.check (Integer.parseInt("-xyz", 36),
-44027);
harness.check (Integer.parseInt("-12345", 6),
-1865);
harness.check (Integer.parseInt("-abcdef", 16),
-11259375);
harness.check (Integer.parseInt("0", 25),
0);
ok = false;
try
{
Integer.parseInt("0", 1);
}
catch (NumberFormatException ex)
{
ok = true;
}
harness.check (ok);
ok = false;
try
{
Integer.parseInt("0", 37);
}
catch (NumberFormatException ex)
{
ok = true;
}
harness.check (ok);
ok = false;
try
{
Integer.parseInt ("-80000001", 16);
}
catch (NumberFormatException ex)
{
ok = true;
}
harness.check (ok);
ok = false;
try
{
// This should fail, but won't if you are using a naive
// overflow detection scheme. `429496730' is chosen because
// when multiplied by 10 it overflows but the result is
// positive.
Integer.parseInt ("4294967309", 10);
}
catch (NumberFormatException ex)
{
ok = true;
}
harness.check (ok);
ok = false;
try
{
Integer.parseInt ("800000001", 16);
}
catch (NumberFormatException ex)
{
ok = true;
}
harness.check (ok);
}
}