aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/text/numbers-sv-short.scm
blob: 266553ad42de8e67cca820a90e6dfc2e1e3a2b4e (plain)
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
(define-module (test text-numbers-sv)
  :use-module (srfi srfi-1)
  :use-module (srfi srfi-64)
  :use-module (srfi srfi-71)
  :use-module (text numbers))

;;; Readable integer "literals", until srfi-169 gets ported to Guile
(define (n s)
  (fold (lambda (x p) (+ x (* 1000 p)))
        0 (map string->number (string-split s #\_))))

(test-group "Cardinal numbers"

  (test-equal "minus två"                     (number->string-cardinal -2 'sv))
  (test-equal "minus ett"                     (number->string-cardinal -1 'sv))
  (test-equal "noll"                          (number->string-cardinal 0 'sv))
  (test-equal "ett"                           (number->string-cardinal 1 'sv))
  (test-equal "två"                           (number->string-cardinal 2 'sv))
  (test-equal "tre"                           (number->string-cardinal 3 'sv))
  (test-equal "fyra"                          (number->string-cardinal 4 'sv))
  (test-equal "fem"                           (number->string-cardinal 5 'sv))
  (test-equal "sex"                           (number->string-cardinal 6 'sv))
  (test-equal "sju"                           (number->string-cardinal 7 'sv))
  (test-equal "åtta"                          (number->string-cardinal 8 'sv))
  (test-equal "nio"                           (number->string-cardinal 9 'sv))
  (test-equal "tio"                           (number->string-cardinal 10 'sv))
  (test-equal "elva"                          (number->string-cardinal 11 'sv))
  (test-equal "tolv"                          (number->string-cardinal 12 'sv))
  (test-equal "tretton"                       (number->string-cardinal 13 'sv))
  (test-equal "fjorton"                       (number->string-cardinal 14 'sv))
  (test-equal "femton"                        (number->string-cardinal 15 'sv))
  (test-equal "sexton"                        (number->string-cardinal 16 'sv))
  (test-equal "sjutton"                       (number->string-cardinal 17 'sv))
  (test-equal "arton"                         (number->string-cardinal 18 'sv))
  (test-equal "nitton"                        (number->string-cardinal 19 'sv))
  (test-equal "tjugo"                         (number->string-cardinal 20 'sv))
  (test-equal "tjugoett"                      (number->string-cardinal 21 'sv))
  (test-equal "trettio"                       (number->string-cardinal 30 'sv))
  (test-equal "trettiotvå"                    (number->string-cardinal 32 'sv))
  (test-equal "fyrtio"                        (number->string-cardinal 40 'sv))
  (test-equal "fyrtiotre"                     (number->string-cardinal 43 'sv))
  (test-equal "femtio"                        (number->string-cardinal 50 'sv))
  (test-equal "femtiofyra"                    (number->string-cardinal 54 'sv))
  (test-equal "sextio"                        (number->string-cardinal 60 'sv))
  (test-equal "sextiofem"                     (number->string-cardinal 65 'sv))
  (test-equal "sjuttio"                       (number->string-cardinal 70 'sv))
  (test-equal "sjuttiosex"                    (number->string-cardinal 76 'sv))
  (test-equal "åttio"                         (number->string-cardinal 80 'sv))
  (test-equal "åttiosju"                      (number->string-cardinal 87 'sv))
  (test-equal "nittio"                        (number->string-cardinal 90 'sv))
  (test-equal "nittioåtta"                    (number->string-cardinal 98 'sv))
  (test-equal "etthundra"                     (number->string-cardinal 100 'sv))
  (test-equal "etthundraett"                  (number->string-cardinal 101 'sv))
  (test-equal "etthundraåttioåtta"            (number->string-cardinal 188 'sv))
  (test-equal "tvåhundra"                     (number->string-cardinal 200 'sv))
  (test-equal "tvåhundrasextioett"            (number->string-cardinal 261 'sv))
  (test-equal "ettusen"                       (number->string-cardinal 1000 'sv))
  (test-equal "ettusen sex"                   (number->string-cardinal 1006 'sv))
  (test-equal "ettusen niohundrasjuttiosju"   (number->string-cardinal 1977 'sv))
  (test-equal "tvåtusen fyrtioåtta"           (number->string-cardinal 2048 'sv))

  (test-equal "tiotusen"     (number->string-cardinal 10000 'sv))
  (test-equal "nittiotusen"  (number->string-cardinal 90000 'sv))
  (test-equal "nittioåttatusen sjuhundrasextiofem" (number->string-cardinal 98765 'sv))

  (test-equal "etthundratusen"  (number->string-cardinal 100000 'sv))
  (test-equal "niohundratusen"  (number->string-cardinal 900000 'sv))
  (test-equal "niohundraåttiosjutusen sexhundrafemtiofyra" (number->string-cardinal 987654 'sv))

  (test-equal "en miljon"     (number->string-cardinal 1000000 'sv))
  (test-equal "nio miljoner"  (number->string-cardinal 9000000 'sv))
  (test-equal "nio miljoner åttahundrasjuttiosex tusen femhundrafyrtiotre"
    (number->string-cardinal 9876543 'sv))

  (test-equal "tio miljoner"       (number->string-cardinal 10000000 'sv))
  (test-equal "etthundra miljoner" (number->string-cardinal 100000000 'sv))
  (test-equal "niohundraåttiosju miljoner sexhundrafemtiofyra tusen trehundratjugoett"
    (number->string-cardinal 987654321 'sv))
  (test-equal "en miljard"         (number->string-cardinal (n "1_000_000_000") 'sv))
  (test-equal "en biljon"          (number->string-cardinal (n "1_000_000_000_000") 'sv))
  (test-equal "en biljard"         (number->string-cardinal #e1e15 'sv))
  (test-equal "tio biljarder"      (number->string-cardinal #e1e16 'sv))
  (test-equal "etthundra biljarder" (number->string-cardinal #e1e17 'sv))
  (test-equal "en biljard"         (number->string-cardinal (n "1_000_000_000_000_000") 'sv))
  (test-equal "en triljon"         (number->string-cardinal #e1e18 'sv))
  (test-equal "en triljard"        (number->string-cardinal #e1e21 'sv))
  (test-equal "en kvadriljon"      (number->string-cardinal #e1e24 'sv))
  (test-equal "en kvadriljard"     (number->string-cardinal #e1e27 'sv))
  (test-equal "en kvintiljon"      (number->string-cardinal #e1e30 'sv))
  (test-equal "en kvintiljard"     (number->string-cardinal #e1e33 'sv))
  (test-equal "en sextiljon"       (number->string-cardinal #e1e36 'sv))
  (test-equal "en sextiljard"      (number->string-cardinal #e1e39 'sv))
  (test-equal "en septiljon"       (number->string-cardinal #e1e42 'sv))
  (test-equal "en septiljard"      (number->string-cardinal #e1e45 'sv))
  (test-equal "en oktiljon"        (number->string-cardinal #e1e48 'sv))
  (test-equal "en oktiljard"       (number->string-cardinal #e1e51 'sv))
  (test-equal "en noniljon"        (number->string-cardinal #e1e54 'sv))
  (test-equal "en noniljard"       (number->string-cardinal #e1e57 'sv))
  (test-equal "en deciljon"        (number->string-cardinal #e1e60 'sv))
  (test-equal "en deciljard"       (number->string-cardinal #e1e63 'sv))
  (test-equal "det stora talet 1000000000000000000000000000000000000000000000000000000000000000000"
    (number->string-cardinal #e1e66 'sv))
  )

(test-group "Ordinal numbers"
  (test-equal "nollte"                   (number->string-ordinal 0 'sv a-form?: #t))
  (test-equal "första"                   (number->string-ordinal 1 'sv a-form?: #t))
  (test-equal "andra"                    (number->string-ordinal 2 'sv a-form?: #t))
  (test-equal "tredje"                   (number->string-ordinal 3 'sv a-form?: #t))
  (test-equal "fjärde"                   (number->string-ordinal 4 'sv a-form?: #t))
  (test-equal "femte"                    (number->string-ordinal 5 'sv a-form?: #t))
  (test-equal "sjätte"                   (number->string-ordinal 6 'sv a-form?: #t))
  (test-equal "sjunde"                   (number->string-ordinal 7 'sv a-form?: #t))
  (test-equal "åttonde"                  (number->string-ordinal 8 'sv a-form?: #t))
  (test-equal "nionde"                   (number->string-ordinal 9 'sv a-form?: #t))
  (test-equal "tionde"                   (number->string-ordinal 10 'sv a-form?: #t))
  (test-equal "elfte"                    (number->string-ordinal 11 'sv a-form?: #t))
  (test-equal "tolfte"                   (number->string-ordinal 12 'sv a-form?: #t))
  (test-equal "trettonde"                (number->string-ordinal 13 'sv a-form?: #t))
  (test-equal "fjortonde"                (number->string-ordinal 14 'sv a-form?: #t))
  (test-equal "femtonde"                 (number->string-ordinal 15 'sv a-form?: #t))
  (test-equal "sextonde"                 (number->string-ordinal 16 'sv a-form?: #t))
  (test-equal "sjuttonde"                (number->string-ordinal 17 'sv a-form?: #t))
  (test-equal "artonde"                  (number->string-ordinal 18 'sv a-form?: #t))
  (test-equal "nittonde"                 (number->string-ordinal 19 'sv a-form?: #t))
  (test-equal "tjugonde"                 (number->string-ordinal 20 'sv a-form?: #t))
  (test-equal "tjugoförsta"              (number->string-ordinal 21 'sv a-form?: #t))
  (test-equal "tjugoandra"               (number->string-ordinal 22 'sv a-form?: #t))
  (test-equal "tjugotredje"              (number->string-ordinal 23 'sv a-form?: #t))
  (test-equal "trettiotredje"            (number->string-ordinal 33 'sv a-form?: #t))
  (test-equal "fyrtiofjärde"             (number->string-ordinal 44 'sv a-form?: #t))
  (test-equal "femtiofemte"              (number->string-ordinal 55 'sv a-form?: #t))
  (test-equal "sextiosjätte"             (number->string-ordinal 66 'sv a-form?: #t))
  (test-equal "sjuttiosjunde"            (number->string-ordinal 77 'sv a-form?: #t))
  (test-equal "åttioåttonde"             (number->string-ordinal 88 'sv a-form?: #t))
  (test-equal "nittionionde"             (number->string-ordinal 99 'sv a-form?: #t))
  (test-equal "etthundrade"              (number->string-ordinal 100 'sv a-form?: #t))
  (test-equal "tvåhundrade"              (number->string-ordinal 200 'sv a-form?: #t))
  (test-equal "etthundratrettiofjärde"   (number->string-ordinal 134 'sv a-form?: #t))
  (test-equal "sjuhundratrettiosjätte"   (number->string-ordinal 736 'sv a-form?: #t))
  (test-equal "etttusende"                       (number->string-ordinal 1000 'sv a-form?: #t))
  (test-equal "ettusen sjätte"                   (number->string-ordinal 1006 'sv a-form?: #t))
  (test-equal "ettusen etthundrade"                 (number->string-ordinal 1100 'sv a-form?: #t))
  (test-equal "ettusen niohundratjugoandra"      (number->string-ordinal 1922 'sv a-form?: #t))
  (test-equal "ettusen niohundranittionionde"    (number->string-ordinal 1999 'sv a-form?: #t))
  (test-equal "tvåtusende"                       (number->string-ordinal 2000 'sv a-form?: #t))
  (test-equal "tvåtusen första"                  (number->string-ordinal 2001 'sv a-form?: #t))
  (test-equal "tretusende"                       (number->string-ordinal 3000 'sv a-form?: #t))
  (test-equal "fyratusende"                      (number->string-ordinal 4000 'sv a-form?: #t))
  (test-equal "femtusende"                       (number->string-ordinal 5000 'sv a-form?: #t))
  (test-equal "sextusende"                       (number->string-ordinal 6000 'sv a-form?: #t))
  (test-equal "sjutusende"                       (number->string-ordinal 7000 'sv a-form?: #t))
  (test-equal "åttatusende"                      (number->string-ordinal 8000 'sv a-form?: #t))
  (test-equal "niotusende"                       (number->string-ordinal 9000 'sv a-form?: #t))
  (test-equal "niotusen åttahundrasjuttiosjätte" (number->string-ordinal 9876 'sv a-form?: #t))

  (test-equal "tiotusende"     (number->string-ordinal 10000 'sv a-form?: #t))
  (test-equal "tjugotusende"   (number->string-ordinal 20000 'sv a-form?: #t))
  (test-equal "trettiotusende" (number->string-ordinal 30000 'sv a-form?: #t))
  (test-equal "fyrtiotusende"  (number->string-ordinal 40000 'sv a-form?: #t))
  (test-equal "femtiotusende"  (number->string-ordinal 50000 'sv a-form?: #t))
  (test-equal "sextiotusende"  (number->string-ordinal 60000 'sv a-form?: #t))
  (test-equal "sjuttiotusende" (number->string-ordinal 70000 'sv a-form?: #t))
  (test-equal "åttiotusende"   (number->string-ordinal 80000 'sv a-form?: #t))
  (test-equal "nittiotusende"  (number->string-ordinal 90000 'sv a-form?: #t))
  (test-equal "nittioåttatusen sjuhundrasextiofemte"
    (number->string-ordinal 98765 'sv a-form?: #t))

  (test-equal "etthundratusende"  (number->string-ordinal 100000 'sv a-form?: #t))
  (test-equal "tvåhundratusende"  (number->string-ordinal 200000 'sv a-form?: #t))
  (test-equal "trehundratusende"  (number->string-ordinal 300000 'sv a-form?: #t))
  (test-equal "fyrahundratusende" (number->string-ordinal 400000 'sv a-form?: #t))
  (test-equal "femhundratusende"  (number->string-ordinal 500000 'sv a-form?: #t))
  (test-equal "sexhundratusende"  (number->string-ordinal 600000 'sv a-form?: #t))
  (test-equal "sjuhundratusende"  (number->string-ordinal 700000 'sv a-form?: #t))
  (test-equal "åttahundratusende" (number->string-ordinal 800000 'sv a-form?: #t))
  (test-equal "niohundratusende"  (number->string-ordinal 900000 'sv a-form?: #t))
  (test-equal "niohundraåttiosjutusen sexhundrafemtiofjärde"
    (number->string-ordinal 987654 'sv a-form?: #t))

  (test-equal "miljonte"      (number->string-ordinal 1000000 'sv a-form?: #t))
  (test-equal "två miljonte"  (number->string-ordinal 2000000 'sv a-form?: #t))
  (test-equal "tre miljonte"  (number->string-ordinal 3000000 'sv a-form?: #t))
  (test-equal "fyra miljonte" (number->string-ordinal 4000000 'sv a-form?: #t))
  (test-equal "fem miljonte"  (number->string-ordinal 5000000 'sv a-form?: #t))
  (test-equal "sex miljonte"  (number->string-ordinal 6000000 'sv a-form?: #t))
  (test-equal "sju miljonte"  (number->string-ordinal 7000000 'sv a-form?: #t))
  (test-equal "åtta miljonte" (number->string-ordinal 8000000 'sv a-form?: #t))
  (test-equal "nio miljonte"  (number->string-ordinal 9000000 'sv a-form?: #t))
  (test-equal "nio miljoner åttahundrasjuttiosex tusen femhundrafyrtiotredje"
    (number->string-ordinal 9876543 'sv a-form?: #t))

  (test-equal "tio miljonte"       (number->string-ordinal 10000000 'sv a-form?: #t))
  (test-equal "etthundra miljonte" (number->string-ordinal 100000000 'sv a-form?: #t))
  (test-equal "niohundraåttiosju miljoner sexhundrafemtiofyra tusen trehundratjugoförsta"
    (number->string-ordinal 987654321 'sv a-form?: #t))
  (test-equal "miljarde"           (number->string-ordinal 1000000000 'sv a-form?: #t))
  (test-equal "biljonte"           (number->string-ordinal 1000000000000 'sv a-form?: #t)))
(test-equal "niohundranittionio biljoner niohundranittionio miljarder niohundranittionio miljoner niohundranittionio tusen niohundranittionionde"
  (number->string-ordinal (1- #e1e15) 'sv))
(test-equal "1000000000000000:e" (number->string-ordinal #e1e15 'sv))

'((text numbers)
  (text numbers sv))