【发布时间】:2022-01-23 09:29:19
【问题描述】:
我正在做一个 Clojure 练习,基本上模拟汽车组装工厂。以下代码是我的“生产”代码。
(ns cars-assemble)
(def success-rate-frequencies [
{ :id 1 :interval #(= % 0), :rate 0 }
{ :id 2 :interval #(and (> % 0) (<= % 4)), :rate (/ 100 100) }
{ :id 3 :interval #(and (>= % 5) (<= % 8)), :rate (/ 90 100) }
{ :id 4 :interval #(= % 9), :rate (/ 80 100) }
{ :id 5 :interval #(>= % 10), :rate (/ 77 100) }
])
(defn get-rate-by-speed-interval [speed]
(let [result (first (filter #((get % :interval) speed) success-rate-frequencies))]
(get result :rate)))
(defn production-rate
"Returns the assembly line's production rate per hour,
taking into account its success rate"
[speed]
(float (* speed (* 221 (get-rate-by-speed-interval speed)))))
(defn working-items
"Calculates how many working cars are produced per minute"
[speed]
(let [production-rate (production-rate speed)]
(if (= speed 0) 0 (int (/ production-rate 60)))))
我的问题是,由于某种原因,当我运行测试时,生产代码返回正确的值,但测试仍然失败。下面我有我的测试示例。
(deftest production-rate-speed-10-test
(testing "Production rate for speed 10"
(is (= 1701.7 (cars-assemble/production-rate 10)))))
这是我的命令lean test的输出:
FAIL in (production-rate-speed-10-test) (cars_assemble_test.clj:27)
Production rate for speed 10
expected: (= 1701.7 (cars-assemble/production-rate 10))
actual: (not (= 1701.7 1701.7))
我试图检查它是否有任何隐藏字符,但没有找到任何东西。
我尝试过的另一件事是手动修改测试文件,将预期值转换为float(如下例所示)。但我不应该更改我的测试文件。
(is (= (float 1701.7) (cars-assemble/production-rate 10)))
【问题讨论】:
标签: unit-testing types clojure type-conversion double