module Main where
import qualified Haskore.Interface.SuperCollider.Performance as SCPf
import qualified Haskore.Interface.SuperCollider.Note as SCNote
import Haskore.Music hiding (repeat, reverse)
import Haskore.Melody as Melody
import Haskore.Basic.Duration (wn, qn, en, (%+), )
import qualified Test.HUnit as HUnit
propSuperColliderEventsFromNotes :: MidiMusic.T -> Bool
propSuperColliderEventsFromNotes music =
let notes =
PfBE.fromPaddedPerformance SCNote.fromGMNote $
(FancyPerformance.paddedFromMusic music ::
Performance.Padded NonNegW.Rational Rational MidiMusic.Note)
in SCPf.fixNodeIds (SCPf.eventsFromNotesQueue notes) ==
(SCPf.fixNodeIds (SCPf.eventsFromNotesEither notes)
:: SCPf.T NonNegW.Rational)
testSuperColliderInfinitePerformance :: HUnit.Test
testSuperColliderInfinitePerformance =
let -- mel = Music.repeat (a 0 wn () +:+ b 0 wn ())
mel = a 0 wn () +:+ b 1 wn () =:= rest qn +:+ mel
pf = SCPf.fixNodeIds (SCPf.fromMusic SCNote.fromGMNote (withPiano mel))
:: SCPf.T NonNegW.Double
in HUnit.TestCase
(HUnit.assertBool "infinite performance"
(testShowInf 200 pf))
testSuperCollider :: HUnit.Test
testSuperCollider =
HUnit.TestLabel "supercollider" $ HUnit.TestList $
-- fails for time of type Double probably because of rounding errors
testUnit "eventsFromNotes" propSuperColliderEventsFromNotes :
testSuperColliderInfinitePerformance :
[]
main :: IO ()
main = return ()