packages feed

cbf-0.1.0.0: test/Main.hs

module Main (main) where

import Control.Applicative (many)
import Data.Binary.Get (getInt32le, runGet)
import Data.ByteString.Lazy qualified as BSL
import Data.CBF (decodePixels, readCBF)
import Data.Vector.Unboxed qualified as V
import Test.Tasty (TestTree, defaultMain, testGroup)
import Test.Tasty.HUnit (assertFailure, testCase)

main :: IO ()
main = defaultMain tests

tests :: TestTree
tests = testGroup "Tests" [unitTests]

unitTests :: TestTree
unitTests =
  testGroup
    "Unit Tests"
    [ testCase "Read example file" do
        contents <- readCBF "test-data/test_lysozyme_001_00200.cbf"
        case contents of
          Left _ -> assertFailure "couldn't read file"
          Right image ->
            case decodePixels image of
              Left e -> assertFailure "couldn't decompress"
              Right pixels -> do
                let decompressedVector = pixels
                referenceOutput <- BSL.readFile "test-data/expected_output.bin"
                let referenceOutputInt32 = runGet (many getInt32le) referenceOutput
                    difference = dropWhile (\(l, r) -> l == r) (zip (zip [0 ..] decompressedVector) (zip [0 ..] (fromIntegral <$> referenceOutputInt32)))
                print (take 10 difference)
                -- V.length decompressedVector @?= length referenceOutputInt32
                -- (fromIntegral <$> referenceOutputInt32) @?= V.toList decompressedVector
    ]