summaryrefslogtreecommitdiffstats
path: root/src/arrow/js/test/unit/ipc/validate.ts
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-21 11:54:28 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-21 11:54:28 +0000
commite6918187568dbd01842d8d1d2c808ce16a894239 (patch)
tree64f88b554b444a49f656b6c656111a145cbbaa28 /src/arrow/js/test/unit/ipc/validate.ts
parentInitial commit. (diff)
downloadceph-e6918187568dbd01842d8d1d2c808ce16a894239.tar.xz
ceph-e6918187568dbd01842d8d1d2c808ce16a894239.zip
Adding upstream version 18.2.2.upstream/18.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/arrow/js/test/unit/ipc/validate.ts')
-rw-r--r--src/arrow/js/test/unit/ipc/validate.ts74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/arrow/js/test/unit/ipc/validate.ts b/src/arrow/js/test/unit/ipc/validate.ts
new file mode 100644
index 000000000..aedf87a2d
--- /dev/null
+++ b/src/arrow/js/test/unit/ipc/validate.ts
@@ -0,0 +1,74 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+import '../../jest-extensions';
+
+import {
+ Schema,
+ RecordBatch,
+ RecordBatchReader,
+ RecordBatchFileReader,
+ RecordBatchStreamReader,
+} from 'apache-arrow';
+
+export function validateRecordBatchReader<T extends RecordBatchFileReader | RecordBatchStreamReader>(type: 'json' | 'file' | 'stream', numBatches: number, r: T) {
+ const reader = r.open();
+ expect(reader).toBeInstanceOf(RecordBatchReader);
+ expect(type === 'file' ? reader.isFile() : reader.isStream()).toBe(true);
+ expect(reader.schema).toBeInstanceOf(Schema);
+ validateRecordBatchIterator(numBatches, reader[Symbol.iterator]());
+ expect(reader.closed).toBe(reader.autoDestroy);
+ return reader;
+}
+
+export async function validateAsyncRecordBatchReader<T extends RecordBatchReader>(type: 'json' | 'file' | 'stream', numBatches: number, r: T) {
+ const reader = await r.open();
+ expect(reader).toBeInstanceOf(RecordBatchReader);
+ expect(reader.schema).toBeInstanceOf(Schema);
+ expect(type === 'file' ? reader.isFile() : reader.isStream()).toBe(true);
+ await validateRecordBatchAsyncIterator(numBatches, reader[Symbol.asyncIterator]());
+ expect(reader.closed).toBe(reader.autoDestroy);
+ return reader;
+}
+
+export function validateRecordBatchIterator(numBatches: number, iterator: Iterable<RecordBatch> | IterableIterator<RecordBatch>) {
+ let i = 0;
+ try {
+ for (const recordBatch of iterator) {
+ expect(recordBatch).toBeInstanceOf(RecordBatch);
+ expect(i++).toBeLessThan(numBatches);
+ }
+ } catch (e) { throw new Error(`${i}: ${e}`); }
+ expect(i).toBe(numBatches);
+ if (typeof (iterator as any).return === 'function') {
+ (iterator as any).return();
+ }
+}
+
+export async function validateRecordBatchAsyncIterator(numBatches: number, iterator: AsyncIterable<RecordBatch> | AsyncIterableIterator<RecordBatch>) {
+ let i = 0;
+ try {
+ for await (const recordBatch of iterator) {
+ expect(recordBatch).toBeInstanceOf(RecordBatch);
+ expect(i++).toBeLessThan(numBatches);
+ }
+ } catch (e) { throw new Error(`${i}: ${e}`); }
+ expect(i).toBe(numBatches);
+ if (typeof (iterator as any).return === 'function') {
+ await (iterator as any).return();
+ }
+}