mirror of
https://github.com/asadbek064/hyparquet.git
synced 2025-12-06 06:51:54 +00:00
Fix 3-byte RLE
This commit is contained in:
parent
dbebcde118
commit
490d1ec800
@ -55,17 +55,10 @@ export function readRleBitPackedHybrid(reader, width, length, output) {
|
||||
function readRle(reader, count, bitWidth, output, seen) {
|
||||
const width = bitWidth + 7 >> 3
|
||||
let value = 0
|
||||
if (width === 1) {
|
||||
value = reader.view.getUint8(reader.offset)
|
||||
// assert(value < 1 << bitWidth)
|
||||
} else if (width === 2) {
|
||||
value = reader.view.getUint16(reader.offset, true)
|
||||
} else if (width === 4) {
|
||||
value = reader.view.getUint32(reader.offset, true)
|
||||
} else if (width) {
|
||||
throw new Error(`parquet invalid rle width ${width}`)
|
||||
for (let i = 0; i < width; i++) {
|
||||
value |= reader.view.getUint8(reader.offset++) << (i << 3)
|
||||
}
|
||||
reader.offset += width
|
||||
// assert(value < 1 << bitWidth)
|
||||
|
||||
// repeat value count times
|
||||
for (let i = 0; i < count; i++) {
|
||||
|
||||
@ -33,6 +33,22 @@ describe('readRleBitPackedHybrid', () => {
|
||||
expect(values).toEqual([65535, 65535, 65535])
|
||||
})
|
||||
|
||||
it('reads RLE values with bitwidth=24', () => {
|
||||
const buffer = new ArrayBuffer(4)
|
||||
const view = new DataView(buffer)
|
||||
// RLE 2x 16777215
|
||||
view.setUint8(0, 0b00000100)
|
||||
view.setUint8(1, 255)
|
||||
view.setUint8(2, 255)
|
||||
view.setUint8(3, 255)
|
||||
const reader = { view, offset: 0 }
|
||||
|
||||
const values = new Array(2)
|
||||
readRleBitPackedHybrid(reader, 24, 4, values)
|
||||
expect(reader.offset).toBe(4)
|
||||
expect(values).toEqual([16777215, 16777215])
|
||||
})
|
||||
|
||||
it('reads RLE values with bitwidth=32', () => {
|
||||
const buffer = new ArrayBuffer(5)
|
||||
const view = new DataView(buffer)
|
||||
@ -47,17 +63,6 @@ describe('readRleBitPackedHybrid', () => {
|
||||
expect(values).toEqual([234000, 234000, 234000])
|
||||
})
|
||||
|
||||
it('throws for invalid bitwidth', () => {
|
||||
const buffer = new ArrayBuffer(1)
|
||||
const view = new DataView(buffer)
|
||||
view.setUint8(0, 0b00000110)
|
||||
const reader = { view, offset: 0 }
|
||||
|
||||
const values = new Array(3)
|
||||
expect(() => readRleBitPackedHybrid(reader, 24, 3, values))
|
||||
.toThrow('parquet invalid rle width 3')
|
||||
})
|
||||
|
||||
it('reads bit-packed values with implicit length', () => {
|
||||
// Bit-packed values: false, false, true
|
||||
const buffer = new ArrayBuffer(8)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user