fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / steps / auto / sizes-01.t
blob0e1c4c96d71588f587a566550927789844b1d3d7
1 #! perl
2 # Copyright (C) 2007, Parrot Foundation.
3 # $Id$
4 # auto/sizes-01.t
6 use strict;
7 use warnings;
8 use Test::More tests => 53;
9 use Carp;
10 use lib qw( lib t/configure/testlib );
11 use_ok('config::auto::sizes');
12 use Parrot::Configure::Options qw( process_options );
13 use Parrot::Configure::Step::Test;
14 use Parrot::Configure::Test qw(
15     test_step_constructor_and_description
17 use IO::CaptureOutput qw | capture |;
20 ########## _handle_intval_ptrsize_discrepancy() ##########
22 my ($args, $step_list_ref) = process_options(
23     {
24         argv => [ ],
25         mode => q{configure},
26     }
29 my $conf = Parrot::Configure::Step::Test->new;
30 $conf->include_config_results( $args );
32 my $serialized = $conf->pcfreeze();
34 my $pkg = q{auto::sizes};
36 $conf->add_steps($pkg);
37 $conf->options->set( %{$args} );
38 my $step = test_step_constructor_and_description($conf);
40     my $stdout;
41     my %results = (
42         ptrsize         => 1,
43         intvalsize      => 1,
44     );
45     capture(
46         sub { auto::sizes::_handle_intval_ptrsize_discrepancy(\%results); },
47         \$stdout,
48     );
49     ok(! $stdout, "As expected, no warning needed");
53     my $stdout;
54     my %results = (
55         ptrsize         => 1,
56         intvalsize      => 2,
57     );
58     capture(
59         sub { auto::sizes::_handle_intval_ptrsize_discrepancy(\%results); },
60         \$stdout,
61     );
62     like($stdout, qr/I see your chosen INTVAL/s,
63         "Got expected warning about discrepancy"
64     );
67 ########## _set_int2() ##########
70     my $stdout;
71     my %results = ( shortsize   => 2 );
72     capture(
73         sub { auto::sizes::_set_int2($conf, \%results); },
74         \$stdout,
75     );
76     is($conf->data->get( 'int2_t' ), q{short},
77         "Got expected value for int2_t");
78     ok(! $stdout, "As expected, no warning needed");
82     my $stdout;
83     my %results = ( shortsize   => 4 );
84     capture(
85         sub { auto::sizes::_set_int2($conf, \%results); },
86         \$stdout,
87     );
88     is($conf->data->get( 'int2_t' ), q{int},
89         "Got expected value for int2_t");
90     like($stdout, qr/conversion ops might fail/s,
91         "Got expected warning");
94 ########## _set_int4() ##########
97     my $stdout;
98     my %results = ( shortsize   => 4 );
99     capture(
100         sub { auto::sizes::_set_int4($conf, \%results); },
101         \$stdout,
102     );
103     is($conf->data->get( 'int4_t' ), q{short},
104         "Got expected value for int4_t");
105     ok(! $stdout, "As expected, no warning needed");
109     my $stdout;
110     my %results = ( intsize   => 4 );
111     capture(
112         sub { auto::sizes::_set_int4($conf, \%results); },
113         \$stdout,
114     );
115     is($conf->data->get( 'int4_t' ), q{int},
116         "Got expected value for int4_t");
117     ok(! $stdout, "As expected, no warning needed");
121     my $stdout;
122     my %results = ( longsize   => 4 );
123     capture(
124         sub { auto::sizes::_set_int4($conf, \%results); },
125         \$stdout,
126     );
127     is($conf->data->get( 'int4_t' ), q{long},
128         "Got expected value for int4_t");
129     ok(! $stdout, "As expected, no warning needed");
133     my $stdout;
134     my %results = ( );
135     capture(
136         sub { auto::sizes::_set_int4($conf, \%results); },
137         \$stdout,
138     );
139     is($conf->data->get( 'int4_t' ), q{int},
140         "Got expected value for int4_t");
141     like($stdout, qr/conversion ops might fail/s,
142         "Got expected warning");
145 ########## _set_float4() ##########
148     my $stdout;
149     my %results = ( floatsize => 4 );
150     capture(
151         sub { auto::sizes::_set_float4($conf, \%results); },
152         \$stdout,
153     );
154     is($conf->data->get( 'float4_t' ), q{float},
155         "Got expected value for float4_t");
156     ok(! $stdout, "As expected, no warning needed");
160     my $stdout;
161     my %results = ( floatsize => 8 );
162     capture(
163         sub { auto::sizes::_set_float4($conf, \%results); },
164         \$stdout,
165     );
166     is($conf->data->get( 'float4_t' ), q{double},
167         "Got expected value for float4_t");
168     like($stdout, qr/conversion ops might fail/s,
169         "Got expected warning");
172 ########## _set_float8() ##########
175     my $stdout;
176     my %results = ( doublesize => 8 );
177     capture(
178         sub { auto::sizes::_set_float8($conf, \%results); },
179         \$stdout,
180     );
181     is($conf->data->get( 'float8_t' ), q{double},
182         "Got expected value for float8_t");
183     ok(! $stdout, "As expected, no warning needed");
187     my $stdout;
188     my %results = ( );
189     capture(
190         sub { auto::sizes::_set_float8($conf, \%results); },
191         \$stdout,
192     );
193     is($conf->data->get( 'float8_t' ), q{double},
194         "Got expected value for float8_t");
195     like($stdout, qr/conversion ops might fail/s,
196         "Got expected warning");
199 ########## _handle_hugeintvalsize() ##########
201 my (%hugeintval, $intval, $intvalsize);
203 $conf->data->set( intval => undef );
204 $conf->data->set( intvalsize => undef );
205 $hugeintval{hugeintvalsize} = undef;
206 $intval = q{integer};
207 $intvalsize = 4;
208 auto::sizes::_handle_hugeintvalsize(
209     $conf,
210     {
211         hugeintval      => \%hugeintval,
212         intval          => $intval,
213         intvalsize      => $intvalsize,
214     },
216 is( $conf->data->get( 'hugeintval' ), $intval,
217     "Got expected value for hugeintval");
218 is( $conf->data->get( 'hugeintvalsize' ), $intvalsize,
219     "Got expected value for hugeintvalsize");
220 $conf->data->set( hugeintval => undef );
221 $conf->data->set( hugeintvalsize => undef );
223 $conf->data->set( intval => undef );
224 $conf->data->set( intvalsize => undef );
225 $hugeintval{hugeintvalsize} = 4;
226 $intval = q{integer};
227 $intvalsize = 4;
228 auto::sizes::_handle_hugeintvalsize(
229     $conf,
230     {
231         hugeintval      => \%hugeintval,
232         intval          => $intval,
233         intvalsize      => $intvalsize,
234     },
236 is( $conf->data->get( 'hugeintval' ), $intval,
237     "Got expected value for hugeintval");
238 is( $conf->data->get( 'hugeintvalsize' ), $intvalsize,
239     "Got expected value for hugeintvalsize");
240 $conf->data->set( hugeintval => undef );
241 $conf->data->set( hugeintvalsize => undef );
243 $conf->data->set( intval => undef );
244 $conf->data->set( intvalsize => undef );
245 $hugeintval{hugeintvalsize} = 8;
246 $intval = q{integer};
247 $intvalsize = 4;
248 auto::sizes::_handle_hugeintvalsize(
249     $conf,
250     {
251         hugeintval      => \%hugeintval,
252         intval          => $intval,
253         intvalsize      => $intvalsize,
254     },
256 ok( ! defined $conf->data->get( 'hugeintval' ),
257     "Got expected value for hugeintval");
258 ok( ! defined $conf->data->get( 'hugeintvalsize' ),
259     "Got expected value for hugeintvalsize");
260 $conf->data->set( hugeintval => undef );
261 $conf->data->set( hugeintvalsize => undef );
263 $conf->data->set( intval => undef );
264 $conf->data->set( intvalsize => undef );
266 ########## _set_hugefloatval() ##########
268 my $size = 12;
269 auto::sizes::_set_hugefloatval( $conf, $size );
270 is( $conf->data->get( 'hugefloatval' ), 'long double',
271     "Got expected type for hugefloatval");
272 is( $conf->data->get( 'hugefloatvalsize' ), $size,
273     "Got expected size for hugefloatvalsize");
275 auto::sizes::_set_hugefloatval( $conf, 0 );
276 is( $conf->data->get( 'hugefloatval' ), 'double',
277     "Got expected type for hugefloatval");
278 is( $conf->data->get( 'hugefloatvalsize' ), $conf->data->get('doublesize'),
279     "Got expected size for hugefloatvalsize");
281 ########## _set_intvalmaxmin() ##########
283 my @trueintvals = (
284     $conf->data->get( 'iv' ),
285     $conf->data->get( 'intvalmin' ),
286     $conf->data->get( 'intvalmax' ),
288 $conf->data->set( iv => 'int' );
289 auto::sizes::_set_intvalmaxmin( $conf );
290 is( $conf->data->get( 'intvalmin' ), 'INT_MIN',
291     "Got expected value for 'intvalmin' when 'iv' is 'int'" );
292 is( $conf->data->get( 'intvalmax' ), 'INT_MAX',
293     "Got expected value for 'intvalmax' when 'iv' is 'int'" );
295 $conf->data->set( iv => 'long' );
296 auto::sizes::_set_intvalmaxmin( $conf );
297 is( $conf->data->get( 'intvalmin' ), 'LONG_MIN',
298     "Got expected value for 'intvalmin' when 'iv' is 'long'" );
299 is( $conf->data->get( 'intvalmax' ), 'LONG_MAX',
300     "Got expected value for 'intvalmax' when 'iv' is 'long'" );
302 $conf->data->set( iv => 'long int' );
303 auto::sizes::_set_intvalmaxmin( $conf );
304 is( $conf->data->get( 'intvalmin' ), 'LONG_MIN',
305     "Got expected value for 'intvalmin' when 'iv' is 'long int'" );
306 is( $conf->data->get( 'intvalmax' ), 'LONG_MAX',
307     "Got expected value for 'intvalmax' when 'iv' is 'long int'" );
309 $conf->data->set( iv => 'long long' );
310 auto::sizes::_set_intvalmaxmin( $conf );
311 is( $conf->data->get( 'intvalmin' ), 'LLONG_MIN',
312     "Got expected value for 'intvalmin' when 'iv' is 'long long'" );
313 is( $conf->data->get( 'intvalmax' ), 'LLONG_MAX',
314     "Got expected value for 'intvalmax' when 'iv' is 'long long'" );
316 $conf->data->set( iv => 'long long int' );
317 auto::sizes::_set_intvalmaxmin( $conf );
318 is( $conf->data->get( 'intvalmin' ), 'LLONG_MIN',
319     "Got expected value for 'intvalmin' when 'iv' is 'long long int'" );
320 is( $conf->data->get( 'intvalmax' ), 'LLONG_MAX',
321     "Got expected value for 'intvalmax' when 'iv' is 'long long int'" );
323 my $badtype = 'foobar';
324 $conf->data->set( iv => $badtype );
325 eval { auto::sizes::_set_intvalmaxmin( $conf ); };
326 like($@, qr/Configure.pl:  Cannot find limits for type '$badtype'/,
327     "Got expected 'die' message for unrecognized 'iv'");
329 # Reset true values prior to subsequent tests.
330 $conf->data->set( 'iv' => $trueintvals[0] );
331 $conf->data->set( 'intvalmin' => $trueintvals[1] );
332 $conf->data->set( 'intvalmax' => $trueintvals[2] );
334 ########## _set_floatvalmaxmin() ##########
336 my @truefloatvals = (
337     $conf->data->get( 'nv' ),
338     $conf->data->get( 'floatvalmin' ),
339     $conf->data->get( 'floatvalmax' ),
342 $conf->data->set( nv => 'double' );
343 auto::sizes::_set_floatvalmaxmin( $conf );
344 is( $conf->data->get( 'floatvalmin' ), 'DBL_MIN',
345     "Got expected value for 'floatvalmin' when 'nv' is 'double'" );
346 is( $conf->data->get( 'floatvalmax' ), 'DBL_MAX',
347     "Got expected value for 'floatvalmax' when 'nv' is 'double'" );
349 $conf->data->set( nv => 'long double' );
350 auto::sizes::_set_floatvalmaxmin( $conf );
351 is( $conf->data->get( 'floatvalmin' ), 'LDBL_MIN',
352     "Got expected value for 'floatvalmin' when 'nv' is 'long double'" );
353 is( $conf->data->get( 'floatvalmax' ), 'LDBL_MAX',
354     "Got expected value for 'floatvalmax' when 'nv' is 'long double'" );
356 $badtype = 'foobar';
357 $conf->data->set( nv => $badtype );
358 eval { auto::sizes::_set_floatvalmaxmin( $conf ); };
359 like($@, qr/Configure.pl:  Cannot find limits for type '$badtype'/,
360     "Got expected 'die' message for unrecognized 'nv'");
362 pass("Completed all tests in $0");
364 ################### DOCUMENTATION ###################
366 =head1 NAME
368 auto/sizes-01.t - test auto::sizes
370 =head1 SYNOPSIS
372     % prove t/steps/auto/sizes-01.t
374 =head1 DESCRIPTION
376 The files in this directory test functionality used by F<Configure.pl>.
378 The tests in this file test auto::sizes.
380 =head1 AUTHOR
382 James E Keenan
384 =head1 SEE ALSO
386 config::auto::sizes, F<Configure.pl>.
388 =cut
390 # Local Variables:
391 #   mode: cperl
392 #   cperl-indent-level: 4
393 #   fill-column: 100
394 # End:
395 # vim: expandtab shiftwidth=4: