{-# LANGUAGE OverloadedStrings #-} module Futhark.CLI.Datacmp (main) where import qualified Data.ByteString.Lazy.Char8 as BS import System.Exit import Futhark.Test.Values import Futhark.Util.Options main :: String -> [String] -> IO () main :: String -> [String] -> IO () main = () -> [FunOptDescr ()] -> String -> ([String] -> () -> Maybe (IO ())) -> String -> [String] -> IO () forall cfg. cfg -> [FunOptDescr cfg] -> String -> ([String] -> cfg -> Maybe (IO ())) -> String -> [String] -> IO () mainWithOptions () [] String "<file> <file>" [String] -> () -> Maybe (IO ()) f where f :: [String] -> () -> Maybe (IO ()) f [String file_a, String file_b] () = IO () -> Maybe (IO ()) forall a. a -> Maybe a Just (IO () -> Maybe (IO ())) -> IO () -> Maybe (IO ()) forall a b. (a -> b) -> a -> b $ do Maybe [Value] vs_a_maybe <- ByteString -> Maybe [Value] readValues (ByteString -> Maybe [Value]) -> IO ByteString -> IO (Maybe [Value]) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> String -> IO ByteString BS.readFile String file_a Maybe [Value] vs_b_maybe <- ByteString -> Maybe [Value] readValues (ByteString -> Maybe [Value]) -> IO ByteString -> IO (Maybe [Value]) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> String -> IO ByteString BS.readFile String file_b case (Maybe [Value] vs_a_maybe, Maybe [Value] vs_b_maybe) of (Maybe [Value] Nothing, Maybe [Value] _) -> String -> IO () forall a. HasCallStack => String -> a error (String -> IO ()) -> String -> IO () forall a b. (a -> b) -> a -> b $ String "Error reading values from " String -> String -> String forall a. [a] -> [a] -> [a] ++ String file_a (Maybe [Value] _, Maybe [Value] Nothing) -> String -> IO () forall a. HasCallStack => String -> a error (String -> IO ()) -> String -> IO () forall a b. (a -> b) -> a -> b $ String "Error reading values from " String -> String -> String forall a. [a] -> [a] -> [a] ++ String file_b (Just [Value] vs_a, Just [Value] vs_b) -> case [Value] -> [Value] -> [Mismatch] compareValues [Value] vs_a [Value] vs_b of [] -> () -> IO () forall (m :: * -> *) a. Monad m => a -> m a return () [Mismatch] es -> do (Mismatch -> IO ()) -> [Mismatch] -> IO () forall (t :: * -> *) (m :: * -> *) a b. (Foldable t, Monad m) => (a -> m b) -> t a -> m () mapM_ Mismatch -> IO () forall a. Show a => a -> IO () print [Mismatch] es ExitCode -> IO () forall a. ExitCode -> IO a exitWith (ExitCode -> IO ()) -> ExitCode -> IO () forall a b. (a -> b) -> a -> b $ Int -> ExitCode ExitFailure Int 2 f [String] _ () _ = Maybe (IO ()) forall a. Maybe a Nothing