/* __ *\
** ________ ___ / / ___ __ ____ Scala.js Test Suite **
** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ **
** /____/\___/_/ |_/____/_/ | |__/ /____/ **
** |/____/ **
\* */
package scala.scalajs.testsuite.typedarray
import org.scalajs.jasminetest.JasmineTest
import scala.scalajs.js.typedarray._
object DataViewTest extends JasmineTest {
when("typedarray").
describe("DataView") {
it("should provide an ArrayBuffer only constructor") {
val buf = new ArrayBuffer(10)
val view = new DataView(buf)
expect(view.isInstanceOf[DataView]).toBeTruthy
expect(view.byteLength).toBe(10)
expect(view.byteOffset).toBe(0)
expect(view.getInt8(0)).toBe(0)
}
it("should provide an ArrayBuffer and offset constructor") {
val buf = new ArrayBuffer(10)
val view = new DataView(buf, 2)
expect(view.isInstanceOf[DataView]).toBeTruthy
expect(view.byteLength).toBe(8)
expect(view.byteOffset).toBe(2)
expect(view.getInt8(0)).toBe(0)
}
it("should provide an ArrayBuffer, offset and length constructor") {
val buf = new ArrayBuffer(10)
val view = new DataView(buf, 3, 2)
expect(view.isInstanceOf[DataView]).toBeTruthy
expect(view.byteLength).toBe(2)
expect(view.byteOffset).toBe(3)
expect(view.getInt8(0)).toBe(0)
}
it("should provide `getInt8`") {
val view = new DataView(new ArrayBuffer(4))
view.setInt8(0, 1)
view.setInt8(1, 127)
view.setInt8(3, -50)
expect(view.getInt8(0)).toBe(1)
expect(view.getInt8(1)).toBe(127)
expect(view.getInt8(2)).toBe(0)
expect(view.getInt8(3)).toBe(-50)
}
it("should provide `getUint8`") {
val view = new DataView(new ArrayBuffer(4))
view.setInt8(0, 1)
view.setInt8(1, -127)
expect(view.getUint8(0)).toBe(1)
expect(view.getUint8(1)).toBe(129)
expect(view.getUint8(2)).toBe(0)
}
it("should provide `getInt16`") {
val view = new DataView(new ArrayBuffer(4))
view.setUint8(0, 0x01)
view.setUint8(1, 0xFF)
view.setUint8(2, 0xB3)
view.setUint8(3, 0x30)
expect(view.getInt16(0)).toBe(0x01FF)
expect(view.getInt16(0, true)).toBe(-255)
expect(view.getInt16(1)).toBe(-77)
expect(view.getInt16(2, true)).toBe(0x30B3)
}
it("should provide `getUint16`") {
val view = new DataView(new ArrayBuffer(4))
view.setUint8(0, 0x01)
view.setUint8(1, 0xFF)
view.setUint8(2, 0xB3)
view.setUint8(3, 0x30)
expect(view.getUint16(0)).toBe(0x01FF)
expect(view.getUint16(0, true)).toBe(0xFF01)
expect(view.getUint16(1)).toBe(0xFFB3)
expect(view.getUint16(2, true)).toBe(0x30B3)
}
it("should provide `getInt32`") {
val view = new DataView(new ArrayBuffer(5))
view.setUint8(0, 0x01)
view.setUint8(1, 0xFF)
view.setUint8(2, 0xB3)
view.setUint8(3, 0x30)
view.setUint8(4, 0x1A)
expect(view.getInt32(0)).toBe(0x01FFB330)
expect(view.getInt32(0, true)).toBe(0x30B3FF01)
expect(view.getInt32(1)).toBe(0xFFB3301A) // is negative since Int
expect(view.getInt32(1, true)).toBe(0x1A30B3FF)
}
it("should provide `getUint32`") {
val view = new DataView(new ArrayBuffer(5))
view.setUint8(0, 0x01)
view.setUint8(1, 0xFF)
view.setUint8(2, 0xB3)
view.setUint8(3, 0x30)
view.setUint8(4, 0x1A)
expect(view.getUint32(0)).toBe(0x01FFB330)
expect(view.getUint32(0, true)).toBe(0x30B3FF01)
expect(view.getUint32(1)).toBe(0xFFB3301AL.toDouble)
expect(view.getUint32(1, true)).toBe(0x1A30B3FF)
}
it("should provide `getFloat32`") {
val view = new DataView(new ArrayBuffer(5))
view.setFloat32(0, 0.1f)
expect(view.getFloat32(0)).toBeCloseTo(0.1, 7)
expect(view.getFloat32(1)).not.toBeCloseTo(0.1, 7)
expect(view.getFloat32(0, true)).not.toBeCloseTo(0.1, 7)
expect(view.getFloat32(1, true)).not.toBeCloseTo(0.1, 7)
}
it("should provide `getFloat64`") {
val view = new DataView(new ArrayBuffer(9))
view.setFloat64(0, 0.5)
expect(view.getFloat64(0)).toBe(0.5)
expect(view.getFloat64(1)).not.toBe(0.5)
expect(view.getFloat64(0, true)).not.toBe(0.5)
expect(view.getFloat64(1, true)).not.toBe(0.5)
}
it("should provide `setInt8`") {
val view = new DataView(new ArrayBuffer(4))
view.setInt8(0, 1)
view.setInt8(1, 127)
view.setInt8(2, -20)
view.setInt8(3, -50)
expect(view.getUint8(0)).toBe(0x01)
expect(view.getUint8(1)).toBe(0x7F)
expect(view.getUint8(2)).toBe(0xEC)
expect(view.getUint8(3)).toBe(0xCE)
}
it("should provide `setUint8`") {
val view = new DataView(new ArrayBuffer(4))
view.setUint8(0, 0x01)
view.setUint8(1, 0xFC)
view.setUint8(2, 0x4D)
view.setUint8(3, 0x8C)
expect(view.getInt8(0)).toBe(1)
expect(view.getInt8(1)).toBe(-4)
expect(view.getInt8(2)).toBe(0x4D)
expect(view.getInt8(3)).toBe(-116)
}
it("should provide `setInt16`") {
val view = new DataView(new ArrayBuffer(4))
view.setInt16(0, 0x7F3B, true)
view.setInt16(2, -1)
expect(view.getUint8(0)).toBe(0x3B)
expect(view.getUint8(1)).toBe(0x7F)
expect(view.getUint8(2)).toBe(0xFF)
expect(view.getUint8(3)).toBe(0xFF)
}
it("should provide `setUint16`") {
val view = new DataView(new ArrayBuffer(4))
view.setUint16(0, 0x7F3B, true)
view.setUint16(2, 0xFCBA)
expect(view.getUint8(0)).toBe(0x3B)
expect(view.getUint8(1)).toBe(0x7F)
expect(view.getUint8(2)).toBe(0xFC)
expect(view.getUint8(3)).toBe(0xBA)
view.setUint16(1, 0x03BC)
expect(view.getUint8(0)).toBe(0x3B)
expect(view.getUint8(1)).toBe(0x03)
expect(view.getUint8(2)).toBe(0xBC)
expect(view.getUint8(3)).toBe(0xBA)
}
it("should provide `setInt32`") {
val view = new DataView(new ArrayBuffer(8))
view.setInt32(0, 0x7F3B8342, true)
view.setInt32(3, 0xFCBA1020)
expect(view.getUint8(0)).toBe(0x42)
expect(view.getUint8(1)).toBe(0x83)
expect(view.getUint8(2)).toBe(0x3B)
expect(view.getUint8(3)).toBe(0xFC)
expect(view.getUint8(4)).toBe(0xBA)
expect(view.getUint8(5)).toBe(0x10)
expect(view.getUint8(6)).toBe(0x20)
expect(view.getUint8(7)).toBe(0x00)
}
it("should provide `setUint32`") {
val view = new DataView(new ArrayBuffer(8))
view.setUint32(0, 0x7F3B8342, true)
view.setUint32(3, 0xFCBA1020L.toDouble)
expect(view.getUint8(0)).toBe(0x42)
expect(view.getUint8(1)).toBe(0x83)
expect(view.getUint8(2)).toBe(0x3B)
expect(view.getUint8(3)).toBe(0xFC)
expect(view.getUint8(4)).toBe(0xBA)
expect(view.getUint8(5)).toBe(0x10)
expect(view.getUint8(6)).toBe(0x20)
expect(view.getUint8(7)).toBe(0x00)
}
it("should provide `setFloat32`") {
val view = new DataView(new ArrayBuffer(5))
view.setFloat32(0, 0.1f)
view.setFloat32(1, 0.4f)
expect(view.getFloat32(1)).toBeCloseTo(0.4, 7)
expect(view.getFloat32(0)).not.toBeCloseTo(0.1, 7)
view.setFloat32(0, 0.1f, true)
view.setFloat32(1, 0.4f, true)
expect(view.getFloat32(0, true)).not.toBeCloseTo(0.1, 7)
expect(view.getFloat32(1, true)).toBeCloseTo(0.4, 7)
}
it("should provide `getFloat64`") {
val view = new DataView(new ArrayBuffer(9))
view.setFloat64(0, 0.5)
view.setFloat64(1, 0.6)
expect(view.getFloat64(0)).not.toBe(0.5)
expect(view.getFloat64(1)).toBe(0.6)
view.setFloat64(0, 0.5, true)
view.setFloat64(1, 0.6, true)
expect(view.getFloat64(0, true)).not.toBe(0.5)
expect(view.getFloat64(1, true)).toBe(0.6)
}
}
}