fork download
  1. (ns grep-n)
  2. (use 'clojure.test)
  3.  
  4. (defn grep-n [n f coll])
  5.  
  6. (deftest grep-n-test
  7. (is (= '(0 1 2)
  8. (grep-n 1 #{1} (range 10))))
  9.  
  10. (is (= '(2 3 4)
  11. (grep-n 1 #{3} (range 10))))
  12.  
  13. (is (= '(4 5 6 7 8)
  14. (grep-n 2 #{6} (range 10))))
  15.  
  16. (is (= '(3 4 5 6 7 12 13 14 15 16)
  17. (grep-n 2 #{5 14} (range 20))))
  18.  
  19. (is (= '(0 1 2 3 4 5 6 7 8)
  20. (grep-n 3 #{3 5} (range 10))))
  21.  
  22. (is (= '(4 5 6)
  23. (grep-n 2 #{4} (range 4 10))))
  24.  
  25. (is (= '(3 4 5 6 7)
  26. (grep-n 2 #(= 0 (mod % 5)) (range 1 10)))))
  27.  
  28. (run-tests)
  29.  
  30. ;; be lazy :)
  31. ;; (take 15 (map println (grep-n 1 #(= 0 (mod % 5)) (iterate #(do (Thread/sleep 1000) (inc %)) 1))))
  32.  
  33. ;; use prop based testing
  34. ;; (require '[clojure.test.check :as tc])
  35. ;; (require '[clojure.test.check.generators :as gen])
  36. ;; (require '[clojure.test.check.properties :as prop])
  37. ;; (def x (gen/sorted-set gen/nat))
  38. ;; (def y (gen/such-that not-empty x))
  39. ;; (def n (gen/such-that #(> % 0) gen/nat))
  40. ;; (def z (gen/bind y (fn [nn] (gen/tuple (gen/return nn) n (gen/large-integer* {:min (inc (apply max nn))})))))
  41. ;; (def grep-n-check
  42. ;; (prop/for-all [[matches n range-end] z]
  43. ;; (= (filter #(< % range-end) (remove neg? (into (sorted-set) (mapcat #(range (- % n) (+ % (inc n))) matches))))
  44. ;; (grep-n n matches (range range-end)))))
Success #stdin #stdout 1.63s 90676KB
stdin
Standard input is empty
stdout
Testing grep-n

FAIL in (grep-n-test) (prog.clj:7)
expected: (= (quote (0 1 2)) (grep-n 1 #{1} (range 10)))
  actual: (not (= (0 1 2) nil))

FAIL in (grep-n-test) (prog.clj:10)
expected: (= (quote (2 3 4)) (grep-n 1 #{3} (range 10)))
  actual: (not (= (2 3 4) nil))

FAIL in (grep-n-test) (prog.clj:13)
expected: (= (quote (4 5 6 7 8)) (grep-n 2 #{6} (range 10)))
  actual: (not (= (4 5 6 7 8) nil))

FAIL in (grep-n-test) (prog.clj:16)
expected: (= (quote (3 4 5 6 7 12 13 14 15 16)) (grep-n 2 #{5 14} (range 20)))
  actual: (not (= (3 4 5 6 7 12 13 14 15 16) nil))

FAIL in (grep-n-test) (prog.clj:19)
expected: (= (quote (0 1 2 3 4 5 6 7 8)) (grep-n 3 #{3 5} (range 10)))
  actual: (not (= (0 1 2 3 4 5 6 7 8) nil))

FAIL in (grep-n-test) (prog.clj:22)
expected: (= (quote (4 5 6)) (grep-n 2 #{4} (range 4 10)))
  actual: (not (= (4 5 6) nil))

FAIL in (grep-n-test) (prog.clj:25)
expected: (= (quote (3 4 5 6 7)) (grep-n 2 (fn* [p1__14#] (= 0 (mod p1__14# 5))) (range 1 10)))
  actual: (not (= (3 4 5 6 7) nil))

Ran 1 tests containing 7 assertions.
7 failures, 0 errors.