packages feed

helic-0.6.0.0: test/Helic/Test/LoadTest.hs

module Helic.Test.LoadTest where

import Conc (interpretAtomic)
import Polysemy.Chronos (ChronosTime)
import Polysemy.Test (UnitTest, assertEq, assertJust)
import Zeugma (runTestFrozen)

import Helic.Data.AgentId (AgentId (AgentId))
import qualified Helic.Data.Event as Event
import Helic.Data.Event (Event)
import Helic.Data.InstanceName (InstanceName)
import Helic.Effect.Agent (AgentNet, AgentTmux, AgentX)
import qualified Helic.Effect.History as History
import Helic.Interpreter.Agent (interpretAgent)
import Helic.Interpreter.History (interpretHistory)

event ::
  Members [ChronosTime, Reader InstanceName] r =>
  Int ->
  Sem r Event
event n =
  Event.now (AgentId "test") (show n)

test_load :: UnitTest
test_load =
  runTestFrozen $
  runReader "test" $
  interpretAtomic def $
  interpretAgent @AgentNet (const unit) $
  interpretAgent @AgentTmux (const unit) $
  interpretAgent @AgentX (const unit) $
  interpretHistory Nothing do
    atomicPut =<< traverse event [1..10]
    ev5 <- event 6
    assertJust ev5 =<< History.load 4
    assertEq Nothing =<< History.load 11
    assertEq (show <$> ([1..5] ++ [7..10] ++ [6 :: Int])) . fmap (.content) =<< History.get