From 3db7baa021b6c664a1ad6e4ad7f3952a7c025bf1 Mon Sep 17 00:00:00 2001 From: gmungoc Date: Wed, 16 Nov 2016 12:34:30 +0000 Subject: [PATCH] JAL-2324 fix and tests for comparison of Float.NaN scores --- src/jalview/datamodel/SequenceFeature.java | 4 +- test/jalview/datamodel/SequenceFeatureTest.java | 47 ++++++++++++++++++----- 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/jalview/datamodel/SequenceFeature.java b/src/jalview/datamodel/SequenceFeature.java index c75d6f2..0baa78e 100755 --- a/src/jalview/datamodel/SequenceFeature.java +++ b/src/jalview/datamodel/SequenceFeature.java @@ -208,7 +208,9 @@ public class SequenceFeature } SequenceFeature sf = (SequenceFeature) o; - if (begin != sf.begin || end != sf.end || score != sf.score) + boolean sameScore = Float.isNaN(score) ? Float.isNaN(sf.score) + : score == sf.score; + if (begin != sf.begin || end != sf.end || !sameScore) { return false; } diff --git a/test/jalview/datamodel/SequenceFeatureTest.java b/test/jalview/datamodel/SequenceFeatureTest.java index 2ec824d..5150337 100644 --- a/test/jalview/datamodel/SequenceFeatureTest.java +++ b/test/jalview/datamodel/SequenceFeatureTest.java @@ -112,56 +112,83 @@ public class SequenceFeatureTest assertEquals(sf1.hashCode(), sf2.hashCode()); // changing type breaks equals: + String restores = sf2.getType(); sf2.setType("Type"); assertFalse(sf1.equals(sf2)); + sf2.setType(restores); // changing description breaks equals: - sf2.setType("type"); + restores = sf2.getDescription(); sf2.setDescription("Desc"); assertFalse(sf1.equals(sf2)); + sf2.setDescription(restores); + + // changing score breaks equals: + float restoref = sf2.getScore(); + sf2.setScore(12.4f); + assertFalse(sf1.equals(sf2)); + sf2.setScore(restoref); + + // NaN doesn't match a number + restoref = sf2.getScore(); + sf2.setScore(Float.NaN); + assertFalse(sf1.equals(sf2)); + + // NaN matches NaN + sf1.setScore(Float.NaN); + assertTrue(sf1.equals(sf2)); + sf1.setScore(restoref); + sf2.setScore(restoref); // changing start position breaks equals: - sf2.setDescription("desc"); + int restorei = sf2.getBegin(); sf2.setBegin(21); assertFalse(sf1.equals(sf2)); + sf2.setBegin(restorei); // changing end position breaks equals: - sf2.setBegin(22); + restorei = sf2.getEnd(); sf2.setEnd(32); assertFalse(sf1.equals(sf2)); + sf2.setEnd(restorei); // changing feature group breaks equals: - sf2.setEnd(33); + restores = sf2.getFeatureGroup(); sf2.setFeatureGroup("Group"); assertFalse(sf1.equals(sf2)); + sf2.setFeatureGroup(restores); // changing ID breaks equals: - sf2.setFeatureGroup("group"); + restores = (String) sf2.getValue("ID"); sf2.setValue("ID", "id2"); assertFalse(sf1.equals(sf2)); + sf2.setValue("ID", restores); // changing Name breaks equals: - sf2.setValue("ID", "id"); + restores = (String) sf2.getValue("Name"); sf2.setValue("Name", "Name"); assertFalse(sf1.equals(sf2)); + sf2.setValue("Name", restores); // changing Parent breaks equals: - sf2.setValue("Name", "name"); + restores = (String) sf1.getValue("Parent"); sf1.setValue("Parent", "Parent"); assertFalse(sf1.equals(sf2)); + sf1.setValue("Parent", restores); // changing strand breaks equals: - sf1.setValue("Parent", "parent"); + restorei = sf2.getStrand(); sf2.setStrand("-"); assertFalse(sf1.equals(sf2)); + sf2.setStrand(restorei == 1 ? "+" : "-"); // changing phase breaks equals: - sf2.setStrand("+"); + restores = sf1.getPhase(); sf1.setPhase("2"); assertFalse(sf1.equals(sf2)); + sf1.setPhase(restores); // restore equality as sanity check: - sf1.setPhase("1"); assertTrue(sf1.equals(sf2)); assertTrue(sf2.equals(sf1)); assertEquals(sf1.hashCode(), sf2.hashCode()); -- 1.7.10.2