-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Geometry equality in Java tests #178
Comments
Perhaps also @msbarry has some insight here? Testing issues that lead to this ticket came from #168 (comment) |
Started to look into this a bit. Found that |
Visualizing the WKT https://wktmap.com in shows that most of the failing geometries are polygons which have collapsed to zero area lines. So this problem appears to be coming from either the input geometries (likely) or the handling of them in https://github.com/ElectronicChartCentre/java-vector-tile. So, I think the solution here is to use |
#180 implements explicit |
JTS geometry does something kind of weird, it has 2 methods For a exact comparison I think you'd want |
@msbarry great, thanks for the followup info. Above you'll see I implemented an explicit |
Currently we do not fully test all these combinations: - Vectorized path + advanced encodings - Vectorized path + without advanced encodings - Non-Vectorized path + advanced encodings - Non-Vectorized path + without advanced encodings This PR starts testing all those paths. The code coverage changes are: - **overall:** `36%`to `45%` - **mlt.converter:** `64%` to `85%` - **mlt.decoder:** `55%` to `71%` In addition this PR includes: - Some refactoring in TestUtils.java to share more code between vectorized and non-vectorized - Improvements to TestUtils.java around geometry comparisons (refs #178) - Improvements to TestUtils.java around property comparisons Finally, this PR does not attempt to solve any bugs. Rather it finds, isolates, and writes tests harnesses to capture them in code. Once bugs are solved in the future it should be easy to update the tests accordingly. TODO: - [x] ~This PR uncovered a number of bugs that do not have open issues and did not have tests that hit them until now. So I need to create following issues to capture fixing these.~ - Added: - #181 - #182 - #183 - #184 - #185 - #186 - [ ] Property nesting in MLT makes comparison to MVT difficult so I disabled it in this test refactor because comparison to MVT is what the decoder tests rely on. My sense is that standalone unit tests of nesting might be more appropriate than including nesting in the decoder tests. Do others agree?
Context
JTS geometries are used for the Java geometry representation. JTS geometries have sophisticated equality methods as is needed given the complexity of geometry storage:
See:
Currently in our tests we use Junit
assertEqual
.Problem
The results of
assertEqual(mltgeometry, mvtgeometry)
do not match always matchassertEquals(true, mltgeometry.equals(mvtgeometry))
Which raises the question of what
assertEqual
is doing under the hood? Is it converting to strings to compare objects? Is it usinggeom.equals
? Something else?Next steps
Overall goal here is to ensure that our Java tests are correctly asserting that MVT geometries can be perfectly round-tripped between MVT and MLT. In other words, that their representations are identical after both are decoded into a given in-memory representation.
I think this is already the case, but we should double-check/ensure it is by ensuring our tests are correctly asserting on equality.
So, how about?
assertEquals(true, mltgeometry.equals(mvtgeometry))
orassertTrue( mltgeometry.equals(mvtgeometry))
?/cc @mactrem @ebrelsford
The text was updated successfully, but these errors were encountered: