hyparquet/test/encoding.test.js

40 lines
1.6 KiB
JavaScript
Raw Normal View History

2024-01-05 10:48:55 +00:00
import { describe, expect, it } from 'vitest'
2024-05-01 03:28:50 +00:00
import { readRleBitPackedHybrid } from '../src/encoding.js'
2024-01-05 11:06:27 +00:00
2024-01-15 03:40:39 +00:00
describe('readRleBitPackedHybrid', () => {
it('reads RLE bit-packed hybrid values with explicit length', () => {
// Example buffer: 1 RLE group followed by 1 bit-packed group
// RLE values: true x3
// Bit-packed values: false, false, true
const buffer = new ArrayBuffer(4)
const view = new DataView(buffer)
view.setUint8(0, 0b00000110) // RLE header for 3 true values
view.setUint8(1, 0b00000001) // RLE value (true)
view.setUint8(2, 0b00000011) // Bit-packed header for 3 values
view.setUint8(3, 0b00000100) // Bit-packed values (false, false, true)
const reader = { view, offset: 0 }
2024-04-30 21:40:18 +00:00
const values = new Array(6)
readRleBitPackedHybrid(reader, 1, 3, values)
expect(reader.offset).toBe(4)
2024-04-30 21:40:18 +00:00
expect(values).toEqual([1, 1, 1, 0, 0, 1])
2024-01-15 03:40:39 +00:00
})
it('reads RLE bit-packed hybrid values with implicit length', () => {
// Example buffer: same as previous test, but with implicit length
const buffer = new ArrayBuffer(8)
const view = new DataView(buffer)
view.setInt32(0, 3, true) // length 3 little-endian
view.setUint8(4, 0b00000110) // RLE header for 3 true values
view.setUint8(5, 0b00000001) // RLE value (true)
view.setUint8(6, 0b00000011) // Bit-packed header for 3 values
view.setUint8(7, 0b00000100) // Bit-packed values (false, false, true)
const reader = { view, offset: 0 }
2024-04-30 21:40:18 +00:00
const values = new Array(6)
readRleBitPackedHybrid(reader, 1, 0, values)
expect(reader.offset).toBe(8)
2024-04-30 21:40:18 +00:00
expect(values).toEqual([1, 1, 1, 0, 0, 1])
2024-01-15 03:40:39 +00:00
})
})