(ns fizzbuzz-pbt.core-test
  (:require
    [midje.sweet :refer :all]
    [clojure.set :as set]
    [clojure.test.check.generators :as gen]
    [midje.experimental :refer [for-all]]
    [fizzbuzz-pbt.core :as sut]))

(defn- multiples-of [n]
  (iterate #(+ % n) n))

(defn- fizzbuzz-for [n]
  (nth (sut/fizzbuzz) (dec n)))

(def multiples-of-3 (set (take-while #(< % 101) (multiples-of 3))))

(def multiples-of-5 (set (take-while #(< % 101) (multiples-of 5))))

(facts
  "about fizzbuzz"

  (fact
    "multiples of 3 but not 5 are Fizz"
    (for-all
      [n (gen/elements
           (set/difference
             multiples-of-3
             multiples-of-5))]
      {:num-tests 100}
      (fizzbuzz-for n) => "Fizz")))