hugoduncan/criterium

NullPointerException in criterium.core/report-result

kumarshantanu opened this issue · 1 comments

Steps to reproduce:

$ lein try criterium "0.4.3"
nREPL server started on port 56595 on host 127.0.0.1 - nrepl://127.0.0.1:56595
REPL-y 0.3.5, nREPL 0.2.6
Clojure 1.6.0
Java HotSpot(TM) 64-Bit Server VM 1.7.0_76-b13
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

user=> (require '[criterium.core :as c])
nil
user=> (c/report-result (c/bench (str "foo" "bar" "baz")))
WARNING: JVM argument TieredStopAtLevel=1 is active, and may lead to unexpected results as JIT C2 compiler may not be active. See http://www.slideshare.net/CharlesNutter/javaone-2012-jvm-jit-for-dummies.
WARNING: Final GC required 2.741481629020981 % of runtime
Evaluation count : 404150280 in 60 samples of 6735838 calls.

NullPointerException   clojure.lang.Numbers.ops (Numbers.java:961)
             Execution time mean : 151.335605 ns
    Execution time std-deviation : 8.225372 ns
   Execution time lower quantile : 143.469293 ns ( 2.5%)
   Execution time upper quantile : 170.216076 ns (97.5%)
                   Overhead used : 8.760021 ns

Found 4 outliers in 60 samples (6.6667 %)
    low-severe   3 (5.0000 %)
    low-mild     1 (1.6667 %)
 Variance from outliers : 40.1362 % Variance is moderately inflated by outliers

When I created a project and tested the same Criterium bench, this is the stack trace I got:

Uncaught exception, not in assertion.
expected: nil
  actual: java.lang.NullPointerException: null
 at clojure.lang.Numbers.ops (Numbers.java:961)
    clojure.lang.Numbers.multiply (Numbers.java:146)
    criterium.core$report_result.doInvoke (core.clj:964)
    clojure.lang.RestFn.invoke (RestFn.java:410)
    stringer.core_test/fn (core_test.clj:11)
    clojure.test$test_var$fn__7187.invoke (test.clj:704)
    clojure.test$test_var.invoke (test.clj:704)
    clojure.test$test_vars$fn__7209$fn__7214.invoke (test.clj:722)
    clojure.test$default_fixture.invoke (test.clj:674)
    clojure.test$test_vars$fn__7209.invoke (test.clj:722)
    clojure.test$default_fixture.invoke (test.clj:674)
    clojure.test$test_vars.invoke (test.clj:718)
    clojure.test$test_all_vars.invoke (test.clj:728)
    clojure.test$test_ns.invoke (test.clj:747)
    clojure.core$map$fn__4245.invoke (core.clj:2559)
    clojure.lang.LazySeq.sval (LazySeq.java:40)
    clojure.lang.LazySeq.seq (LazySeq.java:49)
    clojure.lang.Cons.next (Cons.java:39)
    clojure.lang.RT.boundedLength (RT.java:1654)
    clojure.lang.RestFn.applyTo (RestFn.java:130)
    clojure.core$apply.invoke (core.clj:626)
    clojure.test$run_tests.doInvoke (test.clj:762)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invoke (core.clj:624)
    user$eval89$fn__144$fn__175.invoke (form-init8424183465847974689.clj:1)
    user$eval89$fn__144$fn__145.invoke (form-init8424183465847974689.clj:1)
    user$eval89$fn__144.invoke (form-init8424183465847974689.clj:1)
    user$eval89.invoke (form-init8424183465847974689.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:6703)
    clojure.lang.Compiler.eval (Compiler.java:6693)
    clojure.lang.Compiler.load (Compiler.java:7130)
    clojure.lang.Compiler.loadFile (Compiler.java:7086)
    clojure.main$load_script.invoke (main.clj:274)
    clojure.main$init_opt.invoke (main.clj:279)
    clojure.main$initialize.invoke (main.clj:307)
    clojure.main$null_opt.invoke (main.clj:342)
    clojure.main$main.doInvoke (main.clj:420)
    clojure.lang.RestFn.invoke (RestFn.java:421)
    clojure.lang.Var.invoke (Var.java:383)
    clojure.lang.AFn.applyToHelper (AFn.java:156)
    clojure.lang.Var.applyTo (Var.java:700)
    clojure.main.main (main.java:37)

Oops, noticed that report-result is used with benchmark in the bench macro. Sorry for the false alarm.