pcd-loader-0.3.0.0: tests/SampleLoad.hs
-- |Ensure that a sample PCD file can be loaded.
module Main where
import Control.Lens ((^.))
import qualified Data.Text.IO as T
import qualified Data.Vector as V
import System.Directory (getTemporaryDirectory)
import System.IO (openTempFile, hClose, hSeek, SeekMode(..))
import Test.Framework (defaultMain)
import Test.Framework.Providers.HUnit (hUnitTestToTests)
import Test.HUnit (Test(..), (~?), (~=?))
import SampleData
import PCD.Data
import PCD.Header
testLen :: Header -> V.Vector (V.Vector FieldType) -> Test
testLen header pts = TestLabel "Number of fields" $
TestList [ 4 ~=? length (header^.fields)
, 4 ~=? V.length (V.head pts) ]
testPts :: Header -> V.Vector a -> Test
testPts header pts = TestLabel "Number of points" $
TestList [ 213 ~=? header^.points
, 213 ~=? V.length pts ]
within :: (Num a, Ord a) => a -> a -> a -> Bool
within delta x y = abs (y - x) < delta
testData :: V.Vector (V.Vector FieldType) -> Test
testData pts = TestLabel "Point data" $
TestList [ within 0.001 (-0.23729) lastY ~?
"Last point's Y coordinate" ]
where lastY = unsafeUnwrap (V.last pts V.! 1) :: Float
main :: IO ()
main = do d <- getTemporaryDirectory
(_, h) <- openTempFile d "pcdTest"
T.hPutStr h sampleData
hSeek h AbsoluteSeek 0
(header, _) <- readHeader h
pts <- loadFlexiblePoints header h
defaultMain . hUnitTestToTests $
TestList [testLen header pts, testPts header pts, testData pts]
hClose h