2014-09-11 36 views
0

我已經生成ARG列表的序列,例如:如何根據一系列參數測試謂詞?

[[a b c] [d e f] [g h i]]

...這樣(map (partial apply f) that-seq)應產生相同的結果列表。我想檢查是否所有這些確實產生了相同的結果。通常情況下,你可以使用are這個宏,但是我沒有一堆字符串來測試:我有一個seq。所以,我想我想要的「等價」(適用於......)。據我所知,我的選擇是:

  • 寫宏
  • 使用every? true?,上有用的錯誤信息放棄。

有沒有更好的方法來做到這一點?

回答

1

使用此更準確的報告

(testing "blake2b defaults are accurate" 
    (doseq [args-variation blake2b-empty-args-variations] 
    (is (= (seq empty-string-digest) 
      (seq (blake2b args-variation))) 
     (str "Args variation: " (seq args-variation))))) 
0

僅供參考,現在,我已經有:

(testing "blake2b defaults are accurate" 
    (let [results (map #(apply blake2b %) blake2b-empty-args-variations)] 
    (is (every? (partial array-eq empty-string-digest) results)))) 
+1

無法原因這個代碼不知道什麼符號的含義。如果它應該說明你的問題,你應該把它作爲問題的一部分。 – 2014-09-11 10:33:39

+0

不是,這是一個解決方案,因此是一個答案。 'blake2b-empty-args-variations'是arg列表的序列;所以,我將'#(apply blake2b%)'映射到該arg列表(期望所有相同的結果,如原始問題中所述)。然後,我檢查這些是我預期的結果。由於期望的返回值是一個'byte []',所以我必須使用array-eq(實際上只是'java.util.Arrays.equals'),而不是普通的舊的'=',它在數組上做了標識。 代碼在這裏:https://github.com/lvh/caesium/blob/7377830ed7a91f3a99e563ee02442c343604b4d8/test/caesium/crypto/generichash_test.clj#L31 – lvh 2014-09-12 12:51:40