module Main where import Graphics.Formats.OFF.Simple import Control.Arrow import Data.Vector ( Vector ) import qualified Data.Vector as V import Test.HUnit ( assertFailure, (@?=) ) import Test.Framework import Test.Framework.Providers.HUnit import System.FilePath import TestData samplePrefix = "samples" fileMatches :: FilePath -> OFF -> Test fileMatches file off = testCase file $ do eoff <- readOFFFile (samplePrefix file) case eoff of Left err -> assertFailure (show err) Right off' -> off' @?= off makeOFF :: ([(Double, Double, Double)], [[Int]]) -> OFF makeOFF (vs, fs) = OFF { vertices = V.fromList vs , faces = V.map (flip Face Nothing) $ V.fromList (map V.fromList fs) } makeOFFC :: ( [(Double, Double, Double)] , [([Int], (Double, Double, Double))]) -> OFF makeOFFC (vs, fs) = OFF { vertices = V.fromList vs , faces = V.map (uncurry Face) $ V.fromList (map (first V.fromList . second Just) fs) } tests = [ "cube.off" `fileMatches` makeOFF cubeData , "cube.offc" `fileMatches` makeOFFC cubecData , "dodec.off" `fileMatches` makeOFF dodecData , "mushroom.off" `fileMatches` makeOFFC mushroomData , "tetra.off" `fileMatches` makeOFF tetraData , "tetra.offc" `fileMatches` makeOFFC tetracData ] main :: IO () main = defaultMain tests