1use warnings;
2use strict;
3
4use Test::More tests => 16;
5
6BEGIN { $^H |= 0x20000; }
7
8my $t;
9
10$t = "";
11eval q{
12	use XS::APItest qw(blockasexpr);
13	$t .= "a";
14	$t .= "b" . blockasexpr { "c"; } . "d";
15	$t .= "e";
16};
17is $@, "";
18is $t, "abcde";
19
20$t = "";
21eval q{
22	use XS::APItest qw(blockasexpr);
23	no warnings "void";
24	$t .= "a";
25	$t .= "b" . blockasexpr { "z"; "c"; } . "d";
26	$t .= "e";
27};
28is $@, "";
29is $t, "abcde";
30
31$t = "";
32eval q{
33	use XS::APItest qw(blockasexpr);
34	$t .= "a";
35	$t .= "b" . blockasexpr { if($t eq "a") { "c"; } else { "d"; } } . "e";
36	$t .= "f";
37};
38is $@, "";
39is $t, "abcef";
40
41$t = "";
42eval q{
43	use XS::APItest qw(blockasexpr);
44	$t .= "a";
45	$t .= "b" . blockasexpr { if($t eq "z") { "c"; } else { "d"; } } . "e";
46	$t .= "f";
47};
48is $@, "";
49is $t, "abdef";
50
51$t = "";
52eval q{
53	use XS::APItest qw(blockasexpr);
54	no warnings "void";
55	$t .= "a";
56	$t .= "b" . blockasexpr { { "z"; "c"; } } . "d";
57	$t .= "e";
58};
59is $@, "";
60is $t, "abcde";
61
62$t = "";
63eval q{
64	use XS::APItest qw(blockasexpr);
65	$t .= "a";
66	$t .= blockasexpr {
67		my $t = "z";
68		"b";
69	};
70	$t .= "c";
71};
72is $@, "";
73is $t, "abc";
74
75$t = "";
76eval q{
77	use XS::APItest qw(blockasexpr);
78	my $f = 1.5;
79	$t .= "a(".($f+$f).")";
80	$t .= "b(" . blockasexpr {
81		use integer;
82		$f+$f;
83	} . ")";
84	$t .= "c(".($f+$f).")";
85};
86is $@, "";
87is $t, "a(3)b(2)c(3)";
88
89$t = "";
90eval q{
91	use XS::APItest qw(blockasexpr);
92	our $z = "z";
93	$t .= "a$z";
94	$t .= "b" . blockasexpr {
95		local $z = "y";
96		$z;
97	};
98	$t .= "c$z";
99};
100is $@, "";
101is $t, "azbycz";
102
1031;
104