Testing Generic Compilation Units

Component Testing for Ada

Types and objects in a generic unit depend on generic formal parameters that are not known by the Test Script Compiler. Therefore, Component Testing for Ada cannot directly test a generic package.

To test a generic package, you must first instanciate the package and then call the instance. Such instances must appear in compilation units or at the beginning of the test script (in any case before the BEGIN statement), as follows:

WITH <generic>;

PACKAGE <instance> IS NEW <generic> (...);

Depending on the nature of the source code under test, there are two ways to test an instanciation of a generic package:

  • If the code cannot contain a specific procedure for testing purposes and the test does not need access to internal variables, then the test body can be generated as an external package. The test body can view the instance under test through the use of a WITH instruction.

In the .ptu test script, after the generic instanciation, add the WITH <instance> ; statement before the BEGIN keyword. For example:

WITH <Generic_Package>;

PACKAGE <Instance> IS NEW <Generic_Package> (...);

WITH <Instance>;

BEGIN

where <Generic_Package> is the name of the generic unit under test, and <Instance> is the name of the instanciated unit from the generic.

  • If you need to test private types within the generic package and the test needs access to all internal variables, then the test body must be part of the generic package as a specific test procedure.

In the .ptu test script, specify the generic package, the instance package and the test procedure on the BEGIN line. For example:

WITH <Generic_Package>;

PACKAGE <Instance> IS NEW <Generic_Package> (...);

BEGIN GENERIC(<Generic_Package>, <Instance>), <Procedure_Name>

where <Generic_Package> is the name of the generic unit under test, and <Instance> is the name of the instanciated unit from the generic. The <Procedure_Name> parameter is not mandatory. Component Testing uses Attol_Test by default.

This instruction generates the test body into <Procedure_Name> as a separate unit of the Generic package as well as the WITH to this instance, as requested by the test body.

If specified, <Procedure_Name> must be part of the generic package as separate procedure.

Example

Consider the following Ada compilation unit:

Generic

Type t is private ;

Procedure swap(x,y :in out t) ;

Procedure swap(x,y :in out t) is

Z :t ;

Begin

Z := x ;

X := y;

Y := z;

End swap ;

With swap ;

Procedure swap_integer is new swap(integer) ;

You can test the swap_integer procedure just like any other procedure:

HEADER swap_integer,,

#with swap_integer;

BEGIN

SERVICE swap_integer

#x,y:integer;

TEST 1

FAMILY nominal

ELEMENT

VAR x , init = 1 , ev = 4

Var Y , init=4 ,ev = 1

#swap_integer(x,y) ;

END ELEMENT

END TEST

END SERVICE

Related Topics

Simulating Generic Units | Advanced Ada Testing