summaryrefslogtreecommitdiff
path: root/testsuite/tests/lib/should_run/cstring001.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/lib/should_run/cstring001.hs')
-rw-r--r--testsuite/tests/lib/should_run/cstring001.hs18
1 files changed, 18 insertions, 0 deletions
diff --git a/testsuite/tests/lib/should_run/cstring001.hs b/testsuite/tests/lib/should_run/cstring001.hs
new file mode 100644
index 0000000000..38d0d25db2
--- /dev/null
+++ b/testsuite/tests/lib/should_run/cstring001.hs
@@ -0,0 +1,18 @@
+import Control.Monad
+import Foreign.C.String
+
+test_strings = ["Hello World", replicate 10000 'a']
+
+assertEqual :: (Eq a, Show a) => a -> a -> IO ()
+assertEqual x y = if x == y then return () else error $ "assertEqual: " ++ show x ++ " /= " ++ show y
+
+main = do
+ -- Try roundtripping some ASCII strings through the locale encoding
+ forM test_strings $ \try_str -> do
+ got_str <- withCString try_str peekCString
+ got_str `assertEqual` try_str
+
+ -- Try roundtripping some ASCII strings with lengths through the locale encoding
+ forM test_strings $ \try_str -> do
+ got_str <- withCStringLen try_str peekCStringLen
+ got_str `assertEqual` try_str