diff options
Diffstat (limited to 'examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/javalib/IntegerTest.scala')
-rw-r--r-- | examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/javalib/IntegerTest.scala | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/javalib/IntegerTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/javalib/IntegerTest.scala new file mode 100644 index 0000000..5a01de4 --- /dev/null +++ b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/javalib/IntegerTest.scala @@ -0,0 +1,161 @@ +/* __ *\ +** ________ ___ / / ___ __ ____ Scala.js Test Suite ** +** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** +** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** +** /____/\___/_/ |_/____/_/ | |__/ /____/ ** +** |/____/ ** +\* */ +package scala.scalajs.testsuite.javalib + +import org.scalajs.jasminetest.JasmineTest +import scala.scalajs.js + +object IntegerTest extends JasmineTest { + + describe("java.lang.Integer") { + + // Explicitly define these as `var`'s to avoid any compile-time constant folding + var MaxValue: Int = Int.MaxValue + var MinValue: Int = Int.MinValue + + it("should provide `reverseBytes` used by scala.Enumeration") { + expect(Integer.reverseBytes(0xdeadbeef)).toEqual(0xefbeadde) + } + + it("should provide `rotateLeft`") { + expect(Integer.rotateLeft(0x689cd401, 0)).toEqual(0x689cd401) + expect(Integer.rotateLeft(0x689cd401, 1)).toEqual(0xd139a802) + expect(Integer.rotateLeft(0x689cd401, 8)).toEqual(0x9cd40168) + expect(Integer.rotateLeft(0x689cd401, 13)).toEqual(0x9a802d13) + expect(Integer.rotateLeft(0x689cd401, 32)).toEqual(0x689cd401) + expect(Integer.rotateLeft(0x689cd401, 33)).toEqual(0xd139a802) + expect(Integer.rotateLeft(0x689cd401, 43)).toEqual(0xe6a00b44) + expect(Integer.rotateLeft(0x689cd401, -1)).toEqual(0xb44e6a00) + expect(Integer.rotateLeft(0x689cd401, -28)).toEqual(0x89cd4016) + expect(Integer.rotateLeft(0x689cd401, -39)).toEqual(0x2d139a8) + } + + it("should provide `rotateRight`") { + expect(Integer.rotateRight(0x689cd401, 0)).toEqual(0x689cd401) + expect(Integer.rotateRight(0x689cd401, 1)).toEqual(0xb44e6a00) + expect(Integer.rotateRight(0x689cd401, 8)).toEqual(0x1689cd4) + expect(Integer.rotateRight(0x689cd401, 13)).toEqual(0xa00b44e6) + expect(Integer.rotateRight(0x689cd401, 32)).toEqual(0x689cd401) + expect(Integer.rotateRight(0x689cd401, 33)).toEqual(0xb44e6a00) + expect(Integer.rotateRight(0x689cd401, 43)).toEqual(0x802d139a) + expect(Integer.rotateRight(0x689cd401, -1)).toEqual(0xd139a802) + expect(Integer.rotateRight(0x689cd401, -28)).toEqual(0x1689cd40) + expect(Integer.rotateRight(0x689cd401, -39)).toEqual(0x4e6a00b4) + } + + it("should provide `bitCount` used by Map") { + abstract sealed class Status + case object Used extends Status + case object Current extends Status + case object OneMove extends Status + case object MultipleMoves extends Status + case object Other extends Status + + val map = Map(Used -> 0, Other -> 0, Current -> 0, MultipleMoves -> 1, OneMove -> 2) + + expect(map.size).toEqual(5) + expect(map(MultipleMoves)).toEqual(1) + } + + it("should provide `numberOfTrailingZeros`") { + expect(Integer.numberOfTrailingZeros(0xa3c49000)).toEqual(12) + expect(Integer.numberOfTrailingZeros(0x43f49020)).toEqual(5) + expect(Integer.numberOfTrailingZeros(0x43c08000)).toEqual(15) + expect(Integer.numberOfTrailingZeros(0)).toEqual(32) + } + + it("should provide `toBinaryString` for values in range") { + expect(Integer.toBinaryString(-1)).toEqual("11111111111111111111111111111111") + expect(Integer.toBinaryString(-10001)).toEqual("11111111111111111101100011101111") + expect(Integer.toBinaryString(MinValue)).toEqual("10000000000000000000000000000000") + expect(Integer.toBinaryString(MaxValue)).toEqual("1111111111111111111111111111111") + } + + it("should provide `toHexString` for values in range") { + expect(Integer.toHexString(-1)).toEqual("ffffffff") + expect(Integer.toHexString(-10001)).toEqual("ffffd8ef") + expect(Integer.toHexString(MinValue)).toEqual("80000000") + expect(Integer.toHexString(-2147000002)).toEqual("8007613e") + expect(Integer.toHexString(MaxValue)).toEqual("7fffffff") + } + + it("should provide `toOctalString` for values in range") { + expect(Integer.toOctalString(-1)).toEqual("37777777777") + expect(Integer.toOctalString(-10001)).toEqual("37777754357") + expect(Integer.toOctalString(MinValue)).toEqual("20000000000") + expect(Integer.toOctalString(MaxValue)).toEqual("17777777777") + } + + it("should provide `compareTo`") { + def compare(x: Int, y: Int): Int = + new Integer(x).compareTo(new Integer(y)) + + expect(compare(0, 5)).toBeLessThan(0) + expect(compare(10, 9)).toBeGreaterThan(0) + expect(compare(-2, -1)).toBeLessThan(0) + expect(compare(3, 3)).toEqual(0) + } + + it("should be a Comparable") { + def compare(x: Any, y: Any): Int = + x.asInstanceOf[Comparable[Any]].compareTo(y) + + expect(compare(0, 5)).toBeLessThan(0) + expect(compare(10, 9)).toBeGreaterThan(0) + expect(compare(-2, -1)).toBeLessThan(0) + expect(compare(3, 3)).toEqual(0) + } + + it("should parse strings") { + def test(s: String, v: Int, radix: Int = 10): Unit = { + expect(Integer.parseInt(s, radix)).toEqual(v) + expect(Integer.valueOf(s, radix).intValue()).toEqual(v) + if (radix == 10) + expect(new Integer(s).intValue()).toEqual(v) + } + + test("0", 0) + test("5", 5) + test("127", 127) + test("-100", -100) + test("30000", 30000) + test("-90000", -90000) + test("Kona", 411787, 27) + test("+42", 42) + test("-0", 0) + test("-FF", -255, 16) + } + + it("should reject invalid strings when parsing") { + def test(s: String, radix: Int = 10): Unit = + expect(() => Integer.parseInt(s, radix)).toThrow + + test("abc") + test("5a") + test("2147483648") + test("99", 8) + test("-") + test("") + } + + it("should parse strings in base 16") { + def test(s: String, v: Int): Unit = { + expect(Integer.parseInt(s, 16)).toEqual(v) + expect(Integer.valueOf(s, 16).intValue()).toEqual(v) + } + + test("0", 0x0) + test("5", 0x5) + test("ff", 0xff) + test("-24", -0x24) + test("30000", 0x30000) + test("-90000", -0x90000) + } + + } +} |