File: Main.hs

package info (click to toggle)
haskell-config-value 0.8.3-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 164 kB
  • sloc: haskell: 686; yacc: 197; makefile: 2
file content (104 lines) | stat: -rw-r--r-- 3,741 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
{-# Language OverloadedStrings #-}
{-|
Module      : Main
Description : Unit tests for config-schema
Copyright   : (c) Eric Mertens, 2017
License     : ISC
Maintainer  : emertens@gmail.com
-}
module Main (main) where

import           Config
import           Config.Number
import           Control.Monad (unless)
import           Data.Foldable
import           Data.Text (Text)
import qualified Data.Text as Text

parseTest ::
  Value () {- ^ expected value -} ->
  [Text]   {- ^ input lines    -} ->
  IO ()
parseTest expected txts =
  case parse (Text.unlines txts) of
    Left e -> fail (show e)
    Right v ->
      unless ((() <$ v) == expected) (fail (show (expected, () <$ v)))

number :: Number -> Value ()
number = Number ()

atom :: Atom -> Value ()
atom = Atom ()

list :: [Value ()] -> Value ()
list = List ()

text :: Text -> Value ()
text = Text ()

sections :: [(Text, Value ())] -> Value ()
sections xs = Sections () [Section () k v | (k,v) <- xs]

main :: IO ()
main = sequenceA_

  [ parseTest (number (MkNumber (Radix10 0) 42))     ["42"]
  , parseTest (number (MkNumber (Radix10 56) 42))    ["42e56"]
  , parseTest (number (MkNumber (Radix10 56) 42.34)) ["42.34e56"]
  , parseTest (number (MkNumber (Radix10 0) 42.34))  ["42.34"]
  , parseTest (number (MkNumber (Radix10 0) 42))     ["42."]
  , parseTest (number (MkNumber (Radix10 0) 42))     ["042"]

  , parseTest (number (MkNumber (Radix16 0) 42))     ["0x2a"]
  , parseTest (number (MkNumber (Radix16 56) 42))    ["0x2ap56"]
  , parseTest (number (MkNumber (Radix16 56) (0x2a + (0x34 / 16^(2::Int))))) ["0x2a.34p56"]
  , parseTest (number (MkNumber (Radix16 0)  (0x2a + (0x3f / 16^(2::Int))))) ["0x2a.3f"]
  , parseTest (number (MkNumber (Radix16 0) 42))     ["0x2a."]
  , parseTest (number (MkNumber (Radix16 0) 42))     ["0x02a"]

  , parseTest (number (MkNumber Radix2 42))     ["0b101010"]
  , parseTest (number (MkNumber Radix2 4))     ["0b0100"]
  , parseTest (number (MkNumber Radix2 4))     ["0b0100."]
  , parseTest (number (MkNumber Radix2 (4 + (22 / 2^(6::Int))))) ["0b100.010110"]

  , parseTest (number (MkNumber Radix8 55))     ["0o67"]
  , parseTest (number (MkNumber Radix8 55))     ["0o67."]
  , parseTest (number (MkNumber Radix8 55))     ["0o067"]
  , parseTest (number (MkNumber Radix8 (55 + (10 / 64)))) ["0o67.12"]

  , parseTest (atom "example") ["example"]
  , parseTest (atom "one-two") ["one-two"]
  , parseTest (atom "one-1") ["one-1"]

  , parseTest (list []) ["[ ]"]
  , parseTest (list []) ["[]"]
  , parseTest (list [atom "x"]) ["[x]"]
  , parseTest (list [atom "x"]) ["* x"]
  , parseTest (list [atom "x", atom "y", atom "z"]) ["[x, y, z]"]
  , parseTest (list [atom "x", atom "y", atom "z"])
        ["* x", "* y", "* z"]
  , parseTest (list [atom "x", list [atom "y", atom "z"]]) ["[x,[y,z]]"]
  , parseTest (list [atom "x", list [atom "y", atom "z"]]) ["* x", "* [y,z]"]
  , parseTest (list [atom "x", list [atom "y", atom "z"]]) ["* x", "* * y", "  * z"]

  , parseTest (text "string") ["\"string\""]
  , parseTest (text "\10string\1\2") ["\"\\x0ast\\&r\\     \\ing\\SOH\\^B\""]
  , parseTest (text "string") ["\"str\\", "     \\ing\""]

  , parseTest (sections []) ["{}"]
  , parseTest (sections [("x", atom "y")]) ["{x:y}"]
  , parseTest (sections [("x", atom "y")]) ["x:y"]
  , parseTest (sections [("x", atom "y"), ("z", atom "w")]) ["{x:y,z:w}"]
  , parseTest (sections [("x", sections [("y", atom "z")])]) ["x:y:z"]
  , parseTest (sections [("x", sections [("y", atom "z")])])
      ["x:"
      ," y:"
      ,"  z"]
  , parseTest (sections [("x", list [atom "y", atom "z"])])
      ["x: * y"
      ,"   * z"]
  , parseTest (list [sections [("x", atom "y")], sections [("z", atom "w")]])
      ["* x: y"
      ,"* z: w"]
  ]