import { MortonOrder } from "../../Source/Cesium.js"; describe("Core/MortonOrder", function () { it("encode2D throws for undefined inputs", function () { expect(function () { return MortonOrder.encode2D(undefined, 0); }).toThrowDeveloperError(); expect(function () { return MortonOrder.encode2D(0, undefined); }).toThrowDeveloperError(); }); it("encode2D throws for out of range inputs", function () { expect(function () { return MortonOrder.encode2D(-1, 0); }).toThrowDeveloperError(); expect(function () { return MortonOrder.encode2D(0, -1); }).toThrowDeveloperError(); expect(function () { return MortonOrder.encode2D(65536, 0); // 2^16 }).toThrowDeveloperError(); expect(function () { return MortonOrder.encode2D(0, 65536); // 2^16 }).toThrowDeveloperError(); }); it("encode2D works", function () { expect(MortonOrder.encode2D(0, 0)).toEqual(0); // binary: 000 expect(MortonOrder.encode2D(1, 0)).toEqual(1); // binary: 001 expect(MortonOrder.encode2D(0, 1)).toEqual(2); // binary: 010 expect(MortonOrder.encode2D(1, 1)).toEqual(3); // binary: 011 expect(MortonOrder.encode2D(2, 0)).toEqual(4); // binary: 100 expect(MortonOrder.encode2D(3, 0)).toEqual(5); // binary: 101 expect(MortonOrder.encode2D(2, 1)).toEqual(6); // binary: 110 expect(MortonOrder.encode2D(3, 1)).toEqual(7); // binary: 111 expect(MortonOrder.encode2D(7, 5)).toEqual(55); // binary: 110111 // largest 16-bit unsigned integer inputs ((2^16)-1) result in largest 32-bit unsigned integer output ((2^32)-1) expect(MortonOrder.encode2D(65535, 65535)).toEqual(4294967295); // binary: 11111111111111111111111111111111 expect(MortonOrder.encode2D(65535, 0)).toEqual(1431655765); ////// binary: 1010101010101010101010101010101 expect(MortonOrder.encode2D(0, 65535)).toEqual(2863311530); ////// binary: 10101010101010101010101010101010 }); it("decode2D throws for undefined input", function () { expect(function () { return MortonOrder.decode2D(undefined); }).toThrowDeveloperError(); }); it("decode2D throws for out of range input", function () { expect(function () { return MortonOrder.decode2D(-1); }).toThrowDeveloperError(); expect(function () { return MortonOrder.decode2D(4294967296); // 2^32 }).toThrowDeveloperError(); }); it("decode2D uses result parameter", function () { var array = new Array(2); var result = MortonOrder.decode2D(0, array); expect(result).toBe(array); }); it("decode2D works", function () { expect(MortonOrder.decode2D(0)).toEqual([0, 0]); // binary: 000 expect(MortonOrder.decode2D(1)).toEqual([1, 0]); // binary: 001 expect(MortonOrder.decode2D(2)).toEqual([0, 1]); // binary: 010 expect(MortonOrder.decode2D(3)).toEqual([1, 1]); // binary: 011 expect(MortonOrder.decode2D(4)).toEqual([2, 0]); // binary: 100 expect(MortonOrder.decode2D(5)).toEqual([3, 0]); // binary: 101 expect(MortonOrder.decode2D(6)).toEqual([2, 1]); // binary: 110 expect(MortonOrder.decode2D(7)).toEqual([3, 1]); // binary: 111 expect(MortonOrder.decode2D(55)).toEqual([7, 5]); // binary: 110111 // largest 32-bit unsigned integer input ((2^32)-1) results in largest 16-bit unsigned integer outputs ((2^16)-1) expect(MortonOrder.decode2D(4294967295)).toEqual([65535, 65535]); // binary: 11111111111111111111111111111111 expect(MortonOrder.decode2D(1431655765)).toEqual([65535, 0]); ////// binary: 1010101010101010101010101010101 expect(MortonOrder.decode2D(2863311530)).toEqual([0, 65535]); ////// binary: 10101010101010101010101010101010 }); it("encode3D throws for undefined inputs", function () { expect(function () { return MortonOrder.encode3D(undefined, 0, 0); }).toThrowDeveloperError(); expect(function () { return MortonOrder.encode3D(0, undefined, 0); }).toThrowDeveloperError(); expect(function () { return MortonOrder.encode3D(0, 0, undefined); }).toThrowDeveloperError(); }); it("encode3D throws for out of range inputs", function () { expect(function () { return MortonOrder.encode3D(-1, 0, 0); }).toThrowDeveloperError(); expect(function () { return MortonOrder.encode3D(0, -1, 0); }).toThrowDeveloperError(); expect(function () { return MortonOrder.encode3D(0, 0, -1); }).toThrowDeveloperError(); expect(function () { return MortonOrder.encode3D(1024, 0, 0); // 2^10 }).toThrowDeveloperError(); expect(function () { return MortonOrder.encode3D(0, 1024, 0); // 2^10 }).toThrowDeveloperError(); expect(function () { return MortonOrder.encode3D(0, 0, 1024); // 2^10 }).toThrowDeveloperError(); }); it("encode3D works", function () { expect(MortonOrder.encode3D(0, 0, 0)).toEqual(0); // binary: 000 expect(MortonOrder.encode3D(1, 0, 0)).toEqual(1); // binary: 001 expect(MortonOrder.encode3D(0, 1, 0)).toEqual(2); // binary: 010 expect(MortonOrder.encode3D(1, 1, 0)).toEqual(3); // binary: 011 expect(MortonOrder.encode3D(0, 0, 1)).toEqual(4); // binary: 100 expect(MortonOrder.encode3D(1, 0, 1)).toEqual(5); // binary: 101 expect(MortonOrder.encode3D(0, 1, 1)).toEqual(6); // binary: 110 expect(MortonOrder.encode3D(1, 1, 1)).toEqual(7); // binary: 111 expect(MortonOrder.encode3D(1, 3, 3)).toEqual(55); // binary: 110111 // largest 10-bit unsigned integer inputs ((2^10)-1) result in largest 30-bit unsigned integer output ((2^30)-1) expect(MortonOrder.encode3D(1023, 1023, 1023)).toEqual(1073741823); // binary: 111111111111111111111111111111 expect(MortonOrder.encode3D(1023, 0, 0)).toEqual(153391689); ///////// binary: 1001001001001001001001001001 expect(MortonOrder.encode3D(0, 1023, 0)).toEqual(306783378); ///////// binary: 10010010010010010010010010010 expect(MortonOrder.encode3D(0, 0, 1023)).toEqual(613566756); ///////// binary: 100100100100100100100100100100 }); it("decode3D throws for undefined input", function () { expect(function () { return MortonOrder.decode3D(undefined); }).toThrowDeveloperError(); }); it("decode3D throws for out of range input", function () { expect(function () { return MortonOrder.decode3D(-1); }).toThrowDeveloperError(); expect(function () { return MortonOrder.decode3D(1073741824); // 2^30 }).toThrowDeveloperError(); }); it("decode3D uses result parameter", function () { var array = new Array(3); var result = MortonOrder.decode3D(0, array); expect(result).toBe(array); }); it("decode3D works", function () { expect(MortonOrder.decode3D(0)).toEqual([0, 0, 0]); // binary: 000 expect(MortonOrder.decode3D(1)).toEqual([1, 0, 0]); // binary: 001 expect(MortonOrder.decode3D(2)).toEqual([0, 1, 0]); // binary: 010 expect(MortonOrder.decode3D(3)).toEqual([1, 1, 0]); // binary: 011 expect(MortonOrder.decode3D(4)).toEqual([0, 0, 1]); // binary: 100 expect(MortonOrder.decode3D(5)).toEqual([1, 0, 1]); // binary: 101 expect(MortonOrder.decode3D(6)).toEqual([0, 1, 1]); // binary: 110 expect(MortonOrder.decode3D(7)).toEqual([1, 1, 1]); // binary: 111 expect(MortonOrder.decode3D(55)).toEqual([1, 3, 3]); // binary: 110111 // largest 30-bit unsigned integer input ((2^30)-1) results in largest 10-bit unsigned integer outputs ((2^10)-1) expect(MortonOrder.decode3D(1073741823)).toEqual([1023, 1023, 1023]); // binary: 111111111111111111111111111111 expect(MortonOrder.decode3D(153391689)).toEqual([1023, 0, 0]); ///////// binary: 1001001001001001001001001001 expect(MortonOrder.decode3D(306783378)).toEqual([0, 1023, 0]); ///////// binary: 10010010010010010010010010010 expect(MortonOrder.decode3D(613566756)).toEqual([0, 0, 1023]); ///////// binary: 100100100100100100100100100100 }); });