#! /usr/bin/env perl6
BEGIN {
my $c = $* PERL.compiler ;
my $v = $c.version ;
my $v6c = Version.new ( '2015.12' ) ;
if $c.name .lc eq 'rakudo' and $v before $v6c {
say "The currently installed version of Rakudo is $v.gist()" ;
say 'which is from before the official release of Perl 6' ;
say '' ;
say "The earliest version of Rakudo this code should work on is $v6c.gist()" ;
say '' ;
say 'please go to http://p...content-available-to-author-only...6.org/downloads/' ;
say 'or http://r...content-available-to-author-only...o.org/how-to-get-rakudo/' ;
}
}
## ideone.com is currently using a version of
## Rakudo Perl 6 that is from more than a year before
## the official release of the Perl 6 spec tests
## so it will complain about the following line
use v6.c ;
## This is vastly preffered to try and figure out
## a way to get this to work with such an ancient
## version of Rakudo
## Until they fix this I guess you will just have
## to deal with this code not working
## ( It is also annoying that they don't have colorized
## terminal support for the error that it produces )
use Test;
my @tests = (
[ 1 , 2 , 3 , 4 , 5 ] => 0 ,
[ 5 , 12 , 23 , 2 , 4 , 4 , 2 , 6 , 7 ] => 539 ,
[ - 8 , 50 , 3 , 3 ,- 123 , 4 , 17 , 99 , 13 ] => - 1055.35694385 , # -2982186493/2825761
[ 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ] => 256 ,
[ 1 , 0 , 1 , 0 , 1 , 0 ] => 1 ,
[ - 9 ,- 8 ,- 1 ] => - 16 ,
[ 0 ,- 3 ] => - 3 ,
[ - 99 ] => - 99 ,
) ;
plan + @tests;
my & code = { reduce { &^ b( $^ a, $^ c) } , flat @_ Z | ( *+*,*-*,& [ * ] ,& [ / ] ,& [ ** ] ) xx* }
for @tests -> $_ ( : key( @input) , : value( $expected) ) {
is code( @input) , $expected, .gist
}
IyEgL3Vzci9iaW4vZW52IHBlcmw2CgpCRUdJTiB7CiAgbXkgJGMgPSAkKlBFUkwuY29tcGlsZXI7CiAgbXkgJHYgPSAkYy52ZXJzaW9uOwogIAogIG15ICR2NmMgPSBWZXJzaW9uLm5ldygnMjAxNS4xMicpOwogIAogIGlmICRjLm5hbWUubGMgZXEgJ3Jha3VkbycgYW5kICR2IGJlZm9yZSAkdjZjIHsKICAgIHNheSAiVGhlIGN1cnJlbnRseSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBSYWt1ZG8gaXMgJHYuZ2lzdCgpIjsKICAgIHNheSAnd2hpY2ggaXMgZnJvbSBiZWZvcmUgdGhlIG9mZmljaWFsIHJlbGVhc2Ugb2YgUGVybCA2JzsKICAgIHNheSAnJzsKICAgIHNheSAiVGhlIGVhcmxpZXN0IHZlcnNpb24gb2YgUmFrdWRvIHRoaXMgY29kZSBzaG91bGQgd29yayBvbiBpcyAkdjZjLmdpc3QoKSI7CiAgICBzYXkgJyc7CiAgICBzYXkgJ3BsZWFzZSBnbyB0byBodHRwOi8vcC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uNi5vcmcvZG93bmxvYWRzLyc7CiAgICBzYXkgJ29yIGh0dHA6Ly9yLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5vLm9yZy9ob3ctdG8tZ2V0LXJha3Vkby8nOwogIH0KfQoKIyMgaWRlb25lLmNvbSBpcyBjdXJyZW50bHkgdXNpbmcgYSB2ZXJzaW9uIG9mCiMjIFJha3VkbyBQZXJsIDYgdGhhdCBpcyBmcm9tIG1vcmUgdGhhbiBhIHllYXIgYmVmb3JlCiMjIHRoZSBvZmZpY2lhbCByZWxlYXNlIG9mIHRoZSBQZXJsIDYgc3BlYyB0ZXN0cwojIyBzbyBpdCB3aWxsIGNvbXBsYWluIGFib3V0IHRoZSBmb2xsb3dpbmcgbGluZQp1c2UgdjYuYzsKCiMjIFRoaXMgaXMgdmFzdGx5IHByZWZmZXJlZCB0byB0cnkgYW5kIGZpZ3VyZSBvdXQKIyMgYSB3YXkgdG8gZ2V0IHRoaXMgdG8gd29yayB3aXRoIHN1Y2ggYW4gYW5jaWVudAojIyB2ZXJzaW9uIG9mIFJha3VkbwoKIyMgVW50aWwgdGhleSBmaXggdGhpcyBJIGd1ZXNzIHlvdSB3aWxsIGp1c3QgaGF2ZQojIyB0byBkZWFsIHdpdGggdGhpcyBjb2RlIG5vdCB3b3JraW5nCgojIyAoIEl0IGlzIGFsc28gYW5ub3lpbmcgdGhhdCB0aGV5IGRvbid0IGhhdmUgY29sb3JpemVkCiMjIHRlcm1pbmFsIHN1cHBvcnQgZm9yIHRoZSBlcnJvciB0aGF0IGl0IHByb2R1Y2VzICkKCnVzZSBUZXN0OwoKbXkgQHRlc3RzID0gKAogIFsxLDIsMyw0LDVdID0+IDAsCiAgWzUsMTIsMjMsMiw0LDQsMiw2LDddID0+IDUzOSwKICBbLTgsNTAsMywzLC0xMjMsNCwxNyw5OSwxM10gPT4gLTEwNTUuMzU2OTQzODUsICMgLTI5ODIxODY0OTMvMjgyNTc2MQogIFsyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyXSA9PiAyNTYsCiAgWzEsMCwxLDAsMSwwXSA9PiAxLAogIFstOSwtOCwtMV0gPT4gLTE2LAogIFswLC0zXSA9PiAtMywKICBbLTk5XSA9PiAtOTksCik7CgpwbGFuICtAdGVzdHM7CgpteSAmY29kZSA9IHtyZWR1Y2UgeyZeYigkXmEsJF5jKX0sZmxhdCBAXyBaIHwoKisqLCotKiwmWypdLCZbL10sJlsqKl0peHgqfQoKZm9yIEB0ZXN0cyAtPiAkXyAoIDprZXkoQGlucHV0KSwgOnZhbHVlKCRleHBlY3RlZCkgKSB7CiAgaXMgY29kZShAaW5wdXQpLCAkZXhwZWN0ZWQsIC5naXN0Cn0=