Implementing Test or Macro?
Consider the example of rule:
"A root project has no project type".
This rule is applied to the "Project" MetaClass, and more particularly to root projects.
To implement this rule, you must:
• firstly reduce the application scope of the rule.
• carry out the test "This project is not connected to a project type".
Using tests
If we use expression tests to define this rule, we must create two expression tests.
• One to test if the project is a root project, enabling filtering of the rule application scope.
• Another to test if the project is connected to a project type serving to implement the rule.
Using macros
If we use a macro, we have to implement two functions:
• RuleAppliableIs => this function enables restriction of rule application scope.
• RuleApply => this function enables definition of rule implementation.

If a rule is implemented by a macro, tests and filters are ignored. The macro code must manage implementation tests and filters on the application area.