Commit | Line | Data |
1bfb5477 |
1 | #!./perl |
2 | |
f4a2945e |
3 | BEGIN { |
1bfb5477 |
4 | unless (-d 'blib') { |
f4a2945e |
5 | chdir 't' if -d 't'; |
6 | @INC = '../lib'; |
6b05f64e |
7 | require Config; import Config; |
1bfb5477 |
8 | keys %Config; # Silence warning |
6b05f64e |
9 | if ($Config{extensions} !~ /\bList\/Util\b/) { |
10 | print "1..0 # Skip: List::Util was not built\n"; |
11 | exit 0; |
12 | } |
1bfb5477 |
13 | } |
f4a2945e |
14 | } |
15 | |
cf083cf9 |
16 | use Scalar::Util (); |
17 | use Test::More (grep { /dualvar/ } @Scalar::Util::EXPORT_FAIL) |
18 | ? (skip_all => 'dualvar requires XS version') |
19 | : (tests => 11); |
1bfb5477 |
20 | |
cf083cf9 |
21 | Scalar::Util->import('dualvar'); |
f4a2945e |
22 | |
cf083cf9 |
23 | $var = dualvar( 2.2,"string"); |
f4a2945e |
24 | |
cf083cf9 |
25 | ok( $var == 2.2, 'Numeric value'); |
26 | ok( $var eq "string", 'String value'); |
f4a2945e |
27 | |
28 | $var2 = $var; |
29 | |
cf083cf9 |
30 | ok( $var2 == 2.2, 'copy Numeric value'); |
31 | ok( $var2 eq "string", 'copy String value'); |
32 | |
f4a2945e |
33 | $var++; |
34 | |
cf083cf9 |
35 | ok( $var == 3.2, 'inc Numeric value'); |
36 | ok( $var ne "string", 'inc String value'); |
f4a2945e |
37 | |
cf083cf9 |
38 | my $numstr = "10.2"; |
39 | my $numtmp = int($numstr); # use $numstr as an int |
f4a2945e |
40 | |
cf083cf9 |
41 | $var = dualvar($numstr, ""); |
f4a2945e |
42 | |
cf083cf9 |
43 | ok( $var == $numstr, 'NV'); |
1bfb5477 |
44 | |
2ff28616 |
45 | SKIP: { |
46 | skip("dualvar with UV value known to fail with $]",2) if $] < 5.006_001; |
47 | $var = dualvar(1<<31, ""); |
48 | ok( $var == (1<<31), 'UV 1'); |
49 | ok( $var > 0, 'UV 2'); |
50 | } |
1bfb5477 |
51 | |
52 | tie my $tied, 'Tied'; |
cf083cf9 |
53 | $var = dualvar($tied, "ok"); |
54 | ok($var == 7.5, 'Tied num'); |
55 | ok($var eq 'ok', 'Tied str'); |
1bfb5477 |
56 | |
57 | package Tied; |
58 | |
59 | sub TIESCALAR { bless {} } |
60 | sub FETCH { 7.5 } |
61 | |