packages feed

langchain-hs-0.0.5.0: test/Test/Langchain/TextSplitter/TokenSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module Test.Langchain.TextSplitter.TokenSpec (tests) where

import qualified Data.Text.Lazy as TL
import Test.Tasty
import Test.Tasty.HUnit

import Langchain.TextSplitter.Token

tests :: TestTree
tests =
  testGroup
    "Langchain.TextSplitter.TokenSpec"
    [ testCase "Empty text returns empty list" $ do
        splitByTokens defaultTokenSplitterOps "" @?= []
    , testCase "Splits text into token-bounded chunks" $ do
        let text = TL.unwords (replicate 50 "token")
            ops = defaultTokenSplitterOps {maxTokens = 15, tokenOverlap = 0}
            chunks = splitByTokens ops text
        assertBool "Multiple chunks produced" (length chunks >= 3)
        assertBool "No chunk exceeds 15 tokens" (all (\c -> countTokensApprox c <= 15) chunks)
    , testCase "Token splitter preserves words across chunks" $ do
        let text = "one two three four five six seven eight nine ten"
            ops = defaultTokenSplitterOps {maxTokens = 4, tokenOverlap = 0}
            chunks = splitByTokens ops text
        assertBool "Produced chunks" (length chunks >= 2)
    ]