idris-0.9.19.1: test/primitives001/substring.idr
-- This is a test of the substring primitive, both in the Idris
-- evaluator and in some backend. It attempts to exercise that
-- negative indices are equivalent to 0, that it works for mixed
-- single- and multi-byte characters, and that overshooting the end
-- doesn't break things.
-- Single byte test
foo : String
foo = "Hello! here's the thing"
-- The first sentence of the Chinese wikipedia article on Idris (to
-- get mixed single-and-multibyte chars)
firstSentence : String
firstSentence = "Idris 是一个通用的依赖类型纯函数式编程语言,其类型系统与 Agda 以及 Epigram 相似。"
emptyTest : prim__strSubstr 100000 14 Main.firstSentence = ""
emptyTest = Refl
multiTest : prim__strSubstr 10 5 Main.firstSentence = "用的依赖类"
multiTest = Refl
negative : prim__strSubstr (-10) 5 Main.firstSentence = "Idris"
negative = Refl
negativeEnd : prim__strSubstr 0 (-1) Main.firstSentence = ""
negativeEnd = Refl
negativeLength : prim__strSubstr 4 (-4) Main.firstSentence = ""
negativeLength = Refl
main : IO ()
main = do putStrLn $ prim__strSubstr 1 1004 foo
printLn $ length $ prim__strSubstr 1 1000 foo
printLn $ length $ prim__strSubstr 1000 2 firstSentence
putStrLn $ prim__strSubstr 10 5 firstSentence
putStrLn $ prim__strSubstr (-10) 5 firstSentence
putStrLn $ "[" ++ prim__strSubstr 0 (-1) firstSentence ++ "]"
-- Multi-byte dynamic string
input <- getLine
putStrLn $ prim__strSubstr 3 8 input
putStrLn $ show (length (prim__strSubstr 3 8 input))
putStrLn $ prim__strSubstr 3 8000 input
putStrLn $ show (length (prim__strSubstr 3 8000 input))
putStrLn $ prim__strSubstr (-13) 18 input
putStrLn $ show (length (prim__strSubstr (-13) 18 input))
putStrLn $ prim__strSubstr 4 (-4) input
putStrLn $ show (length (prim__strSubstr 4 (-4) input))
-- Single-byte dynamic string
input <- getLine
putStrLn $ prim__strSubstr 3 8 input
putStrLn $ show (length (prim__strSubstr 3 8 input))
putStrLn $ prim__strSubstr 3 8000 input
putStrLn $ show (length (prim__strSubstr 3 8000 input))
putStrLn $ prim__strSubstr (-13) 18 input
putStrLn $ show (length (prim__strSubstr (-13) 18 input))
putStrLn $ prim__strSubstr 4 (-4) input
putStrLn $ show (length (prim__strSubstr 4 (-4) input))