Skip to content

Instantly share code, notes, and snippets.

@benkolera
Created April 19, 2011 22:40
Show Gist options
  • Save benkolera/929898 to your computer and use it in GitHub Desktop.
Save benkolera/929898 to your computer and use it in GitHub Desktop.
import Test.QuickCheck
fizzBuzzinator a
| (mod a 15) == 0 = "fizzbuzz"
| (mod a 3) == 0 = "fizz"
| (mod a 5) == 0 = "buzz"
| otherwise = show a
fizzBuzz xs = unlines (map fizzBuzzinator xs)
main = do putStrLn (fizzBuzz [1..100])
-- Test Cases
testNumbers = forAll (choose (1,100)::Gen Int)
pred_nonDiv x = ((mod x 3) > 0 && (mod x 5) > 0)
pred_div3 x = ((mod x 3) == 0 && (mod x 5) > 0)
pred_div5 x = ((mod x 3) > 0 && (mod x 5) == 0)
pred_divBoth x = ((mod x 3) == 0 && (mod x 5) == 0)
prop_num x = (pred_nonDiv x) ==> (fizzBuzzinator x) == (show x)
prop_fizz x = (pred_div3 x) ==> (fizzBuzzinator x) == "fizz"
prop_buzz x = (pred_div5 x) ==> (fizzBuzzinator x) == "buzz"
prop_fizzbuzz x = (pred_divBoth x) ==> (fizzBuzzinator x) == "fizzbuzz"
tests = do
quickCheck (testNumbers $ prop_num)
quickCheck (testNumbers $ prop_fizz)
quickCheck (testNumbers $ prop_buzz)
quickCheck (testNumbers $ prop_fizzbuzz)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment