content: {-# language OverloadedStrings #-}
  {-# language OverloadedLists #-}
  module Main
  ( main
  ) where
  
  import GHC.Exts
  import Data.Text.ICU.Bidi
  import System.Mem
  import Test.Hspec as Hspec
  import Test.Tasty
  import Test.Tasty.Hspec
  
  spec :: Spec
  spec = Hspec.after_ performMajorGC $ do
    describe "bidi" $ do
      it "can handle English" $ do
        x <- open
        getBaseDirection "hello" `shouldBe` LTR
        setPara x "hello" DEFAULT_LTR Nothing
        getLength x `shouldReturn` 5
        getText x `shouldReturn` "hello"
        writeReordered x DO_MIRRORING `shouldReturn` "hello"
        getLogicalMap x `shouldReturn` [0..4]
        getVisualMap x `shouldReturn` [0..4]
        getLevels x `shouldReturn` [Level 0,Level 0,Level 0,Level 0,Level 0]
      it "can handle Arabic" $ do
        x <- open
        getBaseDirection "أنا قادر على أكل الزجاج و هذا لا يؤلمني." `shouldBe` RTL
        setPara x "This is an Arabic sentence: أنا قادر على أكل الزجاج و هذا لا يؤلمني. It is surrounded by English" DEFAULT_LTR Nothing
        getLength x `shouldReturn` 96
        getLogicalMap x `shouldReturn` fromList ([0..27] ++ [66,65..28] ++ [67..95])
        getVisualMap x `shouldReturn` fromList ([0..27] ++ [66,65..28] ++ [67..95])
        getLevels x `shouldReturn` fromList (replicate 28 (Level 0) ++ replicate 39 (Level 1) ++ replicate 29 (Level 0))
  
  main :: IO ()
  main = do
    spec' <- testSpec "spec" spec
    defaultMain spec'
  