JSAbstractOperations { static Double ToInt32(Object arg) { Double number = ToNumber(arg); if (number.isNaN() || number.isInfinite() || number == 0.0) { return 0.0; } Double posInt = ToInteger(number); BigInteger posIntBig = new BigInteger(PLAIN_INTEGER_FORMAT.format(posInt)); BigInteger int32bit = posIntBig.mod(UINT_MAX_VALUE); if (int32bit.compareTo(SINT_MAX_VALUE) >= 0) { return int32bit.subtract(UINT_MAX_VALUE).doubleValue(); } return int32bit.doubleValue(); }   static final BigInteger UINT_MAX_VALUE; static final Double UINT_MAX_VALUE_D; static final BigInteger SINT_MAX_VALUE; static final BigInteger USHORT_MAX_VALUE; }
@Test public void testToInt3201() { assertEquals(0.0, ToInt32(NaN), 0.0); assertEquals(Double.POSITIVE_INFINITY, 1 / ToInt32(NaN), 0.0); assertEquals(0.0, ToInt32(0), 0.0); assertEquals(Double.POSITIVE_INFINITY, 1 / ToInt32(0), 0.0); assertEquals(0.0, ToInt32(-0), 0.0); assertEquals(Double.POSITIVE_INFINITY, 1 / ToInt32(-0), 0.0); assertEquals(0.0, ToInt32(Double.POSITIVE_INFINITY), 0.0); assertEquals(Double.POSITIVE_INFINITY, 1 / ToInt32(Double.POSITIVE_INFINITY), 0.0); assertEquals(0.0, ToInt32(Double.NEGATIVE_INFINITY), 0.0); assertEquals(Double.POSITIVE_INFINITY, 1 / ToInt32(Double.NEGATIVE_INFINITY), 0.0); }
@Test public void testToInt3202() { assertEquals(-2147483647d, ToInt32(-2147483647d), 0.0); assertEquals(-2147483648d, ToInt32(-2147483648d), 0.0); assertEquals(2147483647d, ToInt32(-2147483649d), 0.0); assertEquals(0d, ToInt32(-4294967296d), 0.0); assertEquals(1d, ToInt32(-4294967295d), 0.0); assertEquals(-1d, ToInt32(-4294967297d), 0.0); assertEquals(2147483646d, ToInt32(2147483646d), 0.0); assertEquals(2147483647d, ToInt32(2147483647d), 0.0); assertEquals(-2147483648d, ToInt32(2147483648d), 0.0); assertEquals(0d, ToInt32(4294967296d), 0.0); assertEquals(-1d, ToInt32(4294967295d), 0.0); assertEquals(1d, ToInt32(4294967297d), 0.0); assertEquals(-1d, ToInt32(8589934591d), 0.0); assertEquals(0d, ToInt32(8589934592d), 0.0); assertEquals(1d, ToInt32(8589934593d), 0.0); }
@Test public void testToInt3203() { assertEquals(1, ToInt32(true), 0.0); assertEquals(0, ToInt32(false), 0.0); assertEquals(-1, ToInt32(-1.234), 0.0); assertEquals(1, ToInt32(1.234), 0.0); assertEquals(-1, ToInt32("-1.234"), 0.0); }
@Test public void testToInt3204() { Object o = new Object() { @SuppressWarnings("unused") public int valueOf() { return 1; } }; assertEquals(1.0, ToInt32(o), 0.0); o = new Object() { @SuppressWarnings("unused") public int valueOf() { return 1; }; public String toString() { return "0"; } }; assertEquals(1.0, ToInt32(o), 0.0); o = new Object() { @SuppressWarnings("unused") public int valueOf() { return 1; }; public String toString() { throw new RuntimeException("Exception that should not be thrown"); } }; assertEquals(1.0, ToInt32(o), 0.0); o = new Object() { public String toString() { return "1"; } }; assertEquals(1.0, ToInt32(o), 0.0); o = new Object() { @SuppressWarnings("unused") public Object valueOf() { return new Object(); } public String toString() { return "1"; } }; assertEquals(1.0, ToInt32(o), 0.0); try { o = new Object() { @SuppressWarnings("unused") public Object valueOf() { throw new RuntimeException("error"); } public String toString() { return "1"; } }; ToInt32(o); throw new RuntimeException("Expected an exception, but got nothing"); } catch (RuntimeException e) { assertEquals("error", e.getMessage()); } try { o = new Object() { public String toString() { throw new RuntimeException("error"); } }; ToInt32(o); throw new RuntimeException("Expected an exception, but got nothing"); } catch (RuntimeException e) { assertEquals("error", e.getMessage()); } }