1use warnings; 2use strict; 3 4use Test::More tests => 2*10; 5 6BEGIN { $^H |= 0x20000; } 7 8my @t; 9 10sub mymap(&@) { my $sub = shift; return map { $sub->($_) } @_; } 11sub myneg(@) { return map { -$_ } @_; } 12package AA { sub listmeth { shift; return map { -$_ } @_; } } 13 14@t = (); 15eval q{ 16 use XS::APItest qw(arrayfullexpr); 17 no warnings "void"; 18 push @t, arrayfullexpr 1+2; 19 push @t, arrayfullexpr 0 || 2; 20 push @t, arrayfullexpr 1 || 2; 21 push @t, arrayfullexpr 0 || 2, 3; 22 push @t, arrayfullexpr 1 || 2, 3; 23 push @t, arrayfullexpr 1, 2; 24 push @t, arrayfullexpr 0 or 2; 25 push @t, arrayfullexpr 1 or 2; 26 push @t, arrayfullexpr 0 or 2, 3; 27 push @t, arrayfullexpr 1 or 2, 3; 28 { push @t, arrayfullexpr 1, 2 } 29 push @t, (arrayfullexpr 1, 2), 3; 30 push @t, arrayfullexpr do { 1; 1 }, 2; 31 push @t, arrayfullexpr 3, 4 if 1; 32 push @t, arrayfullexpr 5, 6 if 0; 33 push @t, arrayfullexpr (7, 8), 9; 34 push @t, arrayfullexpr a => "b"; 35 push @t, arrayfullexpr 1 ? reverse 2, 3 : 4, 5; 36 push @t, arrayfullexpr 0 ? reverse 2, 3 : 4, 5; 37 push @t, 1 ? reverse arrayfullexpr 2, 3 : 4, 5; 38 push @t, 0 ? reverse arrayfullexpr 2, 3 : 4, 5; 39 push @t, arrayfullexpr reverse 1, 2, 3; 40 push @t, sub { arrayfullexpr return 1, 2, 3 }->(); 41 push @t, arrayfullexpr myneg 1, 2, 3; 42 push @t, arrayfullexpr map { -$_ } 1, 2, 3; 43 push @t, arrayfullexpr mymap { -$_[0] } 1, 2, 3; 44 push @t, arrayfullexpr AA->listmeth(1, 2), 3; 45 push @t, arrayfullexpr listmeth AA (1, 2), 3; 46 push @t, arrayfullexpr listmeth AA 1, 2, 3; 47 push @t, arrayfullexpr not 1, 2; 48 push @t, arrayfullexpr reverse 6, 7, 8 or 9; 49 push @t, arrayfullexpr reverse 6, 7, 8 and 9; 50 push @t, arrayfullexpr 1 << 2; 51 push @t, arrayfullexpr 7 < 8; 52}; 53is $@, ""; 54is_deeply \@t, [ 55 [3], 56 [2], 57 [1], 58 [2,3], 59 [1,3], 60 [1,2], 61 [2], 62 [1], 63 [2,3], 64 [1], 65 [1,2], 66 [1,2], 3, 67 [1,2], 68 [3,4], 69 [7,8,9], 70 ["a","b"], 71 [3,2,5], 72 [4,5], 73 [2,3], 5, 74 4, 5, 75 [3,2,1], 76 1, 2, 3, 77 [-1,-2,-3], 78 [-1,-2,-3], 79 [-1,-2,-3], 80 [-1,-2,3], 81 [-1,-2,3], 82 [-1,-2,-3], 83 [!1], 84 [876], 85 [9], 86 [4], 87 [!!1], 88]; 89 90@t = (); 91eval q{ 92 use XS::APItest qw(arraylistexpr); 93 no warnings "void"; 94 push @t, arraylistexpr 1+2; 95 push @t, arraylistexpr 0 || 2; 96 push @t, arraylistexpr 1 || 2; 97 push @t, arraylistexpr 0 || 2, 3; 98 push @t, arraylistexpr 1 || 2, 3; 99 push @t, arraylistexpr 1, 2; 100 push @t, arraylistexpr 0 or 2; 101 push @t, arraylistexpr 1 or 2; 102 push @t, arraylistexpr 0 or 2, 3; 103 push @t, arraylistexpr 1 or 2, 3; 104 { push @t, arraylistexpr 1, 2 } 105 push @t, (arraylistexpr 1, 2), 3; 106 push @t, arraylistexpr do { 1; 1 }, 2; 107 push @t, arraylistexpr 3, 4 if 1; 108 push @t, arraylistexpr 5, 6 if 0; 109 push @t, arraylistexpr (7, 8), 9; 110 push @t, arraylistexpr a => "b"; 111 push @t, arraylistexpr 1 ? reverse 2, 3 : 4, 5; 112 push @t, arraylistexpr 0 ? reverse 2, 3 : 4, 5; 113 push @t, 1 ? reverse arraylistexpr 2, 3 : 4, 5; 114 push @t, 0 ? reverse arraylistexpr 2, 3 : 4, 5; 115 push @t, arraylistexpr reverse 1, 2, 3; 116 push @t, sub { arraylistexpr return 1, 2, 3 }->(); 117 push @t, arraylistexpr myneg 1, 2, 3; 118 push @t, arraylistexpr map { -$_ } 1, 2, 3; 119 push @t, arraylistexpr mymap { -$_[0] } 1, 2, 3; 120 push @t, arraylistexpr AA->listmeth(1, 2), 3; 121 push @t, arraylistexpr listmeth AA (1, 2), 3; 122 push @t, arraylistexpr listmeth AA 1, 2, 3; 123 push @t, arraylistexpr not 1, 2; 124 push @t, arraylistexpr reverse 6, 7, 8 or 9; 125 push @t, arraylistexpr reverse 6, 7, 8 and 9; 126 push @t, arraylistexpr 1 << 2; 127 push @t, arraylistexpr 7 < 8; 128}; 129is $@, ""; 130is_deeply \@t, [ 131 [3], 132 [2], 133 [1], 134 [2,3], 135 [1,3], 136 [1,2], 137 [0], 138 [1], 139 [0], 140 [1], 141 [1,2], 142 [1,2], 3, 143 [1,2], 144 [3,4], 145 [7,8,9], 146 ["a","b"], 147 [3,2,5], 148 [4,5], 149 [2,3], 5, 150 4, 5, 151 [3,2,1], 152 1, 2, 3, 153 [-1,-2,-3], 154 [-1,-2,-3], 155 [-1,-2,-3], 156 [-1,-2,3], 157 [-1,-2,3], 158 [-1,-2,-3], 159 [!1], 160 [8,7,6], 161 [8,7,6], 162 [4], 163 [!!1], 164]; 165 166@t = (); 167eval q{ 168 use XS::APItest qw(arraytermexpr); 169 no warnings "void"; 170 push @t, arraytermexpr 1+2; 171 push @t, arraytermexpr 0 || 2; 172 push @t, arraytermexpr 1 || 2; 173 push @t, arraytermexpr 0 || 2, 3; 174 push @t, arraytermexpr 1 || 2, 3; 175 push @t, arraytermexpr 1, 2; 176 push @t, arraytermexpr 0 or 2; 177 push @t, arraytermexpr 1 or 2; 178 push @t, arraytermexpr 0 or 2, 3; 179 push @t, arraytermexpr 1 or 2, 3; 180 { push @t, arraytermexpr 1 } 181 push @t, (arraytermexpr 1, 2), 3; 182 push @t, arraytermexpr do { 1; 1 }, 2; 183 push @t, arraytermexpr 3, 4 if 1; 184 push @t, arraytermexpr 5, 6 if 0; 185 push @t, arraytermexpr (7, 8), 9; 186 push @t, arraytermexpr a => "b"; 187 push @t, arraytermexpr 1 ? reverse 2, 3 : 4, 5; 188 push @t, arraytermexpr 0 ? reverse 2, 3 : 4, 5; 189 push @t, 1 ? reverse arraytermexpr 2, 3 : 4, 5; 190 push @t, 0 ? reverse arraytermexpr 2, 3 : 4, 5; 191 push @t, arraytermexpr reverse 1, 2, 3; 192 push @t, sub { arraytermexpr return 1, 2, 3 }->(); 193 push @t, arraytermexpr myneg 1, 2, 3; 194 push @t, arraytermexpr map { -$_ } 1, 2, 3; 195 push @t, arraytermexpr mymap { -$_[0] } 1, 2, 3; 196 push @t, arraytermexpr AA->listmeth(1, 2), 3; 197 push @t, arraytermexpr listmeth AA (1, 2), 3; 198 push @t, arraytermexpr listmeth AA 1, 2, 3; 199 push @t, arraytermexpr not 1, 2; 200 push @t, arraytermexpr reverse 6, 7, 8 or 9; 201 push @t, arraytermexpr reverse 6, 7, 8 and 9; 202 push @t, arraytermexpr 1 << 2; 203 push @t, arraytermexpr 7 < 8; 204}; 205is $@, ""; 206is_deeply \@t, [ 207 [3], 208 [2], 209 [1], 210 [2], 3, 211 [1], 3, 212 [1], 2, 213 [0], 214 [1], 215 [0], 216 [1], 217 [1], 218 [1], 2, 3, 219 [1], 2, 220 [3], 4, 221 [7,8], 9, 222 ["a"], "b", 223 [3,2], 5, 224 [4], 5, 225 3, [2], 5, 226 4, 5, 227 [3,2,1], 228 1, 2, 3, 229 [-1,-2,-3], 230 [-1,-2,-3], 231 [-1,-2,-3], 232 [-1,-2], 3, 233 [-1,-2], 3, 234 [-1,-2,-3], 235 [!1], 236 [8,7,6], 237 [8,7,6], 238 [4], 239 [!!1], 240]; 241 242@t = (); 243eval q{ 244 use XS::APItest qw(arrayarithexpr); 245 no warnings "void"; 246 push @t, arrayarithexpr 1+2; 247 push @t, arrayarithexpr 0 || 2; 248 push @t, arrayarithexpr 1 || 2; 249 push @t, arrayarithexpr 0 || 2, 3; 250 push @t, arrayarithexpr 1 || 2, 3; 251 push @t, arrayarithexpr 1, 2; 252 push @t, arrayarithexpr 0 or 2; 253 push @t, arrayarithexpr 1 or 2; 254 push @t, arrayarithexpr 0 or 2, 3; 255 push @t, arrayarithexpr 1 or 2, 3; 256 { push @t, arrayarithexpr 1 } 257 push @t, (arrayarithexpr 1, 2), 3; 258 push @t, arrayarithexpr do { 1; 1 }, 2; 259 push @t, arrayarithexpr 3, 4 if 1; 260 push @t, arrayarithexpr 5, 6 if 0; 261 push @t, arrayarithexpr (7, 8), 9; 262 push @t, arrayarithexpr a => "b"; 263 push @t, arrayarithexpr 1 ? reverse 2, 3 : 4, 5; 264 push @t, arrayarithexpr 0 ? reverse 2, 3 : 4, 5; 265 push @t, 1 ? reverse arrayarithexpr 2, 3 : 4, 5; 266 push @t, 0 ? reverse arrayarithexpr 2, 3 : 4, 5; 267 push @t, arrayarithexpr reverse 1, 2, 3; 268 push @t, sub { arrayarithexpr return 1, 2, 3 }->(); 269 push @t, arrayarithexpr myneg 1, 2, 3; 270 push @t, arrayarithexpr map { -$_ } 1, 2, 3; 271 push @t, arrayarithexpr mymap { -$_[0] } 1, 2, 3; 272 push @t, arrayarithexpr AA->listmeth(1, 2), 3; 273 push @t, arrayarithexpr listmeth AA (1, 2), 3; 274 push @t, arrayarithexpr listmeth AA 1, 2, 3; 275 push @t, arrayarithexpr not 1, 2; 276 push @t, arrayarithexpr reverse 6, 7, 8 or 9; 277 push @t, arrayarithexpr reverse 6, 7, 8 and 9; 278 push @t, arrayarithexpr 1 << 2; 279 push @t, arrayarithexpr 7 < 8; 280}; 281is $@, ""; 282is_deeply \@t, [ 283 [3], 284 [0], 285 [1], 286 [0], 3, 287 [1], 3, 288 [1], 2, 289 [0], 290 [1], 291 [0], 292 [1], 293 [1], 294 [1], 2, 3, 295 [1], 2, 296 [3], 4, 297 [7,8], 9, 298 ["a"], "b", 299 3, 2, 5, 300 3, 2, 5, 301 3, [2], 5, 302 4, 5, 303 [3,2,1], 304 1, 2, 3, 305 [-1,-2,-3], 306 [-1,-2,-3], 307 [-1,-2,-3], 308 [-1,-2], 3, 309 [-1,-2], 3, 310 [-1,-2,-3], 311 [!1], 312 [8,7,6], 313 [8,7,6], 314 [4], 315 !!0, 316]; 317 318@t = (); 319eval q{ 320 use XS::APItest qw(arrayexprflags); 321 push @t, arrayexprflags! 1, 2; 322}; 323is $@, ""; 324is_deeply \@t, [ [1,2] ]; 325 326@t = (); 327eval q{ 328 use XS::APItest qw(arrayexprflags); 329 push @t, arrayexprflags? 1, 2; 330}; 331is $@, ""; 332is_deeply \@t, [ [1,2] ]; 333 334@t = (); 335eval q{ 336 use XS::APItest qw(arrayexprflags); 337 push @t, arrayexprflags! [); 338}; 339like $@, qr/\A(?:Parse|syntax) error/; 340is_deeply \@t, []; 341 342@t = (); 343eval q{ 344 use XS::APItest qw(arrayexprflags); 345 push @t, arrayexprflags? [); 346}; 347like $@, qr/\A(?:Parse|syntax) error/; 348is_deeply \@t, []; 349 350@t = (); 351eval q{ 352 use XS::APItest qw(arrayexprflags); 353 push @t, arrayexprflags! ; 354}; 355like $@, qr/\A(?:Parse|syntax) error/; 356is_deeply \@t, []; 357 358@t = (); 359eval q{ 360 use XS::APItest qw(arrayexprflags); 361 push @t, arrayexprflags? ; 362}; 363is $@, ""; 364is_deeply \@t, [ {} ]; 365 3661; 367