test(parity): batch port — tile / math / distance / similarity (4 manifest files)#23
Merged
nhungoc1508 merged 2 commits intoMay 4, 2026
Merged
Conversation
estebanzimanyi
added a commit
that referenced
this pull request
Apr 25, 2026
Adds 8 ScalarFunction registrations for temporal similarity: frechetDistance(t1, t2) -> DOUBLE discreteFrechet(t1, t2) -> DOUBLE (alias of frechetDistance) dynTimeWarp(t1, t2) -> DOUBLE hausdorffDistance(t1, t2) -> DOUBLE For each: (tint, tint) and (tfloat, tfloat) registrations. MEOS bindings: temporal_frechet_distance, temporal_dyntimewarp_distance, temporal_hausdorff_distance. Implementation uses 3 thin wrappers + a single TempTempDoublePred templated helper. similarityPath (table-returning, alignment) is intentionally NOT included — needs DuckDB TableFunction infrastructure (separate follow-up tracked in PR #23). Smoke test: SELECT frechetDistance(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 1.0 SELECT discreteFrechet(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 1.0 SELECT dynTimeWarp(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 2.0 SELECT hausdorffDistance(tfloat '[1@01-01, 5@01-05]', tfloat '[3@01-01, 3@01-05]'); -- 2.0 Stacked on PR #35 (ever/always ordering). Full suite passes (747 assertions, 13 test cases).
estebanzimanyi
added a commit
that referenced
this pull request
Apr 25, 2026
Adds 8 ScalarFunction registrations for temporal similarity: frechetDistance(t1, t2) -> DOUBLE discreteFrechet(t1, t2) -> DOUBLE (alias of frechetDistance) dynTimeWarp(t1, t2) -> DOUBLE hausdorffDistance(t1, t2) -> DOUBLE For each: (tint, tint) and (tfloat, tfloat) registrations. MEOS bindings: temporal_frechet_distance, temporal_dyntimewarp_distance, temporal_hausdorff_distance. Implementation uses 3 thin wrappers + a single TempTempDoublePred templated helper. similarityPath (table-returning, alignment) is intentionally NOT included — needs DuckDB TableFunction infrastructure (separate follow-up tracked in PR #23). Smoke test: SELECT frechetDistance(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 1.0 SELECT discreteFrechet(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 1.0 SELECT dynTimeWarp(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 2.0 SELECT hausdorffDistance(tfloat '[1@01-01, 5@01-05]', tfloat '[3@01-01, 3@01-05]'); -- 2.0 Stacked on PR #35 (ever/always ordering). Full suite passes (747 assertions, 13 test cases).
estebanzimanyi
added a commit
that referenced
this pull request
Apr 25, 2026
Adds 8 ScalarFunction registrations for temporal similarity: frechetDistance(t1, t2) -> DOUBLE discreteFrechet(t1, t2) -> DOUBLE (alias of frechetDistance) dynTimeWarp(t1, t2) -> DOUBLE hausdorffDistance(t1, t2) -> DOUBLE For each: (tint, tint) and (tfloat, tfloat) registrations. MEOS bindings: temporal_frechet_distance, temporal_dyntimewarp_distance, temporal_hausdorff_distance. Implementation uses 3 thin wrappers + a single TempTempDoublePred templated helper. similarityPath (table-returning, alignment) is intentionally NOT included — needs DuckDB TableFunction infrastructure (separate follow-up tracked in PR #23). Smoke test: SELECT frechetDistance(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 1.0 SELECT discreteFrechet(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 1.0 SELECT dynTimeWarp(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 2.0 SELECT hausdorffDistance(tfloat '[1@01-01, 5@01-05]', tfloat '[3@01-01, 3@01-05]'); -- 2.0 Stacked on PR #35 (ever/always ordering). Full suite passes (747 assertions, 13 test cases).
estebanzimanyi
added a commit
that referenced
this pull request
Apr 27, 2026
Adds 8 ScalarFunction registrations for temporal similarity: frechetDistance(t1, t2) -> DOUBLE discreteFrechet(t1, t2) -> DOUBLE (alias of frechetDistance) dynTimeWarp(t1, t2) -> DOUBLE hausdorffDistance(t1, t2) -> DOUBLE For each: (tint, tint) and (tfloat, tfloat) registrations. MEOS bindings: temporal_frechet_distance, temporal_dyntimewarp_distance, temporal_hausdorff_distance. Implementation uses 3 thin wrappers + a single TempTempDoublePred templated helper. similarityPath (table-returning, alignment) is intentionally NOT included — needs DuckDB TableFunction infrastructure (separate follow-up tracked in PR #23). Smoke test: SELECT frechetDistance(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 1.0 SELECT discreteFrechet(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 1.0 SELECT dynTimeWarp(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 2.0 SELECT hausdorffDistance(tfloat '[1@01-01, 5@01-05]', tfloat '[3@01-01, 3@01-05]'); -- 2.0 Stacked on PR #35 (ever/always ordering). Full suite passes (747 assertions, 13 test cases).
nhungoc1508
pushed a commit
that referenced
this pull request
Apr 27, 2026
Adds 8 ScalarFunction registrations for temporal similarity: frechetDistance(t1, t2) -> DOUBLE discreteFrechet(t1, t2) -> DOUBLE (alias of frechetDistance) dynTimeWarp(t1, t2) -> DOUBLE hausdorffDistance(t1, t2) -> DOUBLE For each: (tint, tint) and (tfloat, tfloat) registrations. MEOS bindings: temporal_frechet_distance, temporal_dyntimewarp_distance, temporal_hausdorff_distance. Implementation uses 3 thin wrappers + a single TempTempDoublePred templated helper. similarityPath (table-returning, alignment) is intentionally NOT included — needs DuckDB TableFunction infrastructure (separate follow-up tracked in PR #23). Smoke test: SELECT frechetDistance(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 1.0 SELECT discreteFrechet(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 1.0 SELECT dynTimeWarp(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 2.0 SELECT hausdorffDistance(tfloat '[1@01-01, 5@01-05]', tfloat '[3@01-01, 3@01-05]'); -- 2.0 Stacked on PR #35 (ever/always ordering). Full suite passes (747 assertions, 13 test cases).
nhungoc1508
pushed a commit
that referenced
this pull request
Apr 27, 2026
Adds 8 ScalarFunction registrations for temporal similarity: frechetDistance(t1, t2) -> DOUBLE discreteFrechet(t1, t2) -> DOUBLE (alias of frechetDistance) dynTimeWarp(t1, t2) -> DOUBLE hausdorffDistance(t1, t2) -> DOUBLE For each: (tint, tint) and (tfloat, tfloat) registrations. MEOS bindings: temporal_frechet_distance, temporal_dyntimewarp_distance, temporal_hausdorff_distance. Implementation uses 3 thin wrappers + a single TempTempDoublePred templated helper. similarityPath (table-returning, alignment) is intentionally NOT included — needs DuckDB TableFunction infrastructure (separate follow-up tracked in PR #23). Smoke test: SELECT frechetDistance(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 1.0 SELECT discreteFrechet(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 1.0 SELECT dynTimeWarp(tfloat '[1@01-01, 2@01-02]', tfloat '[2@01-01, 3@01-02]'); -- 2.0 SELECT hausdorffDistance(tfloat '[1@01-01, 5@01-05]', tfloat '[3@01-01, 3@01-05]'); -- 2.0 Stacked on PR #35 (ever/always ordering). Full suite passes (747 assertions, 13 test cases).
Four parity files added in one commit, each as a wholesale-skip
manifest because the underlying surface is unbound in MobilityDuck.
- 025_temporal_tile.test
Skip reason: bins / getBin / valueSplit / timeSplit /
valueTimeSplit not registered. MEOS symbols: span_bins, value_bin,
tnumber_value_split, temporal_time_split,
tnumber_value_time_split. Note: the table-returning split
variants need DuckDB TableFunction infrastructure (not currently
used anywhere in MobilityDuck).
- 026_tnumber_mathfuncs.test
Skip reason: arithmetic operators (+, -, *, /) not registered for
tnumber types — value op tnumber, tnumber op value, tnumber op
tnumber across both base types (tint, tfloat) = 96 missing
ScalarFunction registrations. Plus unary functions abs, deg, rad,
atan, derivative.
- 036_tnumber_distance.test
Skip reason: <-> for tnumber types not registered.
nearestApproachDistance / nad not registered. MEOS symbols:
distance_tnumber_value, distance_tnumber_tnumber, nad_*.
- 038_temporal_similarity.test
Skip reason: frechetDistance, discreteFrechet, dynTimeWarp,
hausdorffDistance, similarityPath all unregistered. Similarity
path returns table — needs TableFunction infrastructure.
Suite: 747 assertions across 17 test cases (4 new files, 0 new
active assertions; each file is a tracked gap manifest).
Member
Author
|
Refreshed against current main:
|
ce5ef06 to
df5744a
Compare
estebanzimanyi
added a commit
that referenced
this pull request
Apr 28, 2026
Single-file inventory of MobilityDB's mobilitydb/test/geo/queries/ surface. Rather than one parity file per upstream regression file, this lists what each file covers, what's bound in MobilityDuck today, and what's missing. Bound surface (per direct audit of src/geo/tgeompoint.cpp): - tgeompoint / tgeometry I/O for instant / discrete / continuous / sequence-set - asText / asEWKT / memSize / interp / round / transform - Constructors (TGEOMPOINT, tgeompointInst, tgeompointSeq, tgeompointSeqSet) - Spatial accessors: getX/Y/Z, length, cumulativeLength, speed, direction, azimuth, angularDifference, trajectory - Topological predicates: e/a/t variants of Contains, Disjoint, Dwithin, Intersects, Touches - Set ops: makeSimple, isSimple, stops - Restrictions: atGeometry, atStbox, atValues, atTime and the matching minus* - Modification: appendInstant, appendSequence, insert, update, deleteTime, merge - Comparison: temporal_eq / temporal_ne / etc. - twCentroid, shortestLine, distance_gs, collect_gs Unbound surface (per upstream regression file, with cross-references to the temporal-side parity-batch PRs that cover the same gap): - 051_stbox: stbox tests (whole file currently skipped in test/sql/stbox.test for DuckDB 1.4 signature issues). - 052_tgeo / 052_tpoint: mostly bound — per-type ports would mirror PRs #13 / #17 / #18 patterns. - 053_*_inout: asMFJSON / asWKB / asHexWKB / asGeoJSON — verify which are bound. - 054_*_compops: same parser blocker as PR #24's 030 (?= / #=). - 056_*_spatialfuncs: bulk bound; setSRID-on-temporal and reference-system accessors missing. - 058_*_tile: same gap as PR #23's 025 but for tspatial. - 060_*_topops: same pattern as PR #25's 032_temporal_topops. - 062_*_posops: same pattern as PR #24's 034_temporal_posops plus spatial-direction operators. - 064_*_distance: <-> for tgeo / tpoint; partially bound (shortestLine, distance_gs). - 066_tpoint_similarity: specialisation of PR #23's 038. - 068_*_aggfuncs: same architectural blocker as PR #21 (no AggregateFunction infra). Suite: 747 assertions, 23 test cases.
2 tasks
The skip block claimed MobilityDB reports `derivative` in value/day while MEOS uses value/second. That was wrong: MobilityDB's SQL wrapper `Temporal_derivative` is a thin pass-through to MEOS with no scaling, and its own regression `mobilitydb/test/temporal/expected/026_tnumber_mathfuncs.test.out` shows `0.000012@...` (value/second). MobilityDuck already matched. Replace the skip block with the correct expectation, mirroring MobilityDB's regression style (`round(derivative(...), 6)`).
nhungoc1508
pushed a commit
that referenced
this pull request
May 4, 2026
Single-file inventory of MobilityDB's mobilitydb/test/geo/queries/ surface. Rather than one parity file per upstream regression file, this lists what each file covers, what's bound in MobilityDuck today, and what's missing. Bound surface (per direct audit of src/geo/tgeompoint.cpp): - tgeompoint / tgeometry I/O for instant / discrete / continuous / sequence-set - asText / asEWKT / memSize / interp / round / transform - Constructors (TGEOMPOINT, tgeompointInst, tgeompointSeq, tgeompointSeqSet) - Spatial accessors: getX/Y/Z, length, cumulativeLength, speed, direction, azimuth, angularDifference, trajectory - Topological predicates: e/a/t variants of Contains, Disjoint, Dwithin, Intersects, Touches - Set ops: makeSimple, isSimple, stops - Restrictions: atGeometry, atStbox, atValues, atTime and the matching minus* - Modification: appendInstant, appendSequence, insert, update, deleteTime, merge - Comparison: temporal_eq / temporal_ne / etc. - twCentroid, shortestLine, distance_gs, collect_gs Unbound surface (per upstream regression file, with cross-references to the temporal-side parity-batch PRs that cover the same gap): - 051_stbox: stbox tests (whole file currently skipped in test/sql/stbox.test for DuckDB 1.4 signature issues). - 052_tgeo / 052_tpoint: mostly bound — per-type ports would mirror PRs #13 / #17 / #18 patterns. - 053_*_inout: asMFJSON / asWKB / asHexWKB / asGeoJSON — verify which are bound. - 054_*_compops: same parser blocker as PR #24's 030 (?= / #=). - 056_*_spatialfuncs: bulk bound; setSRID-on-temporal and reference-system accessors missing. - 058_*_tile: same gap as PR #23's 025 but for tspatial. - 060_*_topops: same pattern as PR #25's 032_temporal_topops. - 062_*_posops: same pattern as PR #24's 034_temporal_posops plus spatial-direction operators. - 064_*_distance: <-> for tgeo / tpoint; partially bound (shortestLine, distance_gs). - 066_tpoint_similarity: specialisation of PR #23's 038. - 068_*_aggfuncs: same architectural blocker as PR #21 (no AggregateFunction infra). Suite: 747 assertions, 23 test cases.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Four parity files added in one commit, each as a wholesale-skip manifest because the underlying MobilityDB surface is entirely unbound in MobilityDuck. The files stand as tracked gap inventories rather than live test assertions.
025_temporal_tile.testbins(<span>, <size>[, <origin>]),getBin,valueSplit,timeSplit,valueTimeSplitspan_bins,value_bin,tnumber_value_split,temporal_time_split,tnumber_value_time_split026_tnumber_mathfuncs.test+ - * /for tnumber × {value, tnumber}; unaryabs,deg,rad,atan,derivativetnumber_add_*,tnumber_sub_*,tnumber_mult_*,tnumber_div_*(96 ScalarFunction registrations needed)036_tnumber_distance.test<->for tnumber types,nearestApproachDistance,nad,shortestLinedistance_tnumber_value,distance_tnumber_tnumber,nad_*038_temporal_similarity.testfrechetDistance,discreteFrechet,dynTimeWarp,hausdorffDistance,similarityPathtemporal_frechet_distance,temporal_dyntimewarp_distance,temporal_hausdorff_distance,temporal_similarity_pathArchitectural callouts
valueSplit/timeSplit/valueTimeSplit(in 025) andsimilarityPath(in 038) all return tables, not scalars. MobilityDuck has noTableFunctionregistrations anywhere in the temporal/geo code; that's a separate infrastructure landing.Test plan
make releasethenTZ=UTC ./build/release/test/unittest "<proj>/test/*"— full suite passes (747 assertions across 17 test cases).Drafted because every file is wholesale-skipped; the value is the manifest, not the assertions.