From e36f8c9aef6be4c5d57b24c3b697dfca09814510 Mon Sep 17 00:00:00 2001 From: tcurtis Date: Fri, 6 Aug 2010 15:31:47 -0500 Subject: [PATCH] Add some tests for Tree::Optimizer.register with a Tree::Optimizer::Pass as argument. --- t/tree-optimizer.t | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/t/tree-optimizer.t b/t/tree-optimizer.t index 8defbf4..78c4bc8 100644 --- a/t/tree-optimizer.t +++ b/t/tree-optimizer.t @@ -2,7 +2,7 @@ pir::load_bytecode('Tree/Optimizer.pbc'); -plan(26); +plan(30); { my $opt := Tree::Optimizer.new; @@ -271,6 +271,42 @@ pir::load_bytecode('PAST/Pattern.pbc'); 'Null results are handled properly with :when/:recursive/:combine.'); } +{ + my $opt := Tree::Optimizer.new; + my &inc := sub ($n) { + $n + 1; + }; + my $pass := Tree::Optimizer::Pass.new(&inc, :name); + $opt.register($pass); + ok($opt.find-pass('inc') =:= $pass, + '.register with a pass correctly stores the pass by name.'); + ok($opt.run(5) == 6, + 'Passes that were directly .registered are ran.'); +} + +{ + my &inc := sub ($n) { + $n + 1; + }; + my &double := sub ($n) { + $n * 2; + }; + { + my $opt := Tree::Optimizer.new; + $opt.register(Tree::Optimizer::Pass.new(&inc, :name)); + $opt.register(Tree::Optimizer::Pass.new(&double, :depends-on)); + ok($opt.run(5) == 12, + '.register(Pass) respects dependencies 1.'); + } + { + my $opt := Tree::Optimizer.new; + $opt.register(Tree::Optimizer::Pass.new(&double, :name)); + $opt.register(Tree::Optimizer::Pass.new(&inc, :depends-on)); + ok($opt.run(5) == 11, + '.register(Pass) respects dependencies 2.'); + } +} + # Local Variables: # mode: cperl # cperl-indent-level: 4