The -genTest option causes test functions to be generated. These functions can be used to populate variables of generated types with random test data. The main purpose is to provide a code template to users for writing code to populate variables. This is quite useful to users because generated data types can become very complex as the ASN.1 schemas become more complex. It is sometimes difficult to figure out how to navigate all of the lists and pointers. Using –genTest can provide code that simply has to be modified to accomplish the population of a data variable with any type of data.
The generated test functions are written to a .c or .cpp file with a name of the following format:
<asn1ModuleName>Test.c
where <asn1ModuleName> is the name of the ASN.1 module that contains the type definitions. The format of the name of each generated test function is as follows:
asn1Test_[<prefix>]<prodName>
where <prodName> is the name of the ASN.1 production for which the
         function is being generated and <prefix> is an optional prefix that can be
         set via a configuration file setting. The configuration setting used to set the prefix is
         the <typePrefix> element. This element specifies a prefix that will be applied to all
         generated typedef names and function names for the production.
The calling sequence for each generated test function is as follows:
<typeName>* pvalue = <testFunc> (OSCTXT* pctxt)
In this definition, <testFunc> denotes the formatted function name defined above.
The pctxt argument is used to hold a context pointer to keep track of
         dynamic memory allocation parameters. This is a basic "handle" variable that is used to
         make the function reentrant so that it can be used in an asynchronous or threaded
         application. The user is required to supply a pointer to a variable of this type declared
         somewhere in his or her program. The variable must have been previously initialized using
         the rtInitContext run-time function.
The pvalue argument is a pointer to hold the populated data variable. This
         variable is of the type generated for the ASN.1 production. The test function will
         automatically allocate dynamic memory using the run-time memory management for the main
         variable as well as variable length fields within the structure. This memory is tracked
         within the context structure and is released when the context structure is freed.
In the case of C++, a method is added to the generated control class for test code generation. The name of this method is genTestInstance. The prototype is as follows:
<typeName>* pvalue = <object>.genTestInstance();
where <typeName> is the ASN1T_<name> type name of the generated type and <object> is an instance of the ASN1C_<name> generated control class.
Generated Sample Programs
In addition to test functions, it is possible to generate writer and reader sample programs. These programs contain sample code to populate and encode an instance of ASN.1 data and then read and decode this data respectively. These programs are generated using the -genwriter and -genreader command-line switches.