packages feed

jvm-batching-0.2.0: src/test/haskell/Language/Java/BatchingSpec.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}

module Language.Java.BatchingSpec where

import qualified Data.ByteString as BS
import Data.Int
import Data.Text (Text)
import qualified Data.Text as Text
import qualified Data.Vector as V
import qualified Data.Vector.Storable as VS
import Language.Java
import Language.Java.Batching ()
import Language.Java.Inline
import Test.Hspec

spec :: Spec
spec = do
    let testrr :: (Eq a, Show a, Reify a, Reflect a) => a -> IO ()
        testrr x = (reflect x >>= reify) `shouldReturn` x
    describe "batching" $ do
      it "succeeds on empty vectors" $ do
        testrr (V.fromList [] :: V.Vector Text)
      it "succeeds on non-empty vectors" $ do
        testrr (V.fromList [1..10] :: V.Vector Int32)
      it "succeeds on vectors with nulls" $ do
        v <- [java| new Integer[] {1, null, 2, null } |]
        reify v `shouldReturn` (V.fromList [NotNull 1, Null, NotNull 2, Null] :: V.Vector (Nullable Int32))
      it "succeeds on vectors of vectors with nulls" $ do
        v <- [java| new Integer[][] {
            new Integer[] {},
            null,
            new Integer[] { 2, 3 },
            null,
            new Integer[] {}
          } |]
        reify v `shouldReturn` ((V.fromList
          [ NotNull V.empty
          , Null
          , NotNull (V.fromList [2, 3])
          , Null
          , NotNull V.empty
          ]) :: V.Vector (Nullable (V.Vector Int32)))
      it "succeeds on vectors of vectors" $ do
        let xs :: V.Vector (V.Vector Int32)
            xs = V.fromList (map V.fromList [ [i .. i + 4] | i <- [1,6..26] ])
        testrr xs
        testrr (V.empty `asTypeOf` xs)
        testrr $ V.map (V.map (Text.pack . show)) xs
        testrr $ V.map (V.map (BS.singleton . fromIntegral)) xs
        testrr (V.map V.convert xs :: V.Vector (VS.Vector Int32))