|
1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- import org.aspectj.testing.Tester;
-
- import java.util.*;
-
- /**
- * Inspired by aspect sandbox and submitted by Chris Dutchyn
- */
- public class CflowBelowTest {
- static final String[] expectedSteps = new String[] {
- "Num.fact(4) within Num.fact(5) within another Num.fact(6)",
- "Num.fact(3) within Num.fact(4) within another Num.fact(5)",
- "Num.fact(2) within Num.fact(3) within another Num.fact(4)",
- "Num.fact(1) within Num.fact(2) within another Num.fact(3)",
- };
-
- static List steps = new ArrayList();
-
- static public void main( String[] args ) {
- Tester.checkEqual(new Num().fact(6), 720);
-
- Tester.checkEqual(steps.toArray(), expectedSteps, "steps");
- }
- }
-
-
- class Num {
- int fact(int x) {
- if (x == 1)
- return 1;
- return x * fact(x - 1);
- }
- }
-
- // check that cflows of nested calls obtain correct parameters
- aspect CflowBelow01 {
- before (int x1, int x2, int x3) :
- call(int Num.fact(int)) && args(x1)
- && cflowbelow(call(int Num.fact(int)) && args(x2)
- && cflowbelow(call(int Num.fact(int)) && args(x3))) {
- CflowBelowTest.steps.add("Num.fact(" + x1 +
- ") within Num.fact(" + x2 +
- ") within another Num.fact(" + x3 + ")");
- }
- }
|