Commit | Line | Data |
fa8a151f |
1 | use strict; |
2 | use warnings FATAL => 'all'; |
3 | use Test::More qw(no_plan); |
4 | use Scalar::Util qw(weaken); |
5 | use curry; |
6 | |
7 | { |
8 | package Foo; |
9 | |
10 | sub new { bless({}, shift) } |
11 | |
12 | sub foo { [@_] } |
13 | } |
14 | |
15 | my $foo = Foo->new; |
16 | |
17 | is_deeply($foo->foo(1), [ $foo, 1 ], 'Direct object call'); |
18 | is_deeply($foo->curry::foo->(1), [ $foo, 1 ], 'Curried object call'); |
19 | |
20 | weaken(my $weak_foo = $foo); |
21 | |
22 | my $curry = $foo->curry::foo; |
23 | |
24 | undef($foo); |
25 | |
26 | ok($weak_foo, 'Weakened object kept alive by curry'); |
27 | |
28 | undef($curry); |
29 | |
30 | ok(!$weak_foo, 'Weakened object dead'); |
31 | |
32 | $foo = Foo->new; |
33 | |
34 | $curry = $foo->curry::weak::foo; |
35 | |
36 | is_deeply($curry->(1), [ $foo, 1 ], 'Curried weak object call'); |
37 | |
38 | weaken($weak_foo = $foo); |
39 | |
40 | undef($foo); |
41 | |
42 | ok(!$weak_foo, 'Weak curry does not keep object alive'); |
43 | |
44 | is($curry->(1), undef, 'Weak curry returns undef after object is dead'); |