   (bench-knn-160000)
   (bench-knn-360000))
 
+;; --- Accuracity tests
+
+(defn test-accuracity
+  []
+  (let [tree (k/create2d (generate-points 4000 20))]
+    (print "[1742 1419]")
+    (pprint (js->clj (.nearest tree #js [1742 1419] 6)))
+    (print "[1742 1420]")
+    (pprint (js->clj (.nearest tree #js [1742 1420] 6)))
+    ))
+
 (defn main
   [& [type]]
-  (bench-init)
-  (bench-knn)
-  #_(cond
+  (cond
     (= type "init")
     (bench-init)
 
     (= type "knn")
     (bench-knn)
 
+    (= type "test")
+    (test-accuracity)
+
     :else
     (println "not implemented")))
 

        (.nearest tree pt 2))
      (js/console.timeEnd "knn:160000"))))

(defn bench-knn-360000
  []
  (let [tree (-> (into-array (generate-points 600))
                 (k/create2d))]
    (dotimes [i 100]
      (js/console.time "knn:360000")
      (let [pt #js [(rand-int 600)

(ns bench.core
  (:require [kdtree.core :as k]
            [cljs.pprint :refer (pprint)]
            [cljs.nodejs :as node]))

(enable-console-print!)

;; --- Helpers

(defn generate-points
  ([n] (generate-points n 1))
  ([n step]
   (into-array
    (for [x (range 0 n step)
          y (range 0 n step)]
      #js [x y]))))

;; --- Index Initialization Bechmark

(defn- bench-init-10000
  []
  (js/console.time "init:10000")
  (let [points (generate-points 1000 10)]
    (println (count points))
    (k/create2d points)
    (js/console.timeEnd "init:10000")))

(defn- bench-init-250000
  []
  (js/console.time "init:250000")
  (let [points (generate-points 5000 10)]
    (println (count points))
    (k/create2d points)
    (js/console.timeEnd "init:250000")))

(defn bench-init
  []
  (bench-init-10000)
  (bench-init-250000))

;; --- Nearest Search Benchmark

(defn- bench-knn-160000
  []
  (let [tree (k/create2d (generate-points 4000 10))]
    (dotimes [i 100]
      (js/console.time "knn:160000")
      (let [pt #js [(rand-int 400)
