1# -*- mode: perl; -*-
2
3use strict;
4use warnings;
5
6use Test::More tests => 460;
7
8use Math::BigFloat;
9
10while (<DATA>) {
11    s/#.*$//;                   # remove comments
12    s/\s+$//;                   # remove trailing whitespace
13    next unless length;         # skip empty lines
14
15    my ($x_str, $expected) = split /:/;
16    my ($x, $str);
17
18        my $test = qq|\$x = Math::BigFloat -> new("$x_str");|
19                 . qq| \$str = \$x -> bsstr();|;
20
21        note "\n$test\n\n";
22        eval $test;
23
24        is($str, $expected, qq|input value is "$x_str"|);
25        is($x,   $x_str, "input object is unmodified");
26}
27
28__DATA__
29
30NaN:NaN
31
32inf:inf
33-inf:-inf
34
350:0e+0
36
37# positive numbers
38
390.000000000001:1e-12
400.00000000001:1e-11
410.0000000001:1e-10
420.000000001:1e-9
430.00000001:1e-8
440.0000001:1e-7
450.000001:1e-6
460.00001:1e-5
470.0001:1e-4
480.001:1e-3
490.01:1e-2
500.1:1e-1
511:1e+0
5210:1e+1
53100:1e+2
541000:1e+3
5510000:1e+4
56100000:1e+5
571000000:1e+6
5810000000:1e+7
59100000000:1e+8
601000000000:1e+9
6110000000000:1e+10
62100000000000:1e+11
631000000000000:1e+12
64
650.0000000000012:12e-13
660.000000000012:12e-12
670.00000000012:12e-11
680.0000000012:12e-10
690.000000012:12e-9
700.00000012:12e-8
710.0000012:12e-7
720.000012:12e-6
730.00012:12e-5
740.0012:12e-4
750.012:12e-3
760.12:12e-2
771.2:12e-1
7812:12e+0
79120:12e+1
801200:12e+2
8112000:12e+3
82120000:12e+4
831200000:12e+5
8412000000:12e+6
85120000000:12e+7
861200000000:12e+8
8712000000000:12e+9
88120000000000:12e+10
891200000000000:12e+11
90
910.00000000000123:123e-14
920.0000000000123:123e-13
930.000000000123:123e-12
940.00000000123:123e-11
950.0000000123:123e-10
960.000000123:123e-9
970.00000123:123e-8
980.0000123:123e-7
990.000123:123e-6
1000.00123:123e-5
1010.0123:123e-4
1020.123:123e-3
1031.23:123e-2
10412.3:123e-1
105123:123e+0
1061230:123e+1
10712300:123e+2
108123000:123e+3
1091230000:123e+4
11012300000:123e+5
111123000000:123e+6
1121230000000:123e+7
11312300000000:123e+8
114123000000000:123e+9
1151230000000000:123e+10
116
1170.000000000001234:1234e-15
1180.00000000001234:1234e-14
1190.0000000001234:1234e-13
1200.000000001234:1234e-12
1210.00000001234:1234e-11
1220.0000001234:1234e-10
1230.000001234:1234e-9
1240.00001234:1234e-8
1250.0001234:1234e-7
1260.001234:1234e-6
1270.01234:1234e-5
1280.1234:1234e-4
1291.234:1234e-3
13012.34:1234e-2
131123.4:1234e-1
1321234:1234e+0
13312340:1234e+1
134123400:1234e+2
1351234000:1234e+3
13612340000:1234e+4
137123400000:1234e+5
1381234000000:1234e+6
13912340000000:1234e+7
140123400000000:1234e+8
1411234000000000:1234e+9
142
1430.000003141592:3141592e-12
1440.00003141592:3141592e-11
1450.0003141592:3141592e-10
1460.003141592:3141592e-9
1470.03141592:3141592e-8
1480.3141592:3141592e-7
1493.141592:3141592e-6
15031.41592:3141592e-5
151314.1592:3141592e-4
1523141.592:3141592e-3
15331415.92:3141592e-2
154314159.2:3141592e-1
1553141592:3141592e+0
156
157# negative numbers
158
159-0.000000000001:-1e-12
160-0.00000000001:-1e-11
161-0.0000000001:-1e-10
162-0.000000001:-1e-9
163-0.00000001:-1e-8
164-0.0000001:-1e-7
165-0.000001:-1e-6
166-0.00001:-1e-5
167-0.0001:-1e-4
168-0.001:-1e-3
169-0.01:-1e-2
170-0.1:-1e-1
171-1:-1e+0
172-10:-1e+1
173-100:-1e+2
174-1000:-1e+3
175-10000:-1e+4
176-100000:-1e+5
177-1000000:-1e+6
178-10000000:-1e+7
179-100000000:-1e+8
180-1000000000:-1e+9
181-10000000000:-1e+10
182-100000000000:-1e+11
183-1000000000000:-1e+12
184
185-0.0000000000012:-12e-13
186-0.000000000012:-12e-12
187-0.00000000012:-12e-11
188-0.0000000012:-12e-10
189-0.000000012:-12e-9
190-0.00000012:-12e-8
191-0.0000012:-12e-7
192-0.000012:-12e-6
193-0.00012:-12e-5
194-0.0012:-12e-4
195-0.012:-12e-3
196-0.12:-12e-2
197-1.2:-12e-1
198-12:-12e+0
199-120:-12e+1
200-1200:-12e+2
201-12000:-12e+3
202-120000:-12e+4
203-1200000:-12e+5
204-12000000:-12e+6
205-120000000:-12e+7
206-1200000000:-12e+8
207-12000000000:-12e+9
208-120000000000:-12e+10
209-1200000000000:-12e+11
210
211-0.00000000000123:-123e-14
212-0.0000000000123:-123e-13
213-0.000000000123:-123e-12
214-0.00000000123:-123e-11
215-0.0000000123:-123e-10
216-0.000000123:-123e-9
217-0.00000123:-123e-8
218-0.0000123:-123e-7
219-0.000123:-123e-6
220-0.00123:-123e-5
221-0.0123:-123e-4
222-0.123:-123e-3
223-1.23:-123e-2
224-12.3:-123e-1
225-123:-123e+0
226-1230:-123e+1
227-12300:-123e+2
228-123000:-123e+3
229-1230000:-123e+4
230-12300000:-123e+5
231-123000000:-123e+6
232-1230000000:-123e+7
233-12300000000:-123e+8
234-123000000000:-123e+9
235-1230000000000:-123e+10
236
237-0.000000000001234:-1234e-15
238-0.00000000001234:-1234e-14
239-0.0000000001234:-1234e-13
240-0.000000001234:-1234e-12
241-0.00000001234:-1234e-11
242-0.0000001234:-1234e-10
243-0.000001234:-1234e-9
244-0.00001234:-1234e-8
245-0.0001234:-1234e-7
246-0.001234:-1234e-6
247-0.01234:-1234e-5
248-0.1234:-1234e-4
249-1.234:-1234e-3
250-12.34:-1234e-2
251-123.4:-1234e-1
252-1234:-1234e+0
253-12340:-1234e+1
254-123400:-1234e+2
255-1234000:-1234e+3
256-12340000:-1234e+4
257-123400000:-1234e+5
258-1234000000:-1234e+6
259-12340000000:-1234e+7
260-123400000000:-1234e+8
261-1234000000000:-1234e+9
262
263-0.000003141592:-3141592e-12
264-0.00003141592:-3141592e-11
265-0.0003141592:-3141592e-10
266-0.003141592:-3141592e-9
267-0.03141592:-3141592e-8
268-0.3141592:-3141592e-7
269-3.141592:-3141592e-6
270-31.41592:-3141592e-5
271-314.1592:-3141592e-4
272-3141.592:-3141592e-3
273-31415.92:-3141592e-2
274-314159.2:-3141592e-1
275-3141592:-3141592e+0
276