From 77f12f8b06535f9d2665296c42991c6c84863c30 Mon Sep 17 00:00:00 2001 From: J Smith Date: Fri, 3 Jan 2014 12:36:54 -0400 Subject: [PATCH] Loosen up the Geos::Geometry#== operator on non-Geometry comparisons. The #eql? method still behaves strictly and does type checking as before, but the == operator has been loosened to allow for more generalized comparisons, akin to comparing numeric values to Strings and the like. --- lib/ffi-geos/geometry.rb | 9 ++++++++- test/geometry_tests.rb | 12 +++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/ffi-geos/geometry.rb b/lib/ffi-geos/geometry.rb index 42f764e..dfabae8 100644 --- a/lib/ffi-geos/geometry.rb +++ b/lib/ffi-geos/geometry.rb @@ -332,9 +332,16 @@ def eql?(geom) check_geometry(geom) bool_result(FFIGeos.GEOSEquals_r(Geos.current_handle, self.ptr, geom.ptr)) end - alias :== :eql? alias :equals? :eql? + def ==(geom) + if geom.is_a?(Geos::Geometry) + self.eql?(geom) + else + false + end + end + def eql_exact?(geom, tolerance) check_geometry(geom) bool_result(FFIGeos.GEOSEqualsExact_r(Geos.current_handle, self.ptr, geom.ptr, tolerance)) diff --git a/test/geometry_tests.rb b/test/geometry_tests.rb index 4a4fbe0..92c75e6 100644 --- a/test/geometry_tests.rb +++ b/test/geometry_tests.rb @@ -1581,11 +1581,21 @@ def test_eql geom_a = read('POINT(1.0 1.0)') geom_b = read('POINT(2.0 2.0)') - %w{ eql? equals? == }.each do |method| + %w{ eql? equals? }.each do |method| + assert(geom_a.send(method, geom_a), "Expected geoms to be equal using #{method}") refute(geom_a.send(method, geom_b), "Expected geoms to not be equal using #{method}") end end + def test_equals_operator + geom_a = read('POINT(1.0 1.0)') + geom_b = read('POINT(2.0 2.0)') + + assert(geom_a == geom_a, "Expected geoms to be equal using ==") + refute(geom_a == geom_b, "Expected geoms to not be equal using ==") + refute(geom_a == "test", "Expected geoms to not be equal using ==") + end + def test_eql_exact geom_a = read('POINT(1.0 1.0)') geom_b = read('POINT(2.0 2.0)')