The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w
use strict;
use Test::More tests => 180;
use Set::Infinite;

for ( split /\s+/m => q%

  [1,3]^[0,4]=1  [1,3]^[1,4]=1  [1,3]^[2,4]=1  [1,3]^[3,4]=1  [1,3]^[4,4]=0

  [1,3]^[0,3]=1  [1,3]^[1,3]=1  [1,3]^[2,3]=1  [1,3]^[3,3]=1

  [1,3]^[0,2]=1  [1,3]^[1,2]=1  [1,3]^[2,2]=1

  [1,3]^[0,1]=1  [1,3]^[1,1]=1

  [1,3]^[0,0]=0


  [1,3]^[0,4)=1  [1,3]^[1,4)=1  [1,3]^[2,4)=1  [1,3]^[3,4)=1  

  [1,3]^[0,3)=1  [1,3]^[1,3)=1  [1,3]^[2,3)=1  

  [1,3]^[0,2)=1  [1,3]^[1,2)=1  

  [1,3]^[0,1)=0  


  [1,3]^(0,4)=1  [1,3]^(1,4)=1  [1,3]^(2,4)=1  [1,3]^(3,4)=0  

  [1,3]^(0,3)=1  [1,3]^(1,3)=1  [1,3]^(2,3)=1  

  [1,3]^(0,2)=1  [1,3]^(1,2)=1  

  [1,3]^(0,1)=0 


  [1,3]^(0,4]=1  [1,3]^(1,4]=1  [1,3]^(2,4]=1  [1,3]^(3,4]=0

  [1,3]^(0,3]=1  [1,3]^(1,3]=1  [1,3]^(2,3]=1  

  [1,3]^(0,2]=1  [1,3]^(1,2]=1  

  [1,3]^(0,1]=1 



  [1,3)^[0,4]=1  [1,3)^[1,4]=1  [1,3)^[2,4]=1  [1,3)^[3,4]=0  [1,3)^[4,4]=0

  [1,3)^[0,3]=1  [1,3)^[1,3]=1  [1,3)^[2,3]=1  [1,3)^[3,3]=0

  [1,3)^[0,2]=1  [1,3)^[1,2]=1  [1,3)^[2,2]=1

  [1,3)^[0,1]=1  [1,3)^[1,1]=1

  [1,3)^[0,0]=0


  [1,3)^[0,4)=1  [1,3)^[1,4)=1  [1,3)^[2,4)=1  [1,3)^[3,4)=0  

  [1,3)^[0,3)=1  [1,3)^[1,3)=1  [1,3)^[2,3)=1  

  [1,3)^[0,2)=1  [1,3)^[1,2)=1  

  [1,3)^[0,1)=0  


  [1,3)^(0,4)=1  [1,3)^(1,4)=1  [1,3)^(2,4)=1  [1,3)^(3,4)=0  

  [1,3)^(0,3)=1  [1,3)^(1,3)=1  [1,3)^(2,3)=1  

  [1,3)^(0,2)=1  [1,3)^(1,2)=1  

  [1,3)^(0,1)=0 


  [1,3)^(0,4]=1  [1,3)^(1,4]=1  [1,3)^(2,4]=1  [1,3)^(3,4]=0

  [1,3)^(0,3]=1  [1,3)^(1,3]=1  [1,3)^(2,3]=1  

  [1,3)^(0,2]=1  [1,3)^(1,2]=1  

  [1,3)^(0,1]=1 



  (1,3]^[0,4]=1  (1,3]^[1,4]=1  (1,3]^[2,4]=1  (1,3]^[3,4]=1  (1,3]^[4,4]=0

  (1,3]^[0,3]=1  (1,3]^[1,3]=1  (1,3]^[2,3]=1  (1,3]^[3,3]=1

  (1,3]^[0,2]=1  (1,3]^[1,2]=1  (1,3]^[2,2]=1

  (1,3]^[0,1]=0  (1,3]^[1,1]=0

  (1,3]^[0,0]=0


  (1,3]^[0,4)=1  (1,3]^[1,4)=1  (1,3]^[2,4)=1  (1,3]^[3,4)=1  

  (1,3]^[0,3)=1  (1,3]^[1,3)=1  (1,3]^[2,3)=1  

  (1,3]^[0,2)=1  (1,3]^[1,2)=1  

  (1,3]^[0,1)=0  


  (1,3]^(0,4)=1  (1,3]^(1,4)=1  (1,3]^(2,4)=1  (1,3]^(3,4)=0  

  (1,3]^(0,3)=1  (1,3]^(1,3)=1  (1,3]^(2,3)=1  

  (1,3]^(0,2)=1  (1,3]^(1,2)=1  

  (1,3]^(0,1)=0 


  (1,3]^(0,4]=1  (1,3]^(1,4]=1  (1,3]^(2,4]=1  (1,3]^(3,4]=0

  (1,3]^(0,3]=1  (1,3]^(1,3]=1  (1,3]^(2,3]=1  

  (1,3]^(0,2]=1  (1,3]^(1,2]=1  

  (1,3]^(0,1]=0 


  (1,3)^[0,4]=1  (1,3)^[1,4]=1  (1,3)^[2,4]=1  (1,3)^[3,4]=0  (1,3)^[4,4]=0

  (1,3)^[0,3]=1  (1,3)^[1,3]=1  (1,3)^[2,3]=1  (1,3)^[3,3]=0

  (1,3)^[0,2]=1  (1,3)^[1,2]=1  (1,3)^[2,2]=1

  (1,3)^[0,1]=0  (1,3)^[1,1]=0

  (1,3)^[0,0]=0


  (1,3)^[0,4)=1  (1,3)^[1,4)=1  (1,3)^[2,4)=1  (1,3)^[3,4)=0  

  (1,3)^[0,3)=1  (1,3)^[1,3)=1  (1,3)^[2,3)=1  

  (1,3)^[0,2)=1  (1,3)^[1,2)=1  

  (1,3)^[0,1)=0  


  (1,3)^(0,4)=1  (1,3)^(1,4)=1  (1,3)^(2,4)=1  (1,3)^(3,4)=0  

  (1,3)^(0,3)=1  (1,3)^(1,3)=1  (1,3)^(2,3)=1  

  (1,3)^(0,2)=1  (1,3)^(1,2)=1  

  (1,3)^(0,1)=0 


  (1,3)^(0,4]=1  (1,3)^(1,4]=1  (1,3)^(2,4]=1  (1,3)^(3,4]=0

  (1,3)^(0,3]=1  (1,3)^(1,3]=1  (1,3)^(2,3]=1  

  (1,3)^(0,2]=1  (1,3)^(1,2]=1  

  (1,3)^(0,1]=0 

% ) {
    # print " test *$_*\n";
    my ( $a1, $b1, $c1, $d1, $op,
         $a2, $b2, $c2, $d2,
         $result ) = /(.)(\d+),(\d+)(.)(.)(.)(\d+),(\d+)(.)=(\d+)/;
    next unless $a1;
    next if $a1 eq '*';
    my $s1 = Set::Infinite->new( $b1, $c1 );
    $s1 = $s1->complement( $b1 ) if $a1 eq '(';
    $s1 = $s1->complement( $c1 ) if $d1 eq ')';
    my $s2 = Set::Infinite->new( $b2, $c2 );
    $s2 = $s2->complement( $b2 ) if $a2 eq '(';
    $s2 = $s2->complement( $c2 ) if $d2 eq ')';
    my $s3;
    $s3 = $s1->intersects( $s2 ) if $op eq '^';
    # print " $s1 $op $s2 = $s3 \n";
    is ( $s3, $result, $op ); 
}

1;