This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
add xor, grep, flip, flop to boolean cxt detection
[perl5.git] / t / perf / optree.t
index 189cee0..4aebb9e 100644 (file)
@@ -13,7 +13,7 @@ BEGIN {
     @INC = '../lib';
 }
 
-plan 543;
+plan 711;
 
 use v5.10; # state
 use B qw(svref_2object
@@ -312,6 +312,38 @@ for my $ops (
         [ [1,9,1], [0,0,0,1], 'if ($x && %s) {$x} else {$y}'     ],
         [ [1,9,2], [0,0,0,1], 'unless ($x && %s) {$x}'           ],
 
+        # INNER XOR LHS
+
+            # LHS of XOR is currently too hard to detect as
+            # being in boolean context
+
+        # INNER XOR RHS
+
+        [ [1,1,1], [1],       '($x xor %s)'                      ],
+        [ [1,1,1], [0,1],     '!($x xor %s)'                     ],
+        [ [1,1,1], [0,1,1],   '$y || ($x xor %s)'                ],
+        [ [1,9,1], [0,0,1],   'if ($x xor %s) {$x}'              ],
+        [ [1,9,1], [0,0,1],   'if ($x xor %s) {$x} else {$y}'    ],
+        [ [1,9,1], [0,0,1],   'unless ($x xor %s) {$x}'          ],
+
+        # GREP
+
+        [ [1,1,1], [0,1,0],    'grep %s,1,2'                     ],
+        [ [1,1,1], [0,1,0,0],  'grep !%s,1,2'                    ],
+        [ [1,1,1], [0,1,0,0,1],'grep  $y || %s,1,2'              ],
+
+        # FLIP
+
+        [ [1,1,1], [0,0,0,0],      '%s..$x'                      ],
+        [ [1,1,1], [0,0,0,0,0],    '!%s..$x'                     ],
+        [ [1,1,1], [0,0,0,0,0,1],  '($y || %s)..$x'              ],
+
+        # FLOP
+
+        [ [1,1,1], [0,0,0,1],      '$x..%s'                      ],
+        [ [1,1,1], [0,0,0,1,0],    '$x..!%s'                     ],
+        [ [1,1,1], [0,0,0,1,0,1],  '$x..($y || %s)'              ],
+
     ) {
         my ($expects, $op_path, $code_fmt) = @$test;