packages feed

naturalcomp-0.0.1: test/nctest.hs

{-# LANGUAGE OverloadedStrings #-}

import Control.Monad (forM_)
import Data.List (sortBy)
import Data.Monoid ((<>))
import qualified Data.ByteString.UTF8 as U
import qualified Data.Text as T
import Test.HUnit
import Text.NaturalComp
import Text.NaturalComp.Stringy

testData1 :: [(U.ByteString, U.ByteString, Ordering)]
testData1 =
    [("AAA",     "AAA",      EQ)
    ,("AAA",     "AAa",      LT)
    ,("aaa",     "AAA",      GT)
    ,("aaa",     "aaaa",     LT)
    ,("aaaa",    "aab",      LT)
    ,("aaa1",    "aaa2",     LT)
    ,("aaa9",    "aaa10",    LT)
    ,("aaa9a",   "aaa10a",   LT)
    ,("aaa01",   "aaa1",     LT)
    ,("aaa10",   "aaa10",    EQ)
    ,("aaa10",   "aaa10a",   LT)
    ,("aaa10",   "aaa20",    LT)
    ,("aaa99",   "aaa100",   LT)
    ,("aaa100",  "aaa101",   LT)
    ,("aaa999",  "aaa1000",  LT)
    ,("aaa99a",  "aaa99a",   EQ)
    ,("aaa99a1", "aaa99a2",  LT)
    ,("aaa99a",  "aaa99b",   LT)
    ,("aaa99aa", "aaa99b",   LT)
    ,("aaa99a9", "aaa99a10", LT)]

testData2 :: [(T.Text, T.Text, Ordering)]
testData2 =
    [("AAA",     "AAA",      EQ)
    ,("AAA",     "AAa",      EQ)
    ,("aaa",     "AAA",      EQ)
    ,("aaa",     "aaaa",     LT)
    ,("aaaa",    "aab",      LT)
    ,("aaa1",    "aaa2",     LT)
    ,("aaa9",    "aaa10",    LT)
    ,("aaa9a",   "aaa10a",   LT)
    ,("aaa01",   "aaa1",     LT)
    ,("aaa10",   "aaa10",    EQ)
    ,("aaa10",   "aaa10a",   LT)
    ,("aaa10",   "aaa20",    LT)
    ,("aaa99",   "aaa100",   LT)
    ,("aaa100",  "aaa101",   LT)
    ,("aaa999",  "aaa1000",  LT)
    ,("aaa99a",  "aaa99a",   EQ)
    ,("aaa99a",  "aaa99b",   LT)
    ,("aaa99aa", "aaa99b",   LT)
    ,("aaa99a9", "aaa99a10", LT)]

testData3 :: ([String], [String])
testData3 =
    (["28627986_p3.jpg"
     ,"28627986_p0.jpg"
     ,"28627986_p8.jpg"
     ,"28627986_p20.jpg"
     ,"28627986_p4.jpg"
     ,"28627986_p12.jpg"
     ,"28627986_p5.jpg"
     ,"28627986_p10.jpg"
     ,"28627986_p6.jpg"
     ,"28627986_p7.jpg"
     ,"28627986_p11.jpg"
     ,"28627986_p1.jpg"
     ,"28627986_p9.jpg"
     ,"28627986_p2.jpg"]

    ,["28627986_p0.jpg"
     ,"28627986_p1.jpg"
     ,"28627986_p2.jpg"
     ,"28627986_p3.jpg"
     ,"28627986_p4.jpg"
     ,"28627986_p5.jpg"
     ,"28627986_p6.jpg"
     ,"28627986_p7.jpg"
     ,"28627986_p8.jpg"
     ,"28627986_p9.jpg"
     ,"28627986_p10.jpg"
     ,"28627986_p11.jpg"
     ,"28627986_p12.jpg"
     ,"28627986_p20.jpg"])

testData4 :: ([T.Text], [T.Text])
testData4 =
    (["test1.999.c"
     ,"test1.99.c"
     ,"test1.11111.c"
     ,"test1.0001.c"
     ,"test1.2000.c"
     ,"test1.0009.c"]

    ,["test1.0001.c"
     ,"test1.0009.c"
     ,"test1.99.c"
     ,"test1.999.c"
     ,"test1.2000.c"
     ,"test1.11111.c"])

testData5 :: ([U.ByteString], [U.ByteString])
testData5 =          -- from strverscmp(3) man page
    (["10"
     ,"9"
     ,"1"
     ,"0"
     ,"09"
     ,"010"
     ,"01"
     ,"00"
     ,"000"]

    ,["000"
     ,"00"
     ,"01"
     ,"010"
     ,"09"
     ,"0"
     ,"1"
     ,"9"
     ,"10"])

testData6 :: [(String, String, Ordering)]
testData6 =
    [("000", "00",  LT)
    ,("00",  "01",  LT)
    ,("01",  "010", LT)
    ,("010", "09",  LT)
    ,("09",  "0",   LT)
    ,("0",   "1",   LT)
    ,("1",   "9",   LT)
    ,("9",   "10",  LT)

    ,("000a", "00a",  LT)
    ,("00a",  "01a",  LT)
    ,("01a",  "010a", GT)     -- Why? But glibc says GT.
    ,("010a", "09a",  LT)
    ,("09a",  "0a",   LT)
    ,("0a",   "1a",   LT)
    ,("1a",   "9a",   LT)
    ,("9a",   "10a",  LT)]

compTest f xyz =
    TestCase $ forM_ xyz
                 $ \(x, y, z) ->
                      assertEqual (toString $ x <> " : " <> y) z (f x y)

sortTest f (x, y) =
    let sorted = sortBy f x
    in TestCase $ assertEqual "" y sorted

tests =
    TestList [TestLabel "test1" $ compTest naturalComp     testData1
             ,TestLabel "test2" $ compTest naturalCaseComp testData2
             ,TestLabel "test3" $ sortTest naturalComp     testData3
             ,TestLabel "test4" $ sortTest naturalComp     testData4
             ,TestLabel "test5" $ sortTest naturalComp     testData5
             ,TestLabel "test6" $ compTest naturalComp     testData6]

main = runTestTT tests