You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@metron.apache.org by justinleet <gi...@git.apache.org> on 2017/09/22 13:14:12 UTC
[GitHub] metron pull request #681: METRON-1079 Add NaN as a keyword in STELLAR langua...
Github user justinleet commented on a diff in the pull request:
https://github.com/apache/metron/pull/681#discussion_r140489936
--- 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 --
Can you add a test case for 0.0/0.0 is Nan? It's properly calculated based on my playing around, but it's an important enough case that I think it should show up here.
---