summaryrefslogblamecommitdiff
path: root/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/typedarray/DataViewTest.scala
blob: 76c563918eb4bcae82e50a288c85c6c63b239af3 (plain) (tree)


















































































































































































































































































                                                                          
/*                     __                                               *\
**     ________ ___   / /  ___      __ ____  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)
    }

  }

}