module QCNote (qcNoteTests) where import Test.QuickCheck.Batch import Test.QuickCheck import Music.Diatonic instance Arbitrary Note where arbitrary = do n <- elements [C, D, E, F, G, A, B] a <- elements [flat.flat, flat, natural, sharp, sharp.sharp] return (a n) coarbitrary = error "Not implemented" prop_note_up_down n = (raise . lower $ n :: Note) == n prop_note_down_up n = (lower . raise $ n :: Note) == n prop_note_next n = (head . drop 7 . iterate next $ n) == natural n prop_note_prev n = (head . drop 7 . iterate prev $ n) == natural n prop_note_show_read n = (read . show $ n) == n options = TestOptions { no_of_tests = 100, length_of_tests = 0, debug_tests = False } qcNoteTests = do runTests "Music.Diatonic.Note" options [ run prop_note_up_down , run prop_note_down_up , run prop_note_next , run prop_note_prev ]