module Main where

import Guguk.Syllabification
import Test.HUnit

tests :: Test
tests = TestList $ map TestCase
  [
    -- Syllable tests
    assertEqual "Syllabify \"ece\""
    ["e", "ce"]
    (syllabify "ece")

  , assertEqual "Syllabify \"birbirlerine\""
    ["bir", "bir", "le", "ri", "ne"]
    (syllabify "birbirlerine")

  , assertEqual "Syllabify \"kafiyelendirmiştir\""
    ["ka","fi","ye","len","dir","miş","tir"]
    (syllabify "kafiyelendirmiştir")

  , assertEqual "Syllabify \"hayatında\""
    ["ha","ya","tın","da"]
    (syllabify "hayatında")

  , assertEqual "Syllabify \"kraliçe\""
    ["kra", "li", "çe"]
    (syllabify "kraliçe")

    -- One of the longest possible words in Turkish. Just because you can.
  , assertEqual "Syllabify \"muvaffakiyetsizleştiricileştiriveremeyebileceklerimizdenmişsinizcesine\""
    ["mu","vaf","fa","ki","yet","siz","leş","ti","ri","ci","leş","ti","ri","ve","re","me","ye","bi","le","cek","le","ri","miz","den","miş","si","niz","ce","si","ne"]
    (syllabify "muvaffakiyetsizleştiricileştiriveremeyebileceklerimizdenmişsinizcesine")

    -- Troublesome words syllabification tests
  , assertEqual "Syllabify \"arktik\""
    ["ark", "tik"]
    (syllabify "arktik")

  , assertEqual "Syllabify \"kontratak\""
    ["kont","ra","tak"]
    (syllabify "kontratak")

  , assertEqual "Syllabify \"tundra\""
    ["tund", "ra"]
    (syllabify "tundra")

  , assertEqual "Syllabify \"sürpriz\""
    ["sürp", "riz"]
    (syllabify "sürpriz")

  , assertEqual "Syllabify \"bandrol\""
    ["band", "rol"]
    (syllabify "bandrol")

  , assertEqual "Syllabify \"program\""
    ["prog", "ram"]
    (syllabify "program")

  , assertEqual "Syllabify \"santral\""
    ["sant", "ral"]
    (syllabify "santral")

  , assertEqual "Syllabify \"elektrik\""
    ["e", "lek", "trik"]
    (syllabify "elektrik")

  , assertEqual "Syllabify \"stratosfer\""
    ["stra", "tos", "fer"]
    (syllabify "stratosfer")

  , assertEqual "Syllabify \"yeşilimtrak\""
    ["ye", "şi", "lim", "trak"]
    (syllabify "yeşilimtrak")

    -- Syllabification with apostrophe tests
  , assertEqual "Syllabify \"mef'ûlü\""
    ["mef","û","lü"]
    (syllabify "mef'ûlü")

  , assertEqual "Syllabify \"müfte'ilün\""
    ["müf","te","i","lün"]
    (syllabify "müfte'ilün")
  ]

runTests ::  IO ()
runTests = do
  _ <- runTestTT tests
  return ()

main :: IO ()
main = runTests