Skip to content
6 changes: 6 additions & 0 deletions bindings/julia/src/Quiver.jl
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,16 @@ include("binary/Binary.jl")
export Element, Database, LuaRunner, DatabaseException
export ScalarMetadata, GroupMetadata
export QUIVER_DATA_TYPE_INTEGER, QUIVER_DATA_TYPE_FLOAT, QUIVER_DATA_TYPE_STRING
export QUIVER_COMPARE_FILE_MATCH, QUIVER_COMPARE_METADATA_MISMATCH, QUIVER_COMPARE_DATA_MISMATCH

# Re-export C enum constants for data types
const QUIVER_DATA_TYPE_INTEGER = C.QUIVER_DATA_TYPE_INTEGER
const QUIVER_DATA_TYPE_FLOAT = C.QUIVER_DATA_TYPE_FLOAT
const QUIVER_DATA_TYPE_STRING = C.QUIVER_DATA_TYPE_STRING

# Re-export C enum constants for compare status
const QUIVER_COMPARE_FILE_MATCH = C.QUIVER_COMPARE_FILE_MATCH
const QUIVER_COMPARE_METADATA_MISMATCH = C.QUIVER_COMPARE_METADATA_MISMATCH
const QUIVER_COMPARE_DATA_MISMATCH = C.QUIVER_COMPARE_DATA_MISMATCH

end
1 change: 1 addition & 0 deletions bindings/julia/src/binary/Binary.jl
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ using ..Quiver: C, check, Element

include("metadata.jl")
include("file.jl")
include("comparator.jl")
include("csv_converter.jl")

end
44 changes: 44 additions & 0 deletions bindings/julia/src/binary/comparator.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
function compare_files(
path1::String, path2::String;
absolute_tolerance::Union{Float64, Nothing} = nothing,
relative_tolerance::Union{Float64, Nothing} = nothing,
detailed_report::Union{Bool, Nothing} = nothing,
max_report_lines::Union{Int, Nothing} = nothing,
)
options = C.quiver_compare_options_default()
if absolute_tolerance !== nothing
options.absolute_tolerance = absolute_tolerance
end
if relative_tolerance !== nothing
options.relative_tolerance = relative_tolerance
end
if detailed_report !== nothing
options.detailed_report = detailed_report ? Cint(1) : Cint(0)
end
if max_report_lines !== nothing
options.max_report_lines = Cint(max_report_lines)
end

out_status = Ref{C.quiver_compare_status_t}(C.QUIVER_COMPARE_FILE_MATCH)
out_report = Ref{Ptr{Cchar}}(C_NULL)

check(C.quiver_binary_compare_files(path1, path2, Ref(options), out_status, out_report))

status = if out_status[] == C.QUIVER_COMPARE_FILE_MATCH
C.QUIVER_COMPARE_FILE_MATCH
elseif out_status[] == C.QUIVER_COMPARE_METADATA_MISMATCH
C.QUIVER_COMPARE_METADATA_MISMATCH
else
C.QUIVER_COMPARE_DATA_MISMATCH
end

report = if out_report[] != C_NULL
r = unsafe_string(out_report[])
C.quiver_binary_comparator_free_string(out_report[])
r
else
nothing
end

return (; status, report)
end
21 changes: 21 additions & 0 deletions bindings/julia/src/binary/file.jl
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,27 @@ function write!(file::File; data::Vector{Float64}, dims...)
return nothing
end

function next_dimensions(file::File, current_dimensions::Vector{Int64})
out_dims = Ref{Ptr{Int64}}(C_NULL)
out_count = Ref{Csize_t}(0)

check(
C.quiver_binary_file_next_dimensions(
file.ptr, current_dimensions, length(current_dimensions),
out_dims, out_count,
),
)

count = out_count[]
if count == 0 || out_dims[] == C_NULL
return Int64[]
end

result = [unsafe_load(out_dims[], i) for i in 1:count]
C.quiver_binary_file_free_int64_array(out_dims[])
return result
end

function get_metadata(file::File)
out_md = Ref{Ptr{C.quiver_binary_metadata}}(C_NULL)
check(C.quiver_binary_file_get_metadata(file.ptr, out_md))
Expand Down
33 changes: 33 additions & 0 deletions bindings/julia/src/c_api.jl
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,10 @@ function quiver_binary_file_write(binary_file, dim_names, dim_values, dim_count,
@ccall libquiver_c.quiver_binary_file_write(binary_file::Ptr{quiver_binary_file_t}, dim_names::Ptr{Ptr{Cchar}}, dim_values::Ptr{Int64}, dim_count::Csize_t, data::Ptr{Cdouble}, data_count::Csize_t)::quiver_error_t
end

function quiver_binary_file_next_dimensions(binary_file, current_dimensions, dim_count, out_dimensions, out_count)
@ccall libquiver_c.quiver_binary_file_next_dimensions(binary_file::Ptr{quiver_binary_file_t}, current_dimensions::Ptr{Int64}, dim_count::Csize_t, out_dimensions::Ptr{Ptr{Int64}}, out_count::Ptr{Csize_t})::quiver_error_t
end

function quiver_binary_file_get_metadata(binary_file, out)
@ccall libquiver_c.quiver_binary_file_get_metadata(binary_file::Ptr{quiver_binary_file_t}, out::Ptr{Ptr{quiver_binary_metadata_t}})::quiver_error_t
end
Expand All @@ -623,6 +627,31 @@ function quiver_binary_file_get_file_path(binary_file, out)
@ccall libquiver_c.quiver_binary_file_get_file_path(binary_file::Ptr{quiver_binary_file_t}, out::Ptr{Ptr{Cchar}})::quiver_error_t
end

@cenum quiver_compare_status_t::UInt32 begin
QUIVER_COMPARE_FILE_MATCH = 0
QUIVER_COMPARE_METADATA_MISMATCH = 1
QUIVER_COMPARE_DATA_MISMATCH = 2
end

mutable struct quiver_compare_options_t
absolute_tolerance::Cdouble
relative_tolerance::Cdouble
detailed_report::Cint
max_report_lines::Cint
end

function quiver_compare_options_default()
@ccall libquiver_c.quiver_compare_options_default()::quiver_compare_options_t
end

function quiver_binary_compare_files(path1, path2, options, out_status, out_report)
@ccall libquiver_c.quiver_binary_compare_files(path1::Ptr{Cchar}, path2::Ptr{Cchar}, options::Ptr{quiver_compare_options_t}, out_status::Ptr{quiver_compare_status_t}, out_report::Ptr{Ptr{Cchar}})::quiver_error_t
end

function quiver_binary_comparator_free_string(str)
@ccall libquiver_c.quiver_binary_comparator_free_string(str::Ptr{Cchar})::quiver_error_t
end

function quiver_binary_file_free_string(str)
@ccall libquiver_c.quiver_binary_file_free_string(str::Ptr{Cchar})::quiver_error_t
end
Expand All @@ -631,6 +660,10 @@ function quiver_binary_file_free_float_array(data)
@ccall libquiver_c.quiver_binary_file_free_float_array(data::Ptr{Cdouble})::quiver_error_t
end

function quiver_binary_file_free_int64_array(data)
@ccall libquiver_c.quiver_binary_file_free_int64_array(data::Ptr{Int64})::quiver_error_t
end

# ============================================================================
# Binary CSV functions
# ============================================================================
Expand Down
Loading
Loading