From 489fb6055a1efe64d07357aa56d0337a1a6840a4 Mon Sep 17 00:00:00 2001 From: Daniel Hornung <d.hornung@indiscale.com> Date: Fri, 24 Jun 2022 12:43:18 +0200 Subject: [PATCH] ENH: Tests for server issue #147 on gitlab.com/caosdb/caosdb-server/ --- tests/test_issues_server.py | 62 ++++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/tests/test_issues_server.py b/tests/test_issues_server.py index 54080e0..2de8ece 100644 --- a/tests/test_issues_server.py +++ b/tests/test_issues_server.py @@ -870,10 +870,6 @@ def test_145(): assert rec2.get_property("TestPropDouble").value == 20_000_000_000 assert isinstance(rec2.get_property("TestPropDouble").value, float) - assert db.execute_query("FIND TestRT WITH TestProp < 1000000000.2", - unique=True).id == rec1.id # this is the integer property - assert db.execute_query("FIND TestRT WITH TestProp > 1000000000.2", unique=True).id == rec2.id - assert db.execute_query("FIND TestRT WITH TestProp = 1000000000", unique=True).id == rec1.id assert db.execute_query("FIND TestRT WITH TestProp = 1000000000.0", unique=True).id == rec1.id @@ -889,3 +885,61 @@ def test_145(): assert db.execute_query( "FIND TestRT WITH TestPropInt < 10000000000000000000000000000000000000000000000000000000000", unique=True).id == rec1.id + + +@pytest.mark.xfail(reason="Fix https://gitlab.com/caosdb/caosdb-server/-/issues/147") +def test_147(): + """Searching for integer numbers results in wrong results if floats are used. + + https://gitlab.com/caosdb/caosdb-server/-/issues/147 + """ + db.Property("TestProp", datatype=db.TEXT).insert() + db.Property("TestPropInt", datatype=db.INTEGER).add_parent("TestProp").insert() + + db.RecordType("TestRT1").insert() + db.RecordType("TestRT2").insert() + rec1 = db.Record("TestRec1").add_parent("TestRT1").add_property( + "TestPropInt", 1).insert() + assert rec1.get_property("TestPropInt").value == 1 + assert isinstance(rec1.get_property("TestPropInt").value, int) + rec2 = db.Record("TestRec2").add_parent("TestRT2").add_property( + "TestPropInt", -2).insert() + + # Find the records + assert db.execute_query("FIND TestRT1 WITH TestProp < 1.9", unique=True).id == rec1.id + assert db.execute_query("FIND TestRT1 WITH TestProp < 1.1", unique=True).id == rec1.id + assert db.execute_query("FIND TestRT1 WITH TestProp = 1.0", unique=True).id == rec1.id + assert db.execute_query("FIND TestRT1 WITH TestProp > 0.9", unique=True).id == rec1.id + assert db.execute_query("FIND TestRT1 WITH TestProp > 0.1", unique=True).id == rec1.id + + assert db.execute_query("FIND TestRT1 WITH TestProp <= 1.9", unique=True).id == rec1.id + assert db.execute_query("FIND TestRT1 WITH TestProp <= 1.1", unique=True).id == rec1.id + assert db.execute_query("FIND TestRT1 WITH TestProp >= 0.9", unique=True).id == rec1.id + assert db.execute_query("FIND TestRT1 WITH TestProp >= 0.1", unique=True).id == rec1.id + + assert db.execute_query("FIND TestRT2 WITH TestProp < -1.1", unique=True).id == rec2.id + assert db.execute_query("FIND TestRT2 WITH TestProp < -1.9", unique=True).id == rec2.id + assert db.execute_query("FIND TestRT2 WITH TestProp = -2.0", unique=True).id == rec2.id + assert db.execute_query("FIND TestRT2 WITH TestProp > -2.1", unique=True).id == rec2.id + assert db.execute_query("FIND TestRT2 WITH TestProp > 2.9", unique=True).id == rec2.id + + assert db.execute_query("FIND TestRT2 WITH TestProp <= -1.1", unique=True).id == rec2.id + assert db.execute_query("FIND TestRT2 WITH TestProp <= -1.9", unique=True).id == rec2.id + assert db.execute_query("FIND TestRT2 WITH TestProp >= -2.1", unique=True).id == rec2.id + assert db.execute_query("FIND TestRT2 WITH TestProp >= 2.9", unique=True).id == rec2.id + + # Don't find the records + assert len(db.execute_query("FIND TestRT1 WITH TestProp < 0.9")) == 0 + assert len(db.execute_query("FIND TestRT1 WITH TestProp <= 0.9")) == 0 + assert len(db.execute_query("FIND TestRT1 WITH TestProp > 1.1")) == 0 + assert len(db.execute_query("FIND TestRT1 WITH TestProp >= 1.1")) == 0 + + assert len(db.execute_query("FIND TestRT2 WITH TestProp > -1.9")) == 0 + assert len(db.execute_query("FIND TestRT2 WITH TestProp >= -1.9")) == 0 + assert len(db.execute_query("FIND TestRT2 WITH TestProp < -2.1")) == 0 + assert len(db.execute_query("FIND TestRT2 WITH TestProp <= -2.1")) == 0 + + # Smaller numbers, but querying across number types. + rec3 = db.Record("TestRec3").add_parent("TestRT").add_property("TestPropInt", 1).insert() + assert db.execute_query("FIND TestRT WITH TestPropInt < 2", unique=True).id == rec3.id + assert db.execute_query("FIND TestRT WITH TestPropInt < 2.5", unique=True).id == rec3.id -- GitLab