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.


---