mirror of
https://github.com/asadbek064/hyparquet.git
synced 2025-12-05 22:41:55 +00:00
108 lines
3.7 KiB
JavaScript
108 lines
3.7 KiB
JavaScript
import { describe, expect, it } from 'vitest'
|
|
import { assembleObjects } from '../src/assemble.js'
|
|
|
|
describe('assembleObjects', () => {
|
|
it('should assemble objects with non-null values', () => {
|
|
const repetitionLevels = [0, 1]
|
|
const values = ['a', 'b']
|
|
const result = assembleObjects([], repetitionLevels, values, false, 3, 1)
|
|
expect(result).toEqual([['a', 'b']])
|
|
})
|
|
|
|
it('should handle null values', () => {
|
|
const definitionLevels = [3, 0, 3]
|
|
const repetitionLevels = [0, 1, 1]
|
|
const values = ['a', 'c']
|
|
const result = assembleObjects(definitionLevels, repetitionLevels, values, true, 3, 1)
|
|
expect(result).toEqual([['a', undefined, 'c']])
|
|
})
|
|
|
|
it('should handle empty lists', () => {
|
|
const result = assembleObjects([], [], [], false, 0, 0)
|
|
expect(result).toEqual([])
|
|
})
|
|
|
|
it('should handle multiple lists', () => {
|
|
const repetitionLevels = [0, 0]
|
|
const values = [22, 33]
|
|
const result = assembleObjects([], repetitionLevels, values, false, 3, 1)
|
|
expect(result).toEqual([[22], [33]])
|
|
})
|
|
|
|
it('should handle multiple lists (6)', () => {
|
|
const repetitionLevels = [0, 1, 1, 0, 1, 1]
|
|
const values = [1, 2, 3, 4, 5, 6]
|
|
const result = assembleObjects([], repetitionLevels, values, false, 3, 1)
|
|
expect(result).toEqual([[1, 2, 3], [4, 5, 6]])
|
|
})
|
|
|
|
it('should assemble multiple lists with nulls', () => {
|
|
const definitionLevels = [3, 3, 0, 3, 3]
|
|
const repetitionLevels = [0, 1, 0, 0, 1]
|
|
const values = ['a', 'b', 'd', 'e']
|
|
const result = assembleObjects(definitionLevels, repetitionLevels, values, true, 3, 1)
|
|
expect(result).toEqual([['a', 'b'], undefined, ['d', 'e']])
|
|
})
|
|
|
|
// it('should handle continuing a row from the previous page', () => {
|
|
// const definitionLevels = [3, 3, 3, 1]
|
|
// const repetitionLevels = [1, 0, 1, 0]
|
|
// const values = ['a', 'b', 'c', 'd']
|
|
// const result = assembleObjects(definitionLevels, repetitionLevels, values, false, 3, 1)
|
|
// expect(result).toEqual([['b', 'c'], [undefined]])
|
|
// })
|
|
|
|
it('should handle nested arrays', () => {
|
|
// from nullable.impala.parquet
|
|
const repetitionLevels = [0, 2, 1, 2]
|
|
const values = [1, 2, 3, 4]
|
|
const result = assembleObjects([], repetitionLevels, values, false, 3, 2)
|
|
expect(result).toEqual([[[1, 2], [3, 4]]])
|
|
})
|
|
|
|
it('should handle top repetition level', () => {
|
|
// from int_map.parquet
|
|
const definitionLevels = [2, 2, 2, 2, 1, 1, 1, 0, 2, 2]
|
|
const repetitionLevels = [0, 1, 0, 1, 0, 0, 0, 0, 0, 1]
|
|
const values = ['k1', 'k2', 'k1', 'k2', 'k1', 'k3']
|
|
const result = assembleObjects(definitionLevels, repetitionLevels, values, true, 2, 1)
|
|
expect(result).toEqual([
|
|
['k1', 'k2'],
|
|
['k1', 'k2'],
|
|
[],
|
|
[],
|
|
[],
|
|
undefined,
|
|
['k1', 'k3'],
|
|
])
|
|
})
|
|
|
|
it('should handle empty lists with definition level', () => {
|
|
// from nonnullable.impala.parquet
|
|
const result = assembleObjects([0], [0], [], false, 2, 2)
|
|
expect(result).toEqual([[[]]])
|
|
})
|
|
|
|
it('should handle isNull', () => {
|
|
// from nonnullable.impala.parquet
|
|
const result = assembleObjects([2], [0], [-1], false, 2, 2)
|
|
expect(result).toEqual([[[-1]]])
|
|
})
|
|
|
|
it('should handle nullable int_array', () => {
|
|
// from nullable.impala.parquet
|
|
// [1 2 3][N 1 2 N 3 N][ ] N N
|
|
const definitionLevels = [3, 3, 3, 2, 3, 3, 2, 3, 2, 1, 0, 0]
|
|
const repetitionLevels = [0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0]
|
|
const values = [1, 2, 3, 1, 2, 3]
|
|
const result = assembleObjects(definitionLevels, repetitionLevels, values, true, 3, 1)
|
|
expect(result).toEqual([
|
|
[1, 2, 3],
|
|
[undefined, 1, 2, undefined, 3, undefined],
|
|
[],
|
|
undefined,
|
|
undefined,
|
|
])
|
|
})
|
|
})
|