package Moose::Autobox::Array;
use Moose::Role 'with';
+use autobox;
our $VERSION = '0.01';
sub reduce {
my ($array, $func) = @_;
- my @a = @$array;
- my $acc = CORE::shift @a;
- $acc = $func->($acc, $_) foreach @a;
+ my $a = $array->values;
+ my $acc = $a->shift;
+ $a->map(sub { $acc = $func->($acc, $_) });
return $acc;
}
sub zip {
my ($array, $other) = @_;
- [
- CORE::map {
- [ $array->[$_], $other->[$_] ]
- } 0 .. $#{(
- CORE::scalar @{$array} < CORE::scalar @{$other}
- ? $other : $array
- )}
- ];
-}
+ ($array->length < $other->length
+ ? $other
+ : $array)
+ ->keys
+ ->map(sub {
+ [ $array->[$_], $other->[$_] ]
+ });
+}
##
CORE::shift @$array;
}
-
1;
use strict;
use warnings;
-use Test::More no_plan => 1;
+use Test::More tests => 44;
BEGIN {
use_ok('Moose::Autobox');
ok((sub { 1 })->disjoin(sub { 0 })->(), '... disjoins properly');
ok(!(sub { 1 })->conjoin(sub { 0 })->(), '... conjoins properly');
-#my $compose = (sub { 1, @_ })->compose(sub { 2, @_ });
+my $compose = (sub { @_, 1 })->compose(sub { @_, 2 });
-#is_deeply(
-#[ $compose->() ],
-#[ 1, 2 ],
-#'... got the right return value for compose');
+is_deeply(
+[ $compose->() ],
+[ 1, 2 ],
+'... got the right return value for compose');
# ARRAY
use strict;
use warnings;
-use Test::More no_plan => 1;
+use Test::More tests => 7;
+use Test::Exception;
BEGIN {
use_ok('Moose::Autobox');
}
-use autobox;
-
-SCALAR->meta->add_method('bytes' => sub {
- $_[0];
-});
-
-SCALAR->meta->add_method('byte' => SCALAR->meta->get_method('bytes'));
-
-SCALAR->meta->add_method('kilobytes' => sub {
- $_[0] * 1024;
-});
-
-SCALAR->meta->add_method('kilobyte' => SCALAR->meta->get_method('kilobytes'));
-
-SCALAR->meta->add_method('megabytes' => sub {
- $_[0] * 1024->kilobytes;
-});
-
-SCALAR->meta->add_method('metabyte' => SCALAR->meta->get_method('megabytes'));
-
-SCALAR->meta->add_method('gigabytes' => sub {
- $_[0] * 1024->megabytes;
-});
-
-SCALAR->meta->add_method('gigabyte' => SCALAR->meta->get_method('gigabytes'));
+{
+ package Bytes;
+ use Moose::Role;
+ use autobox;
+
+ sub bytes { $_[0] }
+ sub kilobytes { $_[0] * 1024 }
+ sub megabytes { $_[0] * 1024->kilobytes }
+ sub gigabytes { $_[0] * 1024->megabytes }
+ sub terabytes { $_[0] * 1024->gigabytes }
+
+ {
+ no warnings; # << squelch the stupid "used only once, maybe typo" warnings
+ *byte = \&bytes;
+ *kilobyte = \&kilobytes;
+ *megabyte = \&megabytes;
+ *gigabyte = \&gigabytes;
+ *terabyte = \&terabytes;
+ }
+}
-SCALAR->meta->add_method('terabytes' => sub {
- $_[0] * 1024->gigabytes;
-});
+{
+ package SCALAR;
+ use Moose;
+ with 'Bytes';
+}
-SCALAR->meta->add_method('terabyte' => SCALAR->meta->get_method('terabytes'));
+{
+ use autobox;
-is(5->bytes, 5, '... got 5 bytes');
-is(5->kilobytes, 5120, '... got 5 kilobytes');
-is(2->megabytes, 2097152, '... got 2 megabytes');
-is(1->gigabyte, 1073741824, '... got 1 gigabyte');
-is(2->terabytes, 2199023255552, '... got 2 terabyte');
+ is(5->bytes, 5, '... got 5 bytes');
+ is(5->kilobytes, 5120, '... got 5 kilobytes');
+ is(2->megabytes, 2097152, '... got 2 megabytes');
+ is(1->gigabyte, 1073741824, '... got 1 gigabyte');
+ is(2->terabytes, 2199023255552, '... got 2 terabyte');
+}
+dies_ok { 5->bytes } '... no longer got 5 bytes';
--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 3;
+
+BEGIN {
+ use_ok('Moose::Autobox');
+}
+
+use autobox;
+
+is_deeply(
+[ 1 .. 5 ]->map(sub { $_ * $_ }),
+[ 1, 4, 9, 16, 25 ],
+'... got the expected return values');
+
+is_deeply(
+[ 1 .. 5 ]->map(sub { $_ * $_ })->do(sub { $_->zip($_) }),
+[ [1, 1], [4, 4], [9, 9], [16, 16], [25, 25] ],
+'... got the expected return values');
\ No newline at end of file