@maplibre/mlt 1.1.5 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/dist/decoding/bigEndianDecode.d.ts +13 -0
  2. package/dist/decoding/bigEndianDecode.js +50 -0
  3. package/dist/decoding/bigEndianDecode.js.map +1 -0
  4. package/dist/decoding/decodingTestUtils.d.ts +1 -1
  5. package/dist/decoding/decodingTestUtils.js.map +1 -1
  6. package/dist/decoding/decodingUtils.js +4 -2
  7. package/dist/decoding/decodingUtils.js.map +1 -1
  8. package/dist/decoding/fastPforDecoder.d.ts +48 -0
  9. package/dist/decoding/fastPforDecoder.js +482 -0
  10. package/dist/decoding/fastPforDecoder.js.map +1 -0
  11. package/dist/decoding/fastPforShared.d.ts +9 -0
  12. package/dist/decoding/fastPforShared.js +29 -0
  13. package/dist/decoding/fastPforShared.js.map +1 -0
  14. package/dist/decoding/fastPforUnpack.d.ts +23 -0
  15. package/dist/decoding/fastPforUnpack.js +910 -0
  16. package/dist/decoding/fastPforUnpack.js.map +1 -0
  17. package/dist/decoding/geometryDecoder.d.ts +2 -2
  18. package/dist/decoding/geometryDecoder.js +11 -8
  19. package/dist/decoding/geometryDecoder.js.map +1 -1
  20. package/dist/decoding/integerDecodingUtils.d.ts +14 -10
  21. package/dist/decoding/integerDecodingUtils.js +44 -22
  22. package/dist/decoding/integerDecodingUtils.js.map +1 -1
  23. package/dist/decoding/integerStreamDecoder.d.ts +1 -1
  24. package/dist/decoding/integerStreamDecoder.js +13 -6
  25. package/dist/decoding/integerStreamDecoder.js.map +1 -1
  26. package/dist/decoding/propertyDecoder.js +10 -14
  27. package/dist/decoding/propertyDecoder.js.map +1 -1
  28. package/dist/decoding/stringDecoder.js +2 -11
  29. package/dist/decoding/stringDecoder.js.map +1 -1
  30. package/dist/encoding/bigEndianEncode.d.ts +7 -0
  31. package/dist/encoding/bigEndianEncode.js +16 -0
  32. package/dist/encoding/bigEndianEncode.js.map +1 -0
  33. package/dist/encoding/constGeometryVectorEncoder.d.ts +19 -0
  34. package/dist/encoding/constGeometryVectorEncoder.js +248 -0
  35. package/dist/encoding/constGeometryVectorEncoder.js.map +1 -0
  36. package/dist/encoding/encodingUtils.d.ts +1 -1
  37. package/dist/encoding/encodingUtils.js +2 -2
  38. package/dist/encoding/encodingUtils.js.map +1 -1
  39. package/dist/encoding/fastPforEncoder.d.ts +19 -0
  40. package/dist/encoding/fastPforEncoder.js +310 -0
  41. package/dist/encoding/fastPforEncoder.js.map +1 -0
  42. package/dist/encoding/integerEncodingUtils.d.ts +7 -7
  43. package/dist/encoding/integerEncodingUtils.js +25 -17
  44. package/dist/encoding/integerEncodingUtils.js.map +1 -1
  45. package/dist/encoding/integerStreamEncoder.d.ts +1 -1
  46. package/dist/encoding/integerStreamEncoder.js +5 -5
  47. package/dist/encoding/integerStreamEncoder.js.map +1 -1
  48. package/dist/encoding/packNullableUtils.d.ts +1 -1
  49. package/dist/encoding/packNullableUtils.js.map +1 -1
  50. package/dist/encoding/propertyEncoder.d.ts +1 -1
  51. package/dist/encoding/propertyEncoder.js +8 -8
  52. package/dist/encoding/propertyEncoder.js.map +1 -1
  53. package/dist/encoding/stringEncoder.js +3 -3
  54. package/dist/encoding/stringEncoder.js.map +1 -1
  55. package/dist/encoding/zOrderCurveEncoder.js +1 -1
  56. package/dist/encoding/zOrderCurveEncoder.js.map +1 -1
  57. package/dist/metadata/tile/logicalStreamType.d.ts +3 -3
  58. package/dist/metadata/tile/logicalStreamType.js.map +1 -1
  59. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.d.ts +1 -1
  60. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js.map +1 -1
  61. package/dist/metadata/tileset/typeMap.d.ts +10 -2
  62. package/dist/metadata/tileset/typeMap.js +25 -15
  63. package/dist/metadata/tileset/typeMap.js.map +1 -1
  64. package/dist/mltDecoder.js +29 -26
  65. package/dist/mltDecoder.js.map +1 -1
  66. package/dist/mltMetadata.js.map +1 -1
  67. package/dist/vector/constant/intConstVector.d.ts +1 -1
  68. package/dist/vector/constant/intConstVector.js +1 -1
  69. package/dist/vector/constant/intConstVector.js.map +1 -1
  70. package/dist/vector/constant/longConstVector.d.ts +1 -1
  71. package/dist/vector/constant/longConstVector.js +1 -1
  72. package/dist/vector/constant/longConstVector.js.map +1 -1
  73. package/dist/vector/dictionary/stringDictionaryVector.d.ts +0 -1
  74. package/dist/vector/dictionary/stringDictionaryVector.js +0 -2
  75. package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -1
  76. package/dist/vector/featureTable.d.ts +4 -5
  77. package/dist/vector/featureTable.js +2 -29
  78. package/dist/vector/featureTable.js.map +1 -1
  79. package/dist/vector/filter/flatSelectionVector.d.ts +1 -1
  80. package/dist/vector/filter/flatSelectionVector.js.map +1 -1
  81. package/dist/vector/filter/selectionVectorUtils.d.ts +1 -1
  82. package/dist/vector/filter/selectionVectorUtils.js.map +1 -1
  83. package/dist/vector/filter/sequenceSelectionVector.d.ts +1 -1
  84. package/dist/vector/filter/sequenceSelectionVector.js.map +1 -1
  85. package/dist/vector/flat/stringFlatVector.d.ts +0 -1
  86. package/dist/vector/flat/stringFlatVector.js +0 -2
  87. package/dist/vector/flat/stringFlatVector.js.map +1 -1
  88. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.d.ts +0 -2
  89. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js +0 -36
  90. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -1
  91. package/dist/vector/geometry/constGeometryVector.d.ts +2 -2
  92. package/dist/vector/geometry/constGeometryVector.js +1 -1
  93. package/dist/vector/geometry/constGeometryVector.js.map +1 -1
  94. package/dist/vector/geometry/constGpuVector.d.ts +2 -2
  95. package/dist/vector/geometry/constGpuVector.js +1 -1
  96. package/dist/vector/geometry/constGpuVector.js.map +1 -1
  97. package/dist/vector/geometry/flatGeometryVector.d.ts +1 -1
  98. package/dist/vector/geometry/flatGeometryVector.js.map +1 -1
  99. package/dist/vector/geometry/flatGpuVector.d.ts +1 -1
  100. package/dist/vector/geometry/flatGpuVector.js.map +1 -1
  101. package/dist/vector/geometry/geometryType.js.map +1 -1
  102. package/dist/vector/geometry/geometryVector.d.ts +4 -5
  103. package/dist/vector/geometry/geometryVector.js +0 -8
  104. package/dist/vector/geometry/geometryVector.js.map +1 -1
  105. package/dist/vector/geometry/geometryVectorConverter.d.ts +1 -1
  106. package/dist/vector/geometry/geometryVectorConverter.js +167 -211
  107. package/dist/vector/geometry/geometryVectorConverter.js.map +1 -1
  108. package/dist/vector/geometry/gpuVector.d.ts +2 -2
  109. package/dist/vector/geometry/gpuVector.js.map +1 -1
  110. package/dist/vector/geometry/topologyVector.d.ts +5 -9
  111. package/dist/vector/geometry/topologyVector.js +1 -19
  112. package/dist/vector/geometry/topologyVector.js.map +1 -1
  113. package/dist/vector/geometry/vertexBufferType.js.map +1 -1
  114. package/dist/vector/intVector.d.ts +7 -7
  115. package/dist/vector/intVector.js.map +1 -1
  116. package/dist/vector/vector.js +1 -1
  117. package/dist/vector/vector.js.map +1 -1
  118. package/dist/vector/vectorType.js.map +1 -1
  119. package/package.json +9 -10
  120. package/dist/decoding/decodingUtils.spec.d.ts +0 -1
  121. package/dist/decoding/decodingUtils.spec.js +0 -141
  122. package/dist/decoding/decodingUtils.spec.js.map +0 -1
  123. package/dist/decoding/fsstDecoder.spec.d.ts +0 -1
  124. package/dist/decoding/fsstDecoder.spec.js +0 -57
  125. package/dist/decoding/fsstDecoder.spec.js.map +0 -1
  126. package/dist/decoding/integerDecodingUtils.spec.d.ts +0 -1
  127. package/dist/decoding/integerDecodingUtils.spec.js +0 -300
  128. package/dist/decoding/integerDecodingUtils.spec.js.map +0 -1
  129. package/dist/decoding/integerStreamDecoder.spec.d.ts +0 -1
  130. package/dist/decoding/integerStreamDecoder.spec.js +0 -402
  131. package/dist/decoding/integerStreamDecoder.spec.js.map +0 -1
  132. package/dist/decoding/propertyDecoder.spec.d.ts +0 -1
  133. package/dist/decoding/propertyDecoder.spec.js +0 -448
  134. package/dist/decoding/propertyDecoder.spec.js.map +0 -1
  135. package/dist/decoding/stringDecoder.spec.d.ts +0 -1
  136. package/dist/decoding/stringDecoder.spec.js +0 -387
  137. package/dist/decoding/stringDecoder.spec.js.map +0 -1
  138. package/dist/decoding/unpackNullableUtils.spec.d.ts +0 -1
  139. package/dist/decoding/unpackNullableUtils.spec.js +0 -71
  140. package/dist/decoding/unpackNullableUtils.spec.js.map +0 -1
  141. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.d.ts +0 -1
  142. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js +0 -142
  143. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js.map +0 -1
  144. package/dist/mltDecoder.spec.d.ts +0 -1
  145. package/dist/mltDecoder.spec.js +0 -152
  146. package/dist/mltDecoder.spec.js.map +0 -1
  147. package/dist/vector/filter/flatSelectionVector.spec.d.ts +0 -1
  148. package/dist/vector/filter/flatSelectionVector.spec.js +0 -51
  149. package/dist/vector/filter/flatSelectionVector.spec.js.map +0 -1
  150. package/dist/vector/filter/selectionVectorUtil.spec.d.ts +0 -1
  151. package/dist/vector/filter/selectionVectorUtil.spec.js +0 -154
  152. package/dist/vector/filter/selectionVectorUtil.spec.js.map +0 -1
  153. package/dist/vector/filter/sequenceSelectionVector.spec.d.ts +0 -1
  154. package/dist/vector/filter/sequenceSelectionVector.spec.js +0 -115
  155. package/dist/vector/filter/sequenceSelectionVector.spec.js.map +0 -1
  156. package/dist/vector/flat/floatFlatVector.spec.d.ts +0 -1
  157. package/dist/vector/flat/floatFlatVector.spec.js +0 -14
  158. package/dist/vector/flat/floatFlatVector.spec.js.map +0 -1
  159. package/dist/vector/flat/intFlatVector.spec.d.ts +0 -1
  160. package/dist/vector/flat/intFlatVector.spec.js +0 -15
  161. package/dist/vector/flat/intFlatVector.spec.js.map +0 -1
  162. package/dist/vector/flat/longFlatVector.spec.d.ts +0 -1
  163. package/dist/vector/flat/longFlatVector.spec.js +0 -14
  164. package/dist/vector/flat/longFlatVector.spec.js.map +0 -1
  165. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.d.ts +0 -1
  166. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js +0 -28
  167. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js.map +0 -1
  168. package/dist/vector/geometry/zOrderCurve.spec.d.ts +0 -1
  169. package/dist/vector/geometry/zOrderCurve.spec.js +0 -25
  170. package/dist/vector/geometry/zOrderCurve.spec.js.map +0 -1
  171. package/dist/vector/sequence/longSequenceVektor.spec.d.ts +0 -1
  172. package/dist/vector/sequence/longSequenceVektor.spec.js +0 -11
  173. package/dist/vector/sequence/longSequenceVektor.spec.js.map +0 -1
