packages feed

hw-json-0.2.0.1: test/HaskellWorks/Data/Json/CorpusSpec.hs

{-# LANGUAGE BangPatterns               #-}
{-# LANGUAGE ExplicitForAll             #-}
{-# LANGUAGE FlexibleContexts           #-}
{-# LANGUAGE FlexibleInstances          #-}
{-# LANGUAGE InstanceSigs               #-}
{-# LANGUAGE MultiParamTypeClasses      #-}
{-# LANGUAGE NoMonomorphismRestriction  #-}
{-# LANGUAGE OverloadedStrings          #-}
{-# LANGUAGE ScopedTypeVariables        #-}

{-# OPTIONS_GHC -fno-warn-missing-signatures #-}

module HaskellWorks.Data.Json.CorpusSpec(spec) where

import           Control.Monad
import qualified Data.ByteString                                            as BS
import qualified Data.Vector.Storable                                       as DVS
import           Data.Word
import           HaskellWorks.Data.Bits.BitShown
import           HaskellWorks.Data.Bits.FromBitTextByteString
import           HaskellWorks.Data.Json.Succinct.Cursor                     as C
import           HaskellWorks.Data.Succinct.BalancedParens.Simple
import           HaskellWorks.Data.Vector.VectorLike
import           Test.Hspec
import           HaskellWorks.Data.Bits

import           HaskellWorks.Data.FromByteString

{-# ANN module ("HLint: ignore Redundant do"        :: String) #-}
{-# ANN module ("HLint: ignore Reduce duplication"  :: String) #-}
{-# ANN module ("HLint: redundant bracket"          :: String) #-}

spec :: Spec
spec = describe "HaskellWorks.Data.Json.Corpus" $ do
  it "Corpus 5000B loads properly" $ do
    inJsonBS                    <- BS.readFile "corpus/5000B.json"
    inInterestBitsBS            <- BS.readFile "corpus/5000B.ib"
    inInterestBalancedParensBS  <- BS.readFile "corpus/5000B.bp"
    let inInterestBits            = fromBitTextByteString inInterestBitsBS
    let inInterestBalancedParens  = fromBitTextByteString inInterestBalancedParensBS
    let !cursor = fromByteString inJsonBS :: JsonCursor BS.ByteString (BitShown (DVS.Vector Word64)) (SimpleBalancedParens (DVS.Vector Word64))
    let text                    = cursorText      cursor
    let ib                      = interests       cursor
    let SimpleBalancedParens bp = balancedParens  cursor
    text `shouldBe` inJsonBS
    ib `shouldBe` BitShown inInterestBits
    bp `shouldBe` inInterestBalancedParens
  it "issue-0001 loads properly" $ do
    inJsonBS                    <- BS.readFile "corpus/issue-0001.json"
    inInterestBitsBS            <- BS.readFile "corpus/issue-0001.ib"
    inInterestBalancedParensBS  <- BS.readFile "corpus/issue-0001.bp"
    let inInterestBits            = fromBitTextByteString inInterestBitsBS
    let inInterestBalancedParens  = fromBitTextByteString inInterestBalancedParensBS
    let !cursor = fromByteString inJsonBS :: JsonCursor BS.ByteString (BitShown (DVS.Vector Word64)) (SimpleBalancedParens (DVS.Vector Word64))
    let text                    = cursorText      cursor
    let ib                      = interests       cursor
    let SimpleBalancedParens bp = balancedParens  cursor
    text `shouldBe` inJsonBS
    ib `shouldBe` BitShown inInterestBits
    bp `shouldBe` inInterestBalancedParens