|
1 | 1 | (ns advent-of-code-clj.utils-test
|
2 | 2 | (:require
|
| 3 | + [aoc.test-utils :as tu] |
3 | 4 | [advent-of-code-clj.utils :as utils]
|
4 |
| - [clojure.test :refer [deftest is testing]])) |
| 5 | + [clojure.test :refer [deftest is testing use-fixtures]])) |
5 | 6 |
|
6 |
| -(deftest binary-search-test |
| 7 | +(use-fixtures :once tu/with-instrumentation) |
| 8 | + |
| 9 | +(deftest bisect-test |
7 | 10 | (testing "Finds last valid value"
|
8 | 11 | (let [numbers (vec (range 0 1000000 19))
|
9 |
| - found-index (utils/binary-search #(> 100006 (numbers %)) 0 (dec (count numbers)))] |
| 12 | + found-index (utils/bisect #(> 100006 (numbers %)) 0 (dec (count numbers)))] |
10 | 13 | (is (> (numbers (inc found-index)) 100006 (numbers found-index)))))
|
11 | 14 | (testing "Finds first valid value"
|
12 | 15 | (let [numbers (vec (range 0 1000000 19))
|
13 |
| - found-index (utils/binary-search #(< 100006 (numbers %)) 0 (dec (count numbers)))] |
| 16 | + found-index (utils/bisect #(< 100006 (numbers %)) 0 (dec (count numbers)))] |
14 | 17 | (is (< (numbers (dec found-index)) 100006 (numbers found-index)))))
|
15 | 18 | (testing "Inverted greater-than/less-than does not find same value"
|
16 | 19 | (let [numbers (vec (range 0 1000000 19))
|
17 |
| - found-index (utils/binary-search #(< 100006 (numbers %)) 0 (dec (count numbers))) |
18 |
| - found-index-2 (utils/binary-search #(> 100006 (numbers %)) 0 (dec (count numbers)))] |
| 20 | + found-index (utils/bisect #(< 100006 (numbers %)) 0 (dec (count numbers))) |
| 21 | + found-index-2 (utils/bisect #(> 100006 (numbers %)) 0 (dec (count numbers)))] |
19 | 22 | (is (not= found-index found-index-2)))
|
20 | 23 | (let [numbers (vec (range 0 1000000))
|
21 | 24 | middle-value (/ 1000000 2)
|
22 |
| - found-index (utils/binary-search #(<= middle-value (numbers %)) 0 (dec (count numbers))) |
23 |
| - found-index-2 (utils/binary-search #(> middle-value (numbers %)) 0 (dec (count numbers)))] |
| 25 | + found-index (utils/bisect #(<= middle-value (numbers %)) 0 (dec (count numbers))) |
| 26 | + found-index-2 (utils/bisect #(> middle-value (numbers %)) 0 (dec (count numbers)))] |
24 | 27 | (is (= 500000 found-index))
|
25 | 28 | (is (= 499999 found-index-2))
|
26 | 29 | (is (not= found-index found-index-2))))
|
27 | 30 | (testing "Throws when no value can be found"
|
28 | 31 | (let [numbers (vec (range 0 1000000 19))]
|
29 |
| - (is (thrown? Exception (utils/binary-search #(= 199 (numbers %)) 0 (dec (count numbers)))))) |
| 32 | + (is (thrown? Exception (utils/bisect #(= 199 (numbers %)) 0 (dec (count numbers)))))) |
30 | 33 | (let [numbers (vec (repeat 1000 0))]
|
31 |
| - (is (thrown? Exception (utils/binary-search #(= 0 (numbers %)) 0 (dec (count numbers)))))) |
| 34 | + (is (thrown? Exception (utils/bisect #(= 0 (numbers %)) 0 (dec (count numbers)))))) |
32 | 35 | (let [numbers (vec (concat (range 0 400) (range 1000 0) (range 0 400)))]
|
33 |
| - (is (thrown? Exception (utils/binary-search #(> (numbers %) 500) 0 (dec (count numbers)))))))) |
| 36 | + (is (thrown? Exception (utils/bisect #(> (numbers %) 500) 0 (dec (count numbers)))))))) |
0 commit comments