@@ -1,448 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { decodePropertyColumn } from "./propertyDecoder";
3
- import IntWrapper from "./intWrapper";
4
- import { ScalarType } from "../metadata/tileset/tilesetMetadata";
5
- import { IntFlatVector } from "../vector/flat/intFlatVector";
6
- import { LongFlatVector } from "../vector/flat/longFlatVector";
7
- import { FloatFlatVector } from "../vector/flat/floatFlatVector";
8
- import { DoubleFlatVector } from "../vector/flat/doubleFlatVector";
9
- import { BooleanFlatVector } from "../vector/flat/booleanFlatVector";
10
- import { IntSequenceVector } from "../vector/sequence/intSequenceVector";
11
- import { LongSequenceVector } from "../vector/sequence/longSequenceVector";
12
- import { IntConstVector } from "../vector/constant/intConstVector";
13
- import { LongConstVector } from "../vector/constant/longConstVector";
14
- import { StringDictionaryVector } from "../vector/dictionary/stringDictionaryVector";
15
- import { createColumnMetadataForStruct, encodeSharedDictionary, encodeStructField } from "./decodingTestUtils";
16
- import { concatenateBuffers } from "../encoding/encodingUtils";
17
- import { encodeInt32NoneColumn, encodeInt32DeltaColumn, encodeInt32RleColumn, encodeInt32DeltaRleColumn, encodeUint32Column, encodeInt64NoneColumn, encodeInt64DeltaColumn, encodeInt64RleColumn, encodeInt64DeltaRleColumn, encodeInt64NullableColumn, encodeUint64Column, encodeUint64NullableColumn, encodeFloatColumn, encodeFloatNullableColumn, encodeDoubleColumn, encodeDoubleNullableColumn, encodeBooleanColumn, encodeBooleanNullableColumn, encodeInt32NullableColumn, } from "../encoding/propertyEncoder";
18
- function createColumnMetadata(name, scalarType, nullable = false) {
19
- return {
20
- name: name,
21
- nullable: nullable,
22
- type: "scalarType",
23
- scalarType: {
24
- physicalType: scalarType,
25
- type: "physicalType",
26
- },
27
- };
28
- }
29
- describe("decodePropertyColumn - INT_32", () => {
30
- it("should decode INT_32 column with NONE encoding (signed)", () => {
31
- const expectedValues = new Int32Array([2, -4, 6]);
32
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.INT_32, false);
33
- const encodedData = encodeInt32NoneColumn(expectedValues);
34
- const offset = new IntWrapper(0);
35
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);
36
- expect(result).toBeInstanceOf(IntFlatVector);
37
- const resultVec = result;
38
- for (let i = 0; i < expectedValues.length; i++) {
39
- expect(resultVec.getValue(i)).toBe(expectedValues[i]);
40
- }
41
- });
42
- it("should decode INT_32 column with DELTA encoding", () => {
43
- const expectedValues = new Int32Array([2, 4, 6]);
44
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.INT_32, false);
45
- const encodedData = encodeInt32DeltaColumn(expectedValues);
46
- const offset = new IntWrapper(0);
47
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);
48
- expect(result).toBeInstanceOf(IntFlatVector);
49
- const resultVec = result;
50
- for (let i = 0; i < expectedValues.length; i++) {
51
- expect(resultVec.getValue(i)).toBe(expectedValues[i]);
52
- }
53
- });
54
- it("should decode INT_32 column with RLE encoding", () => {
55
- const expectedValues = new Int32Array([100, 100, 100, -50, -50]);
56
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.INT_32, false);
57
- const encodedData = encodeInt32RleColumn([
58
- [3, 100],
59
- [2, -50],
60
- ]);
61
- const offset = new IntWrapper(0);
62
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);
63
- expect(result).toBeInstanceOf(IntFlatVector);
64
- const resultVec = result;
65
- for (let i = 0; i < expectedValues.length; i++) {
66
- expect(resultVec.getValue(i)).toBe(expectedValues[i]);
67
- }
68
- });
69
- it("should decode INT_32 column with DELTA+RLE encoding", () => {
70
- const expectedValues = new Int32Array([10, 12, 14, 15, 16]);
71
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.INT_32, false);
72
- const encodedData = encodeInt32DeltaRleColumn([
73
- [1, 10],
74
- [2, 2],
75
- [2, 1],
76
- ]);
77
- const offset = new IntWrapper(0);
78
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);
79
- expect(result).toBeInstanceOf(IntFlatVector);
80
- const resultVec = result;
81
- for (let i = 0; i < expectedValues.length; i++) {
82
- expect(resultVec.getValue(i)).toBe(expectedValues[i]);
83
- }
84
- });
85
- it("should decode nullable INT_32 column with null values", () => {
86
- const expectedValues = [2, null, -4, null, 6];
87
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.INT_32, true);
88
- const encodedData = encodeInt32NullableColumn(expectedValues);
89
- const offset = new IntWrapper(0);
90
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);
91
- expect(result).toBeInstanceOf(IntFlatVector);
92
- const resultVec = result;
93
- for (let i = 0; i < expectedValues.length; i++) {
94
- expect(resultVec.getValue(i)).toBe(expectedValues[i]);
95
- }
96
- });
97
- it("should decode INT_32 SEQUENCE vector", () => {
98
- const numValues = 5;
99
- const value = 10;
100
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.INT_32, false);
101
- const encodedData = encodeInt32DeltaRleColumn([[numValues, value]]);
102
- const offset = new IntWrapper(0);
103
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);
104
- expect(result).toBeInstanceOf(IntSequenceVector);
105
- const seqVec = result;
106
- expect(seqVec.getValue(0)).toBe(value);
107
- expect(seqVec.getValue(1)).toBe(value + value);
108
- expect(seqVec.getValue(2)).toBe(value + value * 2);
109
- });
110
- it("should decode INT_32 CONST vector", () => {
111
- const numValues = 5;
112
- const constValue = 42;
113
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.INT_32, false);
114
- const encodedData = encodeInt32RleColumn([[numValues, constValue]]);
115
- const offset = new IntWrapper(0);
116
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);
117
- expect(result).toBeInstanceOf(IntConstVector);
118
- const constVec = result;
119
- expect(constVec.getValue(0)).toBe(constValue);
120
- expect(constVec.getValue(4)).toBe(constValue);
121
- });
122
- });
123
- describe("decodePropertyColumn - UINT_32", () => {
124
- it("should decode UINT_32 column with NONE encoding (unsigned)", () => {
125
- const expectedValues = new Uint32Array([2, 4, 6, 100]);
126
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.UINT_32, false);
127
- const encodedData = encodeUint32Column(expectedValues);
128
- const offset = new IntWrapper(0);
129
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);
130
- expect(result).toBeInstanceOf(IntFlatVector);
131
- const resultVec = result;
132
- for (let i = 0; i < expectedValues.length; i++) {
133
- expect(resultVec.getValue(i)).toBe(expectedValues[i]);
134
- }
135
- });
136
- });
137
- describe("decodePropertyColumn - INT_64", () => {
138
- it("should decode INT_64 column with NONE encoding (signed)", () => {
139
- const expectedValues = new BigInt64Array([2n, -4n, 6n]);
140
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.INT_64, false);
141
- const encodedData = encodeInt64NoneColumn(expectedValues);
142
- const offset = new IntWrapper(0);
143
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);
144
- expect(result).toBeInstanceOf(LongFlatVector);
145
- const resultVec = result;
146
- for (let i = 0; i < expectedValues.length; i++) {
147
- expect(resultVec.getValue(i)).toBe(expectedValues[i]);
148
- }
149
- });
150
- it("should decode INT_64 column with DELTA encoding", () => {
151
- const expectedValues = new BigInt64Array([2n, 4n, 6n]);
152
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.INT_64, false);
153
- const encodedData = encodeInt64DeltaColumn(expectedValues);
154
- const offset = new IntWrapper(0);
155
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);
156
- expect(result).toBeInstanceOf(LongFlatVector);
157
- const resultVec = result;
158
- for (let i = 0; i < expectedValues.length; i++) {
159
- expect(resultVec.getValue(i)).toBe(expectedValues[i]);
160
- }
161
- });
162
- it("should decode INT_64 column with RLE encoding", () => {
163
- const expectedValues = new BigInt64Array([100n, 100n, 100n, -50n, -50n]);
164
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.INT_64, false);
165
- const encodedData = encodeInt64RleColumn([
166
- [3, 100n],
167
- [2, -50n],
168
- ]);
169
- const offset = new IntWrapper(0);
170
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);
171
- expect(result).toBeInstanceOf(LongFlatVector);
172
- const resultVec = result;
173
- for (let i = 0; i < expectedValues.length; i++) {
174
- expect(resultVec.getValue(i)).toBe(expectedValues[i]);
175
- }
176
- });
177
- it("should decode INT_64 column with DELTA+RLE encoding", () => {
178
- const expectedValues = new BigInt64Array([10n, 12n, 14n, 15n, 16n]);
179
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.INT_64, false);
180
- const encodedData = encodeInt64DeltaRleColumn([
181
- [1, 10n],
182
- [2, 2n],
183
- [2, 1n],
184
- ]);
185
- const offset = new IntWrapper(0);
186
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);
187
- expect(result).toBeInstanceOf(LongFlatVector);
188
- const resultVec = result;
189
- for (let i = 0; i < expectedValues.length; i++) {
190
- expect(resultVec.getValue(i)).toBe(expectedValues[i]);
191
- }
192
- });
193
- it("should decode nullable INT_64 column with null values", () => {
194
- const expectedValues = [2n, null, -4n, null, 6n];
195
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.INT_64, true);
196
- const encodedData = encodeInt64NullableColumn(expectedValues);
197
- const offset = new IntWrapper(0);
198
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);
199
- expect(result).toBeInstanceOf(LongFlatVector);
200
- const resultVec = result;
201
- for (let i = 0; i < expectedValues.length; i++) {
202
- expect(resultVec.getValue(i)).toBe(expectedValues[i]);
203
- }
204
- });
205
- it("should decode INT_64 SEQUENCE vector", () => {
206
- const numValues = 5;
207
- const value = 10n;
208
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.INT_64, false);
209
- const encodedData = encodeInt64DeltaRleColumn([[numValues, value]]);
210
- const offset = new IntWrapper(0);
211
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);
212
- expect(result).toBeInstanceOf(LongSequenceVector);
213
- const seqVec = result;
214
- expect(seqVec.getValue(0)).toBe(value);
215
- expect(seqVec.getValue(1)).toBe(value + value);
216
- expect(seqVec.getValue(2)).toBe(value + value * 2n);
217
- });
218
- it("should decode INT_64 CONST vector", () => {
219
- const numValues = 5;
220
- const constValue = 42n;
221
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.INT_64, false);
222
- const encodedData = encodeInt64RleColumn([[numValues, constValue]]);
223
- const offset = new IntWrapper(0);
224
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);
225
- expect(result).toBeInstanceOf(LongConstVector);
226
- const constVec = result;
227
- expect(constVec.getValue(0)).toBe(constValue);
228
- expect(constVec.getValue(4)).toBe(constValue);
229
- });
230
- });
231
- describe("decodePropertyColumn - UINT_64", () => {
232
- it("should decode UINT_64 column with NONE encoding (unsigned)", () => {
233
- const expectedValues = new BigUint64Array([2n, 4n, 6n, 100n]);
234
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.UINT_64, false);
235
- const encodedData = encodeUint64Column(expectedValues);
236
- const offset = new IntWrapper(0);
237
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);
238
- expect(result).toBeInstanceOf(LongFlatVector);
239
- const resultVec = result;
240
- for (let i = 0; i < expectedValues.length; i++) {
241
- expect(resultVec.getValue(i)).toBe(expectedValues[i]);
242
- }
243
- });
244
- it("should decode nullable UINT_64 column with null values", () => {
245
- const expectedValues = [2n, null, 4n, null, 6n];
246
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.UINT_64, true);
247
- const encodedData = encodeUint64NullableColumn(expectedValues);
248
- const offset = new IntWrapper(0);
249
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);
250
- expect(result).toBeInstanceOf(LongFlatVector);
251
- const resultVec = result;
252
- for (let i = 0; i < expectedValues.length; i++) {
253
- expect(resultVec.getValue(i)).toBe(expectedValues[i]);
254
- }
255
- });
256
- });
257
- describe("decodePropertyColumn - FLOAT", () => {
258
- it("should decode non-nullable FLOAT column", () => {
259
- const expectedValues = new Float32Array([1.5, 2.7, -3.14, 4.2]);
260
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.FLOAT, false);
261
- const encodedData = encodeFloatColumn(expectedValues);
262
- const offset = new IntWrapper(0);
263
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);
264
- expect(result).toBeInstanceOf(FloatFlatVector);
265
- const resultVec = result;
266
- expect(resultVec.size).toBe(expectedValues.length);
267
- for (let i = 0; i < expectedValues.length; i++) {
268
- expect(resultVec.getValue(i)).toBeCloseTo(expectedValues[i], 5);
269
- }
270
- });
271
- it("should decode nullable FLOAT column with null values", () => {
272
- const expectedValues = [1.5, null, 2.7, null, 3.14];
273
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.FLOAT, true);
274
- const encodedData = encodeFloatNullableColumn(expectedValues);
275
- const offset = new IntWrapper(0);
276
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);
277
- expect(result).toBeInstanceOf(FloatFlatVector);
278
- const resultVec = result;
279
- expect(resultVec.size).toBe(expectedValues.length);
280
- expect(resultVec.getValue(0)).toBeCloseTo(1.5, 5);
281
- expect(resultVec.getValue(1)).toBe(null); // null value
282
- expect(resultVec.getValue(2)).toBeCloseTo(2.7, 5);
283
- expect(resultVec.getValue(3)).toBe(null); // null value
284
- expect(resultVec.getValue(4)).toBeCloseTo(3.14, 5);
285
- });
286
- it("should handle offset correctly after decoding FLOAT column", () => {
287
- const expectedValues = new Float32Array([1.0, 2.0, 3.0]);
288
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.FLOAT, false);
289
- const encodedData = encodeFloatColumn(expectedValues);
290
- const offset = new IntWrapper(0);
291
- decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);
292
- // Verify offset was advanced correctly
293
- expect(offset.get()).toBe(encodedData.length);
294
- });
295
- });
296
- describe("decodePropertyColumn - BOOLEAN", () => {
297
- it("should decode non-nullable BOOLEAN column with RLE", () => {
298
- const booleanValues = [true, false, true, true, false, false, false, true];
299
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.BOOLEAN, false);
300
- const encodedData = encodeBooleanColumn(booleanValues);
301
- const offset = new IntWrapper(0);
302
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, booleanValues.length);
303
- expect(result).toBeInstanceOf(BooleanFlatVector);
304
- const boolVec = result;
305
- for (let i = 0; i < booleanValues.length; i++) {
306
- expect(boolVec.getValue(i)).toBe(booleanValues[i]);
307
- }
308
- });
309
- it("should decode nullable BOOLEAN column with RLE and present stream", () => {
310
- const expectedValues = [true, null, false, null, true];
311
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.BOOLEAN, true);
312
- const encodedData = encodeBooleanNullableColumn(expectedValues);
313
- const offset = new IntWrapper(0);
314
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);
315
- expect(result).toBeInstanceOf(BooleanFlatVector);
316
- const boolVec = result;
317
- expect(boolVec.getValue(0)).toBe(true);
318
- expect(boolVec.getValue(1)).toBe(null);
319
- expect(boolVec.getValue(2)).toBe(false);
320
- expect(boolVec.getValue(3)).toBe(null);
321
- expect(boolVec.getValue(4)).toBe(true);
322
- });
323
- });
324
- describe("decodePropertyColumn - DOUBLE", () => {
325
- it("should decode non-nullable DOUBLE column", () => {
326
- const expectedValues = new Float32Array([1.2345, 5.4321, 1.33742]);
327
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.DOUBLE, false);
328
- const encodedData = encodeDoubleColumn(expectedValues);
329
- const offset = new IntWrapper(0);
330
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);
331
- expect(result).toBeInstanceOf(DoubleFlatVector);
332
- const resultVec = result;
333
- expect(resultVec.size).toBe(expectedValues.length);
334
- for (let i = 0; i < expectedValues.length; i++) {
335
- expect(resultVec.getValue(i)).toBeCloseTo(expectedValues[i], 5);
336
- }
337
- });
338
- it("should decode nullable DOUBLE column with null values", () => {
339
- const expectedValues = [1.5, null, 2.7, null, 3.14159];
340
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.DOUBLE, true);
341
- const encodedData = encodeDoubleNullableColumn(expectedValues);
342
- const offset = new IntWrapper(0);
343
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);
344
- expect(result).toBeInstanceOf(DoubleFlatVector);
345
- const resultVec = result;
346
- expect(resultVec.size).toBe(expectedValues.length);
347
- expect(resultVec.getValue(0)).toBeCloseTo(1.5, 5);
348
- expect(resultVec.getValue(1)).toBe(null); // null value
349
- expect(resultVec.getValue(2)).toBeCloseTo(2.7, 5);
350
- expect(resultVec.getValue(3)).toBe(null); // null value
351
- expect(resultVec.getValue(4)).toBeCloseTo(3.14159, 5);
352
- });
353
- it("should handle offset correctly after decoding DOUBLE column", () => {
354
- const expectedValues = new Float32Array([1.33742, 1.2345, 5.4321]);
355
- const columnMetadata = createColumnMetadata("testColumn", ScalarType.DOUBLE, false);
356
- const encodedData = encodeDoubleColumn(expectedValues);
357
- const offset = new IntWrapper(0);
358
- decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);
359
- // Verify offset was advanced correctly
360
- expect(offset.get()).toBe(encodedData.length);
361
- });
362
- });
363
- describe("decodePropertyColumn - STRING", () => {
364
- describe("basic functionality", () => {
365
- it("should decode single field with shared dictionary", () => {
366
- const dictionaryStrings = ["apple", "banana", "peach", "date"];
367
- const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);
368
- const fieldStreams = encodeStructField([0, 1, 2, 3], [true, true, true, true]);
369
- const completeData = concatenateBuffers(lengthStream, dataStream, fieldStreams);
370
- const columnMetadata = createColumnMetadataForStruct("address", [{ name: "street" }]);
371
- const offset = new IntWrapper(0);
372
- const result = decodePropertyColumn(completeData, offset, columnMetadata, 1, dictionaryStrings.length);
373
- expect(result).toHaveLength(1);
374
- expect(result[0]).toBeInstanceOf(StringDictionaryVector);
375
- expect(result[0].name).toBe("address:street");
376
- for (let i = 0; i < dictionaryStrings.length; i++) {
377
- expect(result[0].getValue(i)).toBe(dictionaryStrings[i]);
378
- }
379
- });
380
- it("should decode shared dictionary when numStreams matches encoder output (3 + N*2)", () => {
381
- const dictionaryStrings = ["apple", "banana", "peach", "date"];
382
- const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);
383
- const fieldStreams = encodeStructField([0, 1, 2, 3], [true, true, true, true]);
384
- const completeData = concatenateBuffers(lengthStream, dataStream, fieldStreams);
385
- const columnMetadata = createColumnMetadataForStruct("address", [{ name: "street" }]);
386
- const offset = new IntWrapper(0);
387
- const result = decodePropertyColumn(completeData, offset, columnMetadata, 5, dictionaryStrings.length);
388
- expect(result).toHaveLength(1);
389
- expect(result[0]).toBeInstanceOf(StringDictionaryVector);
390
- expect(result[0].name).toBe("address:street");
391
- for (let i = 0; i < dictionaryStrings.length; i++) {
392
- expect(result[0].getValue(i)).toBe(dictionaryStrings[i]);
393
- }
394
- });
395
- });
396
- });
397
- describe("decodePropertyColumn - Edge Cases", () => {
398
- it("should filter columns with propertyColumnNames set", () => {
399
- const expectedValues = new Int32Array([1, 2, 3]);
400
- const columnMetadata = createColumnMetadata("includedColumn", ScalarType.INT_32, false);
401
- const encodedData = encodeInt32NoneColumn(expectedValues);
402
- const propertyColumnNames = new Set(["includedColumn"]);
403
- const offset = new IntWrapper(0);
404
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length, propertyColumnNames);
405
- expect(result).toBeInstanceOf(IntFlatVector);
406
- const resultVec = result;
407
- for (let i = 0; i < expectedValues.length; i++) {
408
- expect(resultVec.getValue(i)).toBe(expectedValues[i]);
409
- }
410
- });
411
- it("should skip column when not in propertyColumnNames filter", () => {
412
- const expectedValues = new Int32Array([1, 2, 3]);
413
- const columnMetadata = createColumnMetadata("excludedColumn", ScalarType.INT_32, false);
414
- const encodedData = encodeInt32NoneColumn(expectedValues);
415
- const propertyColumnNames = new Set(["someOtherColumn"]);
416
- const offset = new IntWrapper(0);
417
- const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length, propertyColumnNames);
418
- // Should return null and advance the offset past the skipped data
419
- expect(result).toBe(null);
420
- expect(offset.get()).toBe(encodedData.length);
421
- });
422
- it("should return null for empty columns (numStreams === 0)", () => {
423
- const columnMetadata = createColumnMetadata("emptyColumn", ScalarType.INT_32, false);
424
- const offset = new IntWrapper(0);
425
- const data = new Uint8Array(0);
426
- const result = decodePropertyColumn(data, offset, columnMetadata, 0, 0);
427
- expect(result).toBeNull();
428
- });
429
- it("should return null for complex type with numStreams === 0", () => {
430
- const columnMetadata = createColumnMetadataForStruct("structColumn", [
431
- { name: "field1" },
432
- { name: "field2" },
433
- ]);
434
- const offset = new IntWrapper(0);
435
- const data = new Uint8Array(0);
436
- const result = decodePropertyColumn(data, offset, columnMetadata, 0, 5);
437
- expect(result).toBeNull();
438
- });
439
- it("should throw error for unsupported data type", () => {
440
- const columnMetadata = createColumnMetadata("unsupportedColumn", ScalarType.INT_8, false);
441
- const encodedData = encodeInt32NoneColumn(new Int32Array([1, 2, 3]));
442
- const offset = new IntWrapper(0);
443
- expect(() => {
444
- decodePropertyColumn(encodedData, offset, columnMetadata, 1, 3);
445
- }).toThrow();
446
- });
447
- });
448
- //# sourceMappingURL=propertyDecoder.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"propertyDecoder.spec.js","sourceRoot":"","sources":["../../src/decoding/propertyDecoder.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { decodePropertyColumn } from \"./propertyDecoder\";\nimport IntWrapper from \"./intWrapper\";\nimport { ScalarType, type Column } from \"../metadata/tileset/tilesetMetadata\";\nimport { IntFlatVector } from \"../vector/flat/intFlatVector\";\nimport { LongFlatVector } from \"../vector/flat/longFlatVector\";\nimport { FloatFlatVector } from \"../vector/flat/floatFlatVector\";\nimport { DoubleFlatVector } from \"../vector/flat/doubleFlatVector\";\nimport { BooleanFlatVector } from \"../vector/flat/booleanFlatVector\";\nimport { IntSequenceVector } from \"../vector/sequence/intSequenceVector\";\nimport { LongSequenceVector } from \"../vector/sequence/longSequenceVector\";\nimport { IntConstVector } from \"../vector/constant/intConstVector\";\nimport { LongConstVector } from \"../vector/constant/longConstVector\";\nimport { StringDictionaryVector } from \"../vector/dictionary/stringDictionaryVector\";\nimport { createColumnMetadataForStruct, encodeSharedDictionary, encodeStructField } from \"./decodingTestUtils\";\nimport { concatenateBuffers } from \"../encoding/encodingUtils\";\nimport {\n encodeInt32NoneColumn,\n encodeInt32DeltaColumn,\n encodeInt32RleColumn,\n encodeInt32DeltaRleColumn,\n encodeUint32Column,\n encodeInt64NoneColumn,\n encodeInt64DeltaColumn,\n encodeInt64RleColumn,\n encodeInt64DeltaRleColumn,\n encodeInt64NullableColumn,\n encodeUint64Column,\n encodeUint64NullableColumn,\n encodeFloatColumn,\n encodeFloatNullableColumn,\n encodeDoubleColumn,\n encodeDoubleNullableColumn,\n encodeBooleanColumn,\n encodeBooleanNullableColumn,\n encodeInt32NullableColumn,\n} from \"../encoding/propertyEncoder\";\n\nfunction createColumnMetadata(name: string, scalarType: number, nullable: boolean = false): Column {\n return {\n name: name,\n nullable: nullable,\n type: \"scalarType\",\n scalarType: {\n physicalType: scalarType,\n type: \"physicalType\",\n },\n };\n}\n\ndescribe(\"decodePropertyColumn - INT_32\", () => {\n it(\"should decode INT_32 column with NONE encoding (signed)\", () => {\n const expectedValues = new Int32Array([2, -4, 6]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32NoneColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_32 column with DELTA encoding\", () => {\n const expectedValues = new Int32Array([2, 4, 6]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32DeltaColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_32 column with RLE encoding\", () => {\n const expectedValues = new Int32Array([100, 100, 100, -50, -50]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32RleColumn([\n [3, 100],\n [2, -50],\n ]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_32 column with DELTA+RLE encoding\", () => {\n const expectedValues = new Int32Array([10, 12, 14, 15, 16]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32DeltaRleColumn([\n [1, 10],\n [2, 2],\n [2, 1],\n ]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode nullable INT_32 column with null values\", () => {\n const expectedValues = [2, null, -4, null, 6];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, true);\n const encodedData = encodeInt32NullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_32 SEQUENCE vector\", () => {\n const numValues = 5;\n const value = 10;\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32DeltaRleColumn([[numValues, value]]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);\n\n expect(result).toBeInstanceOf(IntSequenceVector);\n const seqVec = result as IntSequenceVector;\n expect(seqVec.getValue(0)).toBe(value);\n expect(seqVec.getValue(1)).toBe(value + value);\n expect(seqVec.getValue(2)).toBe(value + value * 2);\n });\n\n it(\"should decode INT_32 CONST vector\", () => {\n const numValues = 5;\n const constValue = 42;\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32RleColumn([[numValues, constValue]]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);\n\n expect(result).toBeInstanceOf(IntConstVector);\n const constVec = result as IntConstVector;\n expect(constVec.getValue(0)).toBe(constValue);\n expect(constVec.getValue(4)).toBe(constValue);\n });\n});\n\ndescribe(\"decodePropertyColumn - UINT_32\", () => {\n it(\"should decode UINT_32 column with NONE encoding (unsigned)\", () => {\n const expectedValues = new Uint32Array([2, 4, 6, 100]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.UINT_32, false);\n const encodedData = encodeUint32Column(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n});\n\ndescribe(\"decodePropertyColumn - INT_64\", () => {\n it(\"should decode INT_64 column with NONE encoding (signed)\", () => {\n const expectedValues = new BigInt64Array([2n, -4n, 6n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64NoneColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_64 column with DELTA encoding\", () => {\n const expectedValues = new BigInt64Array([2n, 4n, 6n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64DeltaColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_64 column with RLE encoding\", () => {\n const expectedValues = new BigInt64Array([100n, 100n, 100n, -50n, -50n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64RleColumn([\n [3, 100n],\n [2, -50n],\n ]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_64 column with DELTA+RLE encoding\", () => {\n const expectedValues = new BigInt64Array([10n, 12n, 14n, 15n, 16n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64DeltaRleColumn([\n [1, 10n],\n [2, 2n],\n [2, 1n],\n ]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode nullable INT_64 column with null values\", () => {\n const expectedValues = [2n, null, -4n, null, 6n];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, true);\n const encodedData = encodeInt64NullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode INT_64 SEQUENCE vector\", () => {\n const numValues = 5;\n const value = 10n;\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64DeltaRleColumn([[numValues, value]]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);\n\n expect(result).toBeInstanceOf(LongSequenceVector);\n const seqVec = result as LongSequenceVector;\n expect(seqVec.getValue(0)).toBe(value);\n expect(seqVec.getValue(1)).toBe(value + value);\n expect(seqVec.getValue(2)).toBe(value + value * 2n);\n });\n\n it(\"should decode INT_64 CONST vector\", () => {\n const numValues = 5;\n const constValue = 42n;\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.INT_64, false);\n const encodedData = encodeInt64RleColumn([[numValues, constValue]]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, numValues);\n\n expect(result).toBeInstanceOf(LongConstVector);\n const constVec = result as LongConstVector;\n expect(constVec.getValue(0)).toBe(constValue);\n expect(constVec.getValue(4)).toBe(constValue);\n });\n});\n\ndescribe(\"decodePropertyColumn - UINT_64\", () => {\n it(\"should decode UINT_64 column with NONE encoding (unsigned)\", () => {\n const expectedValues = new BigUint64Array([2n, 4n, 6n, 100n]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.UINT_64, false);\n const encodedData = encodeUint64Column(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should decode nullable UINT_64 column with null values\", () => {\n const expectedValues = [2n, null, 4n, null, 6n];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.UINT_64, true);\n const encodedData = encodeUint64NullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(LongFlatVector);\n const resultVec = result as LongFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n});\n\ndescribe(\"decodePropertyColumn - FLOAT\", () => {\n it(\"should decode non-nullable FLOAT column\", () => {\n const expectedValues = new Float32Array([1.5, 2.7, -3.14, 4.2]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.FLOAT, false);\n const encodedData = encodeFloatColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(FloatFlatVector);\n const resultVec = result as FloatFlatVector;\n expect(resultVec.size).toBe(expectedValues.length);\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBeCloseTo(expectedValues[i], 5);\n }\n });\n\n it(\"should decode nullable FLOAT column with null values\", () => {\n const expectedValues = [1.5, null, 2.7, null, 3.14];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.FLOAT, true);\n const encodedData = encodeFloatNullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(FloatFlatVector);\n const resultVec = result as FloatFlatVector;\n expect(resultVec.size).toBe(expectedValues.length);\n expect(resultVec.getValue(0)).toBeCloseTo(1.5, 5);\n expect(resultVec.getValue(1)).toBe(null); // null value\n expect(resultVec.getValue(2)).toBeCloseTo(2.7, 5);\n expect(resultVec.getValue(3)).toBe(null); // null value\n expect(resultVec.getValue(4)).toBeCloseTo(3.14, 5);\n });\n\n it(\"should handle offset correctly after decoding FLOAT column\", () => {\n const expectedValues = new Float32Array([1.0, 2.0, 3.0]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.FLOAT, false);\n const encodedData = encodeFloatColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n // Verify offset was advanced correctly\n expect(offset.get()).toBe(encodedData.length);\n });\n});\n\ndescribe(\"decodePropertyColumn - BOOLEAN\", () => {\n it(\"should decode non-nullable BOOLEAN column with RLE\", () => {\n const booleanValues = [true, false, true, true, false, false, false, true];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.BOOLEAN, false);\n const encodedData = encodeBooleanColumn(booleanValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, booleanValues.length);\n\n expect(result).toBeInstanceOf(BooleanFlatVector);\n const boolVec = result as BooleanFlatVector;\n for (let i = 0; i < booleanValues.length; i++) {\n expect(boolVec.getValue(i)).toBe(booleanValues[i]);\n }\n });\n\n it(\"should decode nullable BOOLEAN column with RLE and present stream\", () => {\n const expectedValues = [true, null, false, null, true];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.BOOLEAN, true);\n const encodedData = encodeBooleanNullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(BooleanFlatVector);\n const boolVec = result as BooleanFlatVector;\n expect(boolVec.getValue(0)).toBe(true);\n expect(boolVec.getValue(1)).toBe(null);\n expect(boolVec.getValue(2)).toBe(false);\n expect(boolVec.getValue(3)).toBe(null);\n expect(boolVec.getValue(4)).toBe(true);\n });\n});\n\ndescribe(\"decodePropertyColumn - DOUBLE\", () => {\n it(\"should decode non-nullable DOUBLE column\", () => {\n const expectedValues = new Float32Array([1.2345, 5.4321, 1.33742]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.DOUBLE, false);\n const encodedData = encodeDoubleColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n expect(result).toBeInstanceOf(DoubleFlatVector);\n const resultVec = result as DoubleFlatVector;\n expect(resultVec.size).toBe(expectedValues.length);\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBeCloseTo(expectedValues[i], 5);\n }\n });\n\n it(\"should decode nullable DOUBLE column with null values\", () => {\n const expectedValues = [1.5, null, 2.7, null, 3.14159];\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.DOUBLE, true);\n const encodedData = encodeDoubleNullableColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(encodedData, offset, columnMetadata, 2, expectedValues.length);\n\n expect(result).toBeInstanceOf(DoubleFlatVector);\n const resultVec = result as DoubleFlatVector;\n expect(resultVec.size).toBe(expectedValues.length);\n expect(resultVec.getValue(0)).toBeCloseTo(1.5, 5);\n expect(resultVec.getValue(1)).toBe(null); // null value\n expect(resultVec.getValue(2)).toBeCloseTo(2.7, 5);\n expect(resultVec.getValue(3)).toBe(null); // null value\n expect(resultVec.getValue(4)).toBeCloseTo(3.14159, 5);\n });\n\n it(\"should handle offset correctly after decoding DOUBLE column\", () => {\n const expectedValues = new Float32Array([1.33742, 1.2345, 5.4321]);\n const columnMetadata = createColumnMetadata(\"testColumn\", ScalarType.DOUBLE, false);\n const encodedData = encodeDoubleColumn(expectedValues);\n const offset = new IntWrapper(0);\n\n decodePropertyColumn(encodedData, offset, columnMetadata, 1, expectedValues.length);\n\n // Verify offset was advanced correctly\n expect(offset.get()).toBe(encodedData.length);\n });\n});\n\ndescribe(\"decodePropertyColumn - STRING\", () => {\n describe(\"basic functionality\", () => {\n it(\"should decode single field with shared dictionary\", () => {\n const dictionaryStrings = [\"apple\", \"banana\", \"peach\", \"date\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n const fieldStreams = encodeStructField([0, 1, 2, 3], [true, true, true, true]);\n const completeData = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n const columnMetadata = createColumnMetadataForStruct(\"address\", [{ name: \"street\" }]);\n const offset = new IntWrapper(0);\n const result = decodePropertyColumn(completeData, offset, columnMetadata, 1, dictionaryStrings.length);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toBeInstanceOf(StringDictionaryVector);\n expect(result[0].name).toBe(\"address:street\");\n for (let i = 0; i < dictionaryStrings.length; i++) {\n expect(result[0].getValue(i)).toBe(dictionaryStrings[i]);\n }\n });\n\n it(\"should decode shared dictionary when numStreams matches encoder output (3 + N*2)\", () => {\n const dictionaryStrings = [\"apple\", \"banana\", \"peach\", \"date\"];\n const { lengthStream, dataStream } = encodeSharedDictionary(dictionaryStrings);\n const fieldStreams = encodeStructField([0, 1, 2, 3], [true, true, true, true]);\n const completeData = concatenateBuffers(lengthStream, dataStream, fieldStreams);\n const columnMetadata = createColumnMetadataForStruct(\"address\", [{ name: \"street\" }]);\n const offset = new IntWrapper(0);\n const result = decodePropertyColumn(completeData, offset, columnMetadata, 5, dictionaryStrings.length);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toBeInstanceOf(StringDictionaryVector);\n expect(result[0].name).toBe(\"address:street\");\n for (let i = 0; i < dictionaryStrings.length; i++) {\n expect(result[0].getValue(i)).toBe(dictionaryStrings[i]);\n }\n });\n });\n});\n\ndescribe(\"decodePropertyColumn - Edge Cases\", () => {\n it(\"should filter columns with propertyColumnNames set\", () => {\n const expectedValues = new Int32Array([1, 2, 3]);\n const columnMetadata = createColumnMetadata(\"includedColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32NoneColumn(expectedValues);\n const propertyColumnNames = new Set([\"includedColumn\"]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(\n encodedData,\n offset,\n columnMetadata,\n 1,\n expectedValues.length,\n propertyColumnNames,\n );\n\n expect(result).toBeInstanceOf(IntFlatVector);\n const resultVec = result as IntFlatVector;\n for (let i = 0; i < expectedValues.length; i++) {\n expect(resultVec.getValue(i)).toBe(expectedValues[i]);\n }\n });\n\n it(\"should skip column when not in propertyColumnNames filter\", () => {\n const expectedValues = new Int32Array([1, 2, 3]);\n const columnMetadata = createColumnMetadata(\"excludedColumn\", ScalarType.INT_32, false);\n const encodedData = encodeInt32NoneColumn(expectedValues);\n const propertyColumnNames = new Set([\"someOtherColumn\"]);\n const offset = new IntWrapper(0);\n\n const result = decodePropertyColumn(\n encodedData,\n offset,\n columnMetadata,\n 1,\n expectedValues.length,\n propertyColumnNames,\n );\n\n // Should return null and advance the offset past the skipped data\n expect(result).toBe(null);\n expect(offset.get()).toBe(encodedData.length);\n });\n\n it(\"should return null for empty columns (numStreams === 0)\", () => {\n const columnMetadata = createColumnMetadata(\"emptyColumn\", ScalarType.INT_32, false);\n const offset = new IntWrapper(0);\n const data = new Uint8Array(0);\n\n const result = decodePropertyColumn(data, offset, columnMetadata, 0, 0);\n\n expect(result).toBeNull();\n });\n\n it(\"should return null for complex type with numStreams === 0\", () => {\n const columnMetadata = createColumnMetadataForStruct(\"structColumn\", [\n { name: \"field1\" },\n { name: \"field2\" },\n ]);\n const offset = new IntWrapper(0);\n const data = new Uint8Array(0);\n\n const result = decodePropertyColumn(data, offset, columnMetadata, 0, 5);\n\n expect(result).toBeNull();\n });\n\n it(\"should throw error for unsupported data type\", () => {\n const columnMetadata = createColumnMetadata(\"unsupportedColumn\", ScalarType.INT_8, false);\n const encodedData = encodeInt32NoneColumn(new Int32Array([1, 2, 3]));\n const offset = new IntWrapper(0);\n\n expect(() => {\n decodePropertyColumn(encodedData, offset, columnMetadata, 1, 3);\n }).toThrow();\n });\n});\n"]}
@@ -1 +0,0 @@
1
- export {};