From 66ab694aa31a52441b9006a8fa7226ee3ba46f5e Mon Sep 17 00:00:00 2001 From: Tomas Stupka <tomas.stupka@oracle.com> Date: Wed, 7 Feb 2018 15:44:56 +0100 Subject: [PATCH] do not report NaNs if log parameter already is NaN --- .../r/nodes/builtin/base/LogFunctions.java | 4 +- .../truffle/r/test/ExpectedTestOutput.test | 56 +++++++++++++++++-- .../r/test/builtins/TestBuiltin_log.java | 9 ++- .../r/test/builtins/TestBuiltin_log10.java | 4 +- .../r/test/builtins/TestBuiltin_log1p.java | 8 ++- .../r/test/builtins/TestBuiltin_log2.java | 7 ++- 6 files changed, 77 insertions(+), 11 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LogFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LogFunctions.java index 59ba9f961e..ba7e5e0efb 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LogFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LogFunctions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -239,7 +239,7 @@ public class LogFunctions { @TruffleBoundary private double logb(double x, double base, RBaseNode[] warningCtx) { double logx = Math.log(x); - if (Double.isNaN(logx)) { + if (!Double.isNaN(x) && Double.isNaN(logx)) { warningCtx[0] = this; } if (base == Math.E) { diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test index 27a1af0f79..6b05085434 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test @@ -36036,6 +36036,30 @@ Error in lockEnvironment("foo", TRUE) : not an environment #{ log(1) } [1] 0 +##com.oracle.truffle.r.test.builtins.TestBuiltin_log.testLog# +#{ log(1, NA) } +[1] NA + +##com.oracle.truffle.r.test.builtins.TestBuiltin_log.testLog# +#{ log(1, NaN) } +[1] NaN + +##com.oracle.truffle.r.test.builtins.TestBuiltin_log.testLog# +#{ log(NA) } +[1] NA + +##com.oracle.truffle.r.test.builtins.TestBuiltin_log.testLog# +#{ log(NA, NA) } +[1] NA + +##com.oracle.truffle.r.test.builtins.TestBuiltin_log.testLog# +#{ log(NaN) } +[1] NaN + +##com.oracle.truffle.r.test.builtins.TestBuiltin_log.testLog# +#{ log(NaN, NaN) } +[1] NaN + ##com.oracle.truffle.r.test.builtins.TestBuiltin_log.testLog# #{ log(c(0,1)) } [1] -Inf 0 @@ -36561,6 +36585,14 @@ NaNs produced #{ log10(100) } [1] 2 +##com.oracle.truffle.r.test.builtins.TestBuiltin_log10.testLog10# +#{ log10(NA) } +[1] NA + +##com.oracle.truffle.r.test.builtins.TestBuiltin_log10.testLog10# +#{ log10(NaN) } +[1] NaN + ##com.oracle.truffle.r.test.builtins.TestBuiltin_log10.testLog10# #{ log10(c(0,1)) } [1] -Inf 0 @@ -36656,6 +36688,14 @@ sal spi wha +##com.oracle.truffle.r.test.builtins.TestBuiltin_log1p.testlog1p# +#log1p(NA) +[1] NA + +##com.oracle.truffle.r.test.builtins.TestBuiltin_log1p.testlog1p# +#log1p(NaN) +[1] NaN + ##com.oracle.truffle.r.test.builtins.TestBuiltin_log1p.testlog1p1# #argv <- list(c(-0.160475096572577, -0.953101214495634, -0.329547420118877, -0.234819677566528, -0.108178529791777, -0.0994458210555148, -0.282992873965743, -0.731707656126625, -0.866467764292465, -0.76039953639421, -0.3580569675068, -0.52382260076554, -0.240530699925064, -0.236619747356161, -0.811827419307205, -0.154911720192001, -0.97472580847241, -0.464016625026599, -0.58493655376716, -0.230096919024049));log1p(argv[[1]]); [1] -0.1749191 -3.0597635 -0.3998023 -0.2676438 -0.1144893 -0.1047450 @@ -36676,10 +36716,6 @@ Error in log1p(c(1 + (0+1i), -1 - (0+1i))) : #{ as.integer(log2(6)*1000000) } [1] 2584962 -##com.oracle.truffle.r.test.builtins.TestBuiltin_log2.testLog2# -#{ log10(c(1+1i, -1-1i)) } -[1] 0.150515+0.3410941i 0.150515-1.0232823i - ##com.oracle.truffle.r.test.builtins.TestBuiltin_log2.testLog2# #{ log2(0) } [1] -Inf @@ -36696,10 +36732,22 @@ Error in log1p(c(1 + (0+1i), -1 - (0+1i))) : #{ log2(4) } [1] 2 +##com.oracle.truffle.r.test.builtins.TestBuiltin_log2.testLog2# +#{ log2(NA) } +[1] NA + +##com.oracle.truffle.r.test.builtins.TestBuiltin_log2.testLog2# +#{ log2(NaN) } +[1] NaN + ##com.oracle.truffle.r.test.builtins.TestBuiltin_log2.testLog2# #{ log2(c(0,1)) } [1] -Inf 0 +##com.oracle.truffle.r.test.builtins.TestBuiltin_log2.testLog2# +#{ log2(c(1+1i, -1-1i)) } +[1] 0.5+1.13309i 0.5-3.39927i + ##com.oracle.truffle.r.test.builtins.TestBuiltin_log2.testlog21# #argv <- list(48L);log2(argv[[1]]); [1] 5.584963 diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log.java index 0b69eddf0a..68ba4c31d0 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2012-2014, Purdue University - * Copyright (c) 2013, 2017, Oracle and/or its affiliates + * Copyright (c) 2013, 2018, Oracle and/or its affiliates * * All rights reserved. */ @@ -33,6 +33,13 @@ public class TestBuiltin_log extends TestBase { assertEval("{ round( log(10,10), digits = 5 ) }"); assertEval("{ log(c(2,3), NA) } "); assertEval("{ log(c(2,3), 0/0) } "); + + assertEval("{ log(NaN) }"); + assertEval("{ log(NA) }"); + assertEval("{ log(1, NaN) }"); + assertEval("{ log(1, NA) }"); + assertEval("{ log(NaN, NaN) }"); + assertEval("{ log(NA, NA) }"); } @Test diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log10.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log10.java index a7cf88d1a1..9106aecd76 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log10.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log10.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2012-2014, Purdue University - * Copyright (c) 2013, 2016, Oracle and/or its affiliates + * Copyright (c) 2013, 2018, Oracle and/or its affiliates * * All rights reserved. */ @@ -66,5 +66,7 @@ public class TestBuiltin_log10 extends TestBase { assertEval("{ x <- c(a=1, b=10) ; round( c(log(x), log10(x), log2(x)), digits=5 ) }"); assertEval("{ log10(c(1+1i, -1-1i)) }"); + assertEval("{ log10(NaN) }"); + assertEval("{ log10(NA) }"); } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log1p.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log1p.java index 4c5d09896c..4c7d79fd08 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log1p.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log1p.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2014, Purdue University - * Copyright (c) 2014, 2016, Oracle and/or its affiliates + * Copyright (c) 2014, 2018, Oracle and/or its affiliates * * All rights reserved. */ @@ -31,4 +31,10 @@ public class TestBuiltin_log1p extends TestBase { public void testlog1p3() { assertEval(Ignored.ReferenceError, "log1p(c(1+1i,-1-1i))"); } + + @Test + public void testlog1p() { + assertEval("log1p(NaN)"); + assertEval("log1p(NA)"); + } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log2.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log2.java index 22f4772cc9..7ed1236ae0 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log2.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_log2.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2012-2014, Purdue University - * Copyright (c) 2013, 2016, Oracle and/or its affiliates + * Copyright (c) 2013, 2018, Oracle and/or its affiliates * * All rights reserved. */ @@ -47,6 +47,9 @@ public class TestBuiltin_log2 extends TestBase { assertEval("{ log2(4) } "); assertEval("{ as.integer(log2(6)*1000000) } "); - assertEval("{ log10(c(1+1i, -1-1i)) }"); + assertEval("{ log2(c(1+1i, -1-1i)) }"); + + assertEval("{ log2(NaN) }"); + assertEval("{ log2(NA) }"); } } -- GitLab