2025-04-08 10:22:30 +00:00
|
|
|
import fs from 'fs'
|
|
|
|
|
import { asyncBufferFromFile, parquetMetadataAsync, parquetReadObjects } from 'hyparquet'
|
|
|
|
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
|
2025-04-17 07:38:17 +00:00
|
|
|
import { parquetWriteFile } from '../src/node.js'
|
2025-04-14 04:15:29 +00:00
|
|
|
import { exampleData, exampleMetadata } from './example.js'
|
2025-04-08 10:22:30 +00:00
|
|
|
|
|
|
|
|
const filedir = 'data/'
|
|
|
|
|
const filename = 'data/write.file.parquet'
|
|
|
|
|
|
2025-04-11 08:41:56 +00:00
|
|
|
describe('parquetWriteFile', () => {
|
2025-04-08 10:22:30 +00:00
|
|
|
beforeEach(() => {
|
|
|
|
|
// ensure data directory exists
|
|
|
|
|
if (!fs.existsSync(filedir)) {
|
|
|
|
|
fs.mkdirSync(filedir)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
afterEach(() => {
|
|
|
|
|
// remove test file
|
|
|
|
|
if (fs.existsSync(filename)) {
|
|
|
|
|
fs.unlinkSync(filename)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('writes parquet file', async () => {
|
2025-04-14 04:15:29 +00:00
|
|
|
parquetWriteFile({ filename, columnData: exampleData })
|
2025-04-08 10:22:30 +00:00
|
|
|
|
|
|
|
|
// check parquet metadata
|
|
|
|
|
const file = await asyncBufferFromFile(filename)
|
|
|
|
|
const metadata = await parquetMetadataAsync(file)
|
|
|
|
|
expect(metadata).toEqual(exampleMetadata)
|
|
|
|
|
|
|
|
|
|
// check parquet data
|
|
|
|
|
const result = await parquetReadObjects({ file, metadata })
|
|
|
|
|
expect(result).toEqual([
|
2025-04-08 11:20:32 +00:00
|
|
|
{ bool: true, int: 0, bigint: 0n, float: 0, double: 0, string: 'a', nullable: true },
|
|
|
|
|
{ bool: false, int: 127, bigint: 127n, float: 0.00009999999747378752, double: 0.0001, string: 'b', nullable: false },
|
|
|
|
|
{ bool: true, int: 0x7fff, bigint: 0x7fffn, float: 123.45600128173828, double: 123.456, string: 'c', nullable: null },
|
|
|
|
|
{ bool: false, int: 0x7fffffff, bigint: 0x7fffffffffffffffn, float: Infinity, double: 1e100, string: 'd', nullable: null },
|
2025-04-08 10:22:30 +00:00
|
|
|
])
|
|
|
|
|
})
|
|
|
|
|
})
|