lsm-tree-1.0.0.0: test/Test/Database/LSMTree/Internal/Serialise.hs
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Test.Database.LSMTree.Internal.Serialise (tests) where
import Data.Bits
import qualified Data.ByteString as BS
import qualified Data.ByteString.Builder as BB
import qualified Data.ByteString.Short as SBS
import qualified Data.Vector.Primitive as VP
import Data.Word
import qualified Database.LSMTree.Internal.RawBytes as RB
import Database.LSMTree.Internal.Serialise
import Test.Tasty
import Test.Tasty.HUnit
tests :: TestTree
tests = testGroup "Test.Database.LSMTree.Internal.Serialise" [
testCase "example keyTopBits64" $ do
let k = SerialisedKey' (VP.fromList [0, 0, 0, 0, 37, 42, 204, 130])
expected :: Word64
expected = 37 `shiftL` 24 + 42 `shiftL` 16 + 204 `shiftL` 8 + 130
expected @=? keyTopBits64 k
, testCase "example keyTopBits64 on sliced byte array" $ do
let pvec = VP.fromList [0, 0, 0, 0, 0, 37, 42, 204, 130]
k = SerialisedKey' (VP.slice 1 (VP.length pvec - 1) pvec)
expected :: Word64
expected = 37 `shiftL` 24 + 42 `shiftL` 16 + 204 `shiftL` 8 + 130
expected @=? keyTopBits64 k
, testCase "example unsafeFromByteString and fromShortByteString" $ do
let bb = mconcat [BB.word64LE x | x <- [0..100]]
bs = BS.toStrict . BB.toLazyByteString $ bb
k1 = RB.unsafeFromByteString bs
k2 = RB.fromShortByteString (SBS.toShort bs)
k1 @=? k2
]