Github user ottobackwards commented on a diff in the pull request: https://github.com/apache/metron/pull/681#discussion_r140493668 --- Diff: metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/BasicStellarTest.java --- @@ -251,6 +251,142 @@ public void testNull() { } @Test + public void testNaN(){ + // any equity is false + // https://docs.oracle.com/javase/specs/jls/se6/html/typesValues.html + { + String query = "NaN == NaN"; + Assert.assertFalse(runPredicate(query,new HashMap<>())); + } + { + String query = "5.0 == NaN"; + Assert.assertFalse(runPredicate(query,new HashMap<>())); + } + { + String query = "NULL == NaN"; + Assert.assertFalse(runPredicate(query,new HashMap<>())); + } + { + String query = "'metron' == NaN"; + Assert.assertFalse(runPredicate(query,new HashMap<>())); + } + + // any inequity is true + { + String query = "NaN != NaN"; + Assert.assertTrue(runPredicate(query,new HashMap<>())); + } + { + String query = "5 != NaN"; + Assert.assertTrue(runPredicate(query,new HashMap<>())); + } + { + String query = "'metron' != NaN"; + Assert.assertTrue(runPredicate(query,new HashMap<>())); + } + + // any > >= < <= is false + { + String query = "NaN > 5"; + Assert.assertFalse(runPredicate(query,new HashMap<>())); + } + { + String query = "NaN < 5"; + Assert.assertFalse(runPredicate(query,new HashMap<>())); + } + { + String query = "NaN >= 5"; + Assert.assertFalse(runPredicate(query,new HashMap<>())); + } + { + String query = "NaN <= 5"; + Assert.assertFalse(runPredicate(query,new HashMap<>())); + } + { + String query = "NaN > NaN"; + Assert.assertFalse(runPredicate(query,new HashMap<>())); + } + { + String query = "NaN < NaN"; + Assert.assertFalse(runPredicate(query,new HashMap<>())); + } + { + String query = "NaN >= NaN"; + Assert.assertFalse(runPredicate(query,new HashMap<>())); + } + { + String query = "NaN <= NaN"; + Assert.assertFalse(runPredicate(query,new HashMap<>())); + } + + // all operations + { + String query = "(5 + NaN) != NaN"; + Assert.assertTrue(runPredicate(query,new HashMap<>())); + } + { + String query = "5 + NaN"; + Assert.assertTrue(run(query,new HashMap<>()).toString().equals("NaN")); + } + { + String query = "(5 - NaN) != NaN"; + Assert.assertTrue(runPredicate(query,new HashMap<>())); + } + { + String query = "5 - NaN"; + Assert.assertTrue(run(query,new HashMap<>()).toString().equals("NaN")); + } + { + String query = "(5 / NaN) != NaN"; + Assert.assertTrue(runPredicate(query,new HashMap<>())); + } + { + String query = "5 / NaN"; + Assert.assertTrue(run(query,new HashMap<>()).toString().equals("NaN")); + } + { + String query = "(5 * NaN) != NaN"; + Assert.assertTrue(runPredicate(query,new HashMap<>())); + } + { + String query = "5 * NaN"; + Assert.assertTrue(run(query,new HashMap<>()).toString().equals("NaN")); + } + { + String query = "(NaN + NaN) != NaN"; + Assert.assertTrue(runPredicate(query,new HashMap<>())); + } + { + String query = "NaN + NaN"; + Assert.assertTrue(run(query,new HashMap<>()).toString().equals("NaN")); + } + { + String query = "(NaN - NaN) != NaN"; + Assert.assertTrue(runPredicate(query,new HashMap<>())); + } + { + String query = "NaN - NaN"; + Assert.assertTrue(run(query,new HashMap<>()).toString().equals("NaN")); + } + { + String query = "(NaN * NaN) != NaN"; + Assert.assertTrue(runPredicate(query,new HashMap<>())); + } + { + String query = "NaN * NaN"; + Assert.assertTrue(run(query,new HashMap<>()).toString().equals("NaN")); + } + { + String query = "(NaN / NaN) != NaN"; + Assert.assertTrue(runPredicate(query,new HashMap<>())); + } + { + String query = "NaN / NaN"; + Assert.assertTrue(run(query,new HashMap<>()).toString().equals("NaN")); + } --- End diff -- done
---