{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE OverloadedStrings #-} module Main where import Data.Aeson import Data.ByteString.Lazy qualified as BS import Data.Kind import Data.Maybe import LrcLib.Client import Test.Tasty import Test.Tasty.HUnit decodeTest :: forall (a :: Type). (FromJSON a, Eq a, Read a, Show a) => FilePath -> TestTree decodeTest file = testCase file $ do decoded <- fromJust . decode @a <$> BS.readFile (file <> ".json") expected <- read @a <$> readFile file decoded @?= expected main :: IO () main = defaultMain . testGroup "" $ [ testGroup "decoding" [ decodeTest @Challenge "test/challenge", decodeTest @TrackData "test/getUrlSuccess", decodeTest @SearchResponse "test/search" ], testCase "challenge solving" $ do let challenge = Challenge {prefix = "PREFIX", target = "000000FF00000000000000000000000000000000000000000000000000000000"} solveChallenge challenge @?= "PREFIX:1944868" ]