测试 API 参考#

group nanoarrow_testing

用于测试 nanoarrow 结构和函数的实用程序。

集成测试 JSON#

group nanoarrow_testing-json

有关 JSON 表示的详细信息,请参阅测试格式文档。此表示形式不是规范的,但可用于实现与其他实现的集成测试。

class TestingJSONWriter#
#include <nanoarrow_testing.hpp>

Arrow 集成测试 JSON 格式的写入器。

公共函数

inline void set_float_precision(int value)#

设置写入器的浮点精度。

默认情况下,浮点精度为 -1,它使用 JSON 序列化程序在输出中对值进行编码。在为集成测试专门编写文件时,应将浮点值四舍五入到小数点后 3 位,以避免序列化问题。

inline void set_include_metadata(bool value)#

设置是否在模式或字段的输出中包含元数据。

使用 false 以跳过在输出中写入模式/字段元数据。

ArrowErrorCode WriteDataFile(std::ostream &out, ArrowArrayStream *stream)#

将 ArrowArrayStream 作为数据文件 JSON 对象写入 out。

创建类似于 {"schema": {...}, "batches": [...], ...} 的输出。

ArrowErrorCode WriteSchema(std::ostream &out, const ArrowSchema *schema)#

将模式写入 out。

创建类似于 {"fields": [...], "metadata": [...]} 的输出。

ArrowErrorCode WriteField(std::ostream &out, const ArrowSchema *field)#

将字段写入 out。

创建类似于 {"name" : "col", "type": {...}, ...} 的输出

ArrowErrorCode WriteType(std::ostream &out, const ArrowSchema *field)#

写入字段的类型部分。

创建类似于 {"name": "int", ...} 的输出

ArrowErrorCode WriteMetadata(std::ostream &out, const char *metadata)#

写入字段的元数据部分。

创建类似于 [{"key": "...", "value": "..."}, ...] 的输出。

ArrowErrorCode WriteBatch(std::ostream &out, const ArrowSchema *schema, const ArrowArrayView *value)#

将“批处理”写入 out。

创建类似于 {"count": 123, "columns": [...]} 的输出。

ArrowErrorCode WriteColumn(std::ostream &out, const ArrowSchema *field, const ArrowArrayView *value)#

将列写入 out。

创建类似于 {"name": "col", "count": 123, "VALIDITY": [...], ...} 的输出。

class TestingJSONReader#
#include <nanoarrow_testing.hpp>

Arrow 集成测试 JSON 格式的读取器。

公共函数

ArrowErrorCode ReadDataFile(const std::string &data_file_json, ArrowArrayStream *out, int num_batch = kNumBatchReadAll, ArrowError *error = nullptr)#

读取表示数据文件对象的 JSON。

读取 {"schema": {...}, "batches": [...], ...} 形式的 JSON 对象,并在成功时传播 out

ArrowErrorCode ReadSchema(const std::string &schema_json, ArrowSchema *out, ArrowError *error = nullptr)#

读取表示模式的 JSON。

读取 {"fields": [...], "metadata": [...]} 形式的 JSON 对象,并在成功时传播 out

ArrowErrorCode ReadField(const std::string &field_json, ArrowSchema *out, ArrowError *error = nullptr)#

读取表示字段的 JSON。

读取形如 {"name" : "col", "type": {...}, ...} 的 JSON 对象,在成功时将 out 传播出去。

ArrowErrorCode ReadBatch(const std::string &batch_json, const ArrowSchema *schema, ArrowArray *out, ArrowError *error = nullptr)#

读取表示 RecordBatch 的 JSON。

读取形如 {"count": 123, "columns": [...]} 的 JSON 对象,在成功时将 out 传播出去。

ArrowErrorCode ReadColumn(const std::string &column_json, const ArrowSchema *schema, ArrowArray *out, ArrowError *error = nullptr)#

读取表示 Column 的 JSON。

读取形如 {"name": "col", "count": 123, "VALIDITY": [...], ...} 的 JSON 对象,在成功时将 out 传播出去。

class TestingJSONComparison#
#include <nanoarrow_testing.hpp>

集成测试比较实用程序。

用于比较 ArrowSchema、ArrowArray 和 ArrowArrayStream 实例的实用程序。这仅应在集成测试的上下文中使用,因为比较逻辑特定于集成测试 JSON 文件和规范。值得注意的是

  • Map 类型在子名称为“entries”、“key”和“value”的情况下被认为是相等的。

  • Float32 和 Float64 值根据它们的 JSON 序列化进行比较。

公共函数

inline void set_compare_batch_flags(bool value)#

比较顶层 RecordBatch 标志(例如,可空性)

一些 Arrow 实现将批次导出为可空,而另一些则导出为不可空。使用 false 将这两种类型的批次视为等效。

inline void set_compare_metadata_order(bool value)#

比较元数据顺序。

一些 Arrow 实现使用结构(例如,哈希映射)存储元数据,这些结构会对元数据项进行重新排序。使用 false 将键/值已被重新排序的元数据视为等效。

inline void set_compare_float_precision(int value)#

设置浮点精度。

Arrow 集成测试 JSON 文档指出,应将值与小数点后 3 位进行比较,以避免浮点序列化问题。使用 -1 指定应使用所有小数位(默认值)。

inline int64_t num_differences() const#

返回前一次调用找到的差异数。

inline void WriteDifferences(std::ostream &out)#

将差异的易于理解的摘要转储到 out。

inline void ClearDifferences()#

清除所有现有的差异。

inline ArrowErrorCode CompareArrayStream(ArrowArrayStream *actual, ArrowArrayStream *expected, ArrowError *error = nullptr)#

比较一系列 record batch。

使用以下策略将 actual 与 expected 进行比较

  • 比较 schema 是否相等,如果发现差异则返回

  • 比较成对的 record batch,如果一个流比另一个流先结束,则返回。

如果比较在没有错误的情况下运行,则返回 NANOARROW_OK。调用者必须查询 num_differences() 以在成功时获得比较结果。

inline ArrowErrorCode CompareSchema(const ArrowSchema *actual, const ArrowSchema *expected, ArrowError *error = nullptr, const std::string &path = "")#

比较顶层 ArrowSchema 结构体。

如果比较在没有错误的情况下运行,则返回 NANOARROW_OK。调用者必须查询 num_differences() 以在成功时获得比较结果。

inline ArrowErrorCode SetSchema(const ArrowSchema *schema, ArrowError *error = nullptr)#

设置 ArrowSchema 以便在将来对 CompareBatch() 的调用中使用。

inline ArrowErrorCode CompareBatch(const ArrowArray *actual, const ArrowArray *expected, ArrowError *error = nullptr, const std::string &path = "")#

比较顶级 ArrowArray 结构。

如果比较在没有错误的情况下运行,则返回 NANOARROW_OK。调用者必须查询 num_differences() 以在成功时获得比较结果。