blob: 75b7da9ab937767063be42c47f3da678addbd708 [file] [log] [blame]
package gls.ch03.s10;
/**
* JLS: 3.10.1
* An integer literal may be expressed in decimal (base 10), hexadecimal (base
* 16), or octal (base 8)...
*
* An integer literal is of type long if it is suffixed with an ASCII letter L
* or l (ell); otherwise it is of type int (ยง4.2.1)...
*
* Integer literals
* -- explicitly integer if ends with 'i' type specifier
* (can also create integers in other ways too)
* -- come in Decimal, Octal and Hex varieties
* -- represented in 32 bits, two's complement
*/
class IntegerLiterals extends GroovyTestCase {
void testDecInt() {
assertEquals(2i, (1i + 1i))
assertEquals(0i, (1i - 1i))
// Play games with most significant bit
assertEquals((-2147483647i - 1), (2147483647i + 1))
// Large positive literals
//def a = 2147483647i //@pass
//def a = 2147483648i //@fail:parse
//def a = 2147483649i //@fail:parse
// Large negative literals
//def a = -2147483647i //@pass
//def a = -2147483648i //@pass
//def a = -2147483649i //@fail:parse
assertEquals(99i, 99I)
}
void testHexInt() {
// Check literals get correct values
assertEquals(0, 0x0i)
assertEquals(1, 0x1i)
assertEquals(2, 0x2i)
assertEquals(3, 0x3i)
assertEquals(4, 0x4i)
assertEquals(5, 0x5i)
assertEquals(6, 0x6i)
assertEquals(7, 0x7i)
assertEquals(8, 0x8i)
assertEquals(9, 0x09i)
assertEquals(10, 0xai)
assertEquals(11, 0xbi)
assertEquals(12, 0xci)
assertEquals(13, 0xdi)
assertEquals(14, 0xei)
assertEquals(15, 0xfi)
assertEquals(16, 0x10i)
assertEquals(65535i, 0xffffi)
assertEquals(10140894i, 0x9abcdei)
assertEquals(11259375i, 0xabcdefi)
assertEquals(305419896i, 0x12345678i)
assertEquals(2147483647i, 0x7fffffffi)
// extra zeroes after the 'x' should not affect result
assertEquals(1, 0x01i)
assertEquals(1, 0x000001i)
assertEquals(1, 0x0000000000000000000000000001i)
//def a = 0x7fffffffi//@pass
//def a = 0x80000000i//@fail:parse
//def a = 0x80000001i//@fail:parse
//def a = -0x7fffffffi//@pass
//def a = -0x80000000i//@pass
//def a = -0x80000001i//@fail:parse
// Check that compiler handles the unary '-' as a separate token
//def a = - 0x80000000i//@pass
//def a = -/* */0x80000000i//@pass
//def a = - 0x80000001i//@fail:parse
//def a = -/* */0x80000001i//@fail:parse
}
void testOctInt() {
// Check literals get correct values
assertEquals(0i, 00)
assertEquals(1i, 01i)
assertEquals(2i, 02i)
assertEquals(3i, 03i)
assertEquals(4i, 04i)
assertEquals(5i, 05i)
assertEquals(6i, 06i)
assertEquals(7i, 07i)
assertEquals(65535, 0177777i)
assertEquals(10140894, 046536336)
assertEquals(11259375, 052746757i)
assertEquals(305419896, 02215053170)
assertEquals(2147483647, 017777777777i)
// extra zeroes should not affect result
assertEquals(1, 001i)
assertEquals(1, 0000001i)
assertEquals(1, 00000000000000000000000000001i)
//def a = 017777777777i//@pass
//def a = 020000000000i//@fail
//def a = 020000000001i//@fail
//def a = -017777777777i//@pass
//def a = -020000000000i//@pass
//def a = -020000000001i//@fail
//def a = - 020000000000i//@pass
//def a = -/* */020000000000i//@pass
//def a = - 020000000001i//@fail
//def a = -/* */020000000001i//@fail
}
}