packages feed

hscdio-0.1.0.0: test/Test/Libcdio/Upstream/Sound/Track.hs

{-|
Description:    

Copyright:      (c) 2020 Sam May
License:        GPL-3.0-or-later
Maintainer:     ag@eitilt.life

Stability:      experimental
Portability:    portable
-}
module Test.Libcdio.Upstream.Sound.Track (tests) where


import qualified Test.HUnit as U
import Test.HUnit ( (@?), (@=?), (~:) )

import qualified Control.Monad as M

import qualified Data.Maybe as Y

import Sound.Libcdio.Track

import Test.Libcdio.Upstream.Sound.Common

import qualified Test.Libcdio.Upstream.Foreign.Pregap as Foreign


tests :: U.Test
tests = "Sound.Libcdio.Test.Track" ~: U.TestList
    [ gaps
    , address
    ]

gaps :: U.Test
gaps = "Pregap lengths" ~: U.TestList $ map (\(_,b,c) -> checkGap b c) Foreign.gaps
  where checkGap f gs = testCdio [f] . const . M.forM gs $ \(t, g) -> do
            p <- pregap t
            return $ g @=? p

address :: U.Test
address = "Sector addressing" ~: testCdio ["cdda.cue"] . const $ do
    t <- trackAt 1000
    let t' = Y.isNothing t @? "Overlarge addresses aren't caught"
    
    ts <- mapM trackAt $ 301 : [0..9]
    let ts' = mapM_ (Just 1 @=?) ts
    
    l <- trackAt 302
    let l' = Just DiscLeadout @=? l
    
    return [t', ts', l']