/*
 * Copyright (C) 2002-2021 Free Software Foundation, Inc.
 *
 * This file is part of LIBTASN1.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */


/*****************************************************/
/* File: Test_tree.c                                 */
/* Description: Test sequences for these functions:  */
/*     asn1_visit_tree,                              */
/*     asn1_create_element,                          */
/*     asn1_delete_structure2,                       */
/*     asn1_delete_structure,                        */
/*     asn1_write_value,                             */
/*     asn1_read_value,                              */
/*****************************************************/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define ASN1_INTERNAL_BUILD
#include "libtasn1.h"

#include "Test_tree_asn1_tab.c"

#define ACT_NULL       0
#define ACT_CREATE     1
#define ACT_DELETE     2
#define ACT_WRITE      3
#define ACT_READ       4
#define ACT_VISIT      5
#define ACT_ENCODING   6
#define ACT_DECODING   7
#define ACT_PRINT_DER  8
#define ACT_EXPAND_ANY 9
#define ACT_DECODING_ELEMENT   10
#define ACT_EXPAND_OCTET       11
#define ACT_NUMBER_OF_ELEMENTS 12
#define ACT_DECODING_START_END 13
#define ACT_READ_DEFINITIONS   14
#define ACT_READ_TAG_CLASS     15
#define ACT_OID_2_STRUCTURE    16
#define ACT_READ_LENGTH        17
#define ACT_ENCODING_LENGTH    18
#define ACT_READ_BIT           19
#define ACT_SET_DER            20
#define ACT_DELETE_ELEMENT     21
#define ACT_DELETE2	22


typedef struct
{
  int action;
  const char *par1;
  const char *par2;
  int par3;
  int errorNumber;
  int line;
} test_type;


test_type test_array[] = {

  {ACT_DELETE, "", "", 0, ASN1_ELEMENT_NOT_FOUND, __LINE__},

  /* Test: APPLICATION 30 */
  {ACT_CREATE, "TEST_TREE.KrbError", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "pvno", "5", 0, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING_LENGTH, "", 0, 5, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 4, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 5, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_CREATE, "TEST_TREE.KrbError", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE_ELEMENT, "pvno", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE_ELEMENT, "pvno", "", 0, ASN1_ELEMENT_NOT_FOUND, __LINE__},
  {ACT_DELETE2, "", "", 0, ASN1_SUCCESS, __LINE__},

  /* Test: CHOICE */
  {ACT_CREATE, "TEST_TREE.CertTemplate", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "version", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "validity", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer", "rdnSequence", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.3", 0, ASN1_SUCCESS,
   __LINE__},
  {ACT_WRITE, "issuer.rdnSequence.?LAST.value",
   "\x0c\x18\x71\x75\x61\x73\x61\x72\x2e\x6c\x61\x73\x2e\x69\x63\x2e\x75\x6e\x69\x63\x61\x6d\x70\x2e\x62\x72",
   26, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.7", 0, ASN1_SUCCESS,
   __LINE__},
  {ACT_WRITE, "issuer.rdnSequence.?LAST.value",
   "\x0c\x08\x43\x61\x6d\x70\x69\x6e\x61\x73", 10, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.6", 0, ASN1_SUCCESS,
   __LINE__},
  {ACT_WRITE, "issuer.rdnSequence.?LAST.value",
   "\x13\x06\x42\x72\x61\x73\x69\x6c", 8, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.10", 0, ASN1_SUCCESS,
   __LINE__},
  {ACT_WRITE, "issuer.rdnSequence.?LAST.value", "\x0c\x02\x49\x43", 4,
   ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.11", 0, ASN1_SUCCESS,
   __LINE__},
  {ACT_WRITE, "issuer.rdnSequence.?LAST.value", "\x0c\x03\x4c\x41\x53", 5,
   ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.8", 0, ASN1_SUCCESS,
   __LINE__},
  {ACT_WRITE, "issuer.rdnSequence.?LAST.value",
   "\x0c\x09\x53\x61\x6f\x20\x50\x61\x75\x6c\x6f", 11, ASN1_SUCCESS,
   __LINE__},
  {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "1.2.840.113549.1.9.1", 0,
   ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "issuer.rdnSequence.?LAST.value",
   "\x16\x19\x65\x64\x75\x61\x72\x64\x6f\x40\x6c\x61\x73\x2e\x69\x63\x2e\x75\x6e\x69\x63\x61\x6d\x70\x2e\x62\x72",
   27, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING_LENGTH, "", 0, 152, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 151, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 152, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_CREATE, "TEST_TREE.CertTemplate", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?1", "", 0, ASN1_SUCCESS,
   __LINE__},
  {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?1", "", 0,
   ASN1_ELEMENT_NOT_FOUND, __LINE__},
  {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?3", "", 0, ASN1_SUCCESS,
   __LINE__},
  {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?5", "", 0, ASN1_SUCCESS,
   __LINE__},
  {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?7", "", 0, ASN1_SUCCESS,
   __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},

  /* Test: Empty sequnces */
  {ACT_CREATE, "TEST_TREE.sequenceEmpty", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "int1", "1", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "seq1.int", NULL, 0, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING_LENGTH, "", 0, 11, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 10, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 11, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_CREATE, "TEST_TREE.sequenceEmpty", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_START_END, "seq1", "START", 5, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_START_END, "seq1", "END", 6, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_START_END, "set1", "START", 7, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_START_END, "set1", "END", 10, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},

  /* Test: Indefinite Length */
  {ACT_CREATE, "TEST_TREE.IndefiniteLengthTest", 0, 0, ASN1_SUCCESS,
   __LINE__},
  {ACT_WRITE, "int1", "1", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "seq1.int", "2", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "set1", "NEW", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "set1.?LAST", "1.2.3.4", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "set1", "NEW", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "set1.?LAST", "1.2.5.6", 0, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING, "", 0, 255, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_SET_DER,
   "\x30\x18\xa1\x80\x02\x01\x02\x00\x00\x31\x80\x06\x03\x2a\x03\x04\x06\x03\x2a\x05\x06\x00\x00\x02\x01\x01",
   0, 26, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_CREATE, "TEST_TREE.IndefiniteLengthTest", 0, 0, ASN1_SUCCESS,
   __LINE__},
  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_START_END, "seq1", "START", 2, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_START_END, "seq1", "END", 8, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_START_END, "set1", "START", 9, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_START_END, "set1", "END", 22, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},

  /* Test: OID */
  {ACT_CREATE, "TEST_TREE.OidTest", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_READ_LENGTH, "oid", NULL, 9, ASN1_MEM_ERROR, __LINE__},
  {ACT_READ, "oid", "2.5.29.2", 9, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "oid", "1.2.3.4", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "oid2", "2.5.29.1", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "oid3", "1.2.29.2", 0, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING_LENGTH, "", 0, 7, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 6, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 7, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_CREATE, "TEST_TREE.OidTest", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_START_END, "oid", "START", 2, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_START_END, "oid", "END", 6, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_START_END, "", "START", 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_START_END, "", "END", 6, ASN1_SUCCESS, __LINE__},
  {ACT_READ, "oid2", "2.5.29.1", 9, ASN1_SUCCESS, __LINE__},
  {ACT_READ, "oid3", "1.2.29.2", 9, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "oid", "1.2.3.4", 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},

  /* Test: ENCODING_LENGTH and READ_LEN */
  {ACT_CREATE, "TEST_TREE.OidAndTimeTest", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "oid", "1.2.3.4", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "time1", "9801011200Z", 1, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "time2", "2001010112001.12-0700", 1, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "oct", "ABCD", 4, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "bol", "TRUE", 1, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "enum", "2", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "bit", "1\xC0", 10, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "any", "\x30\x01\x01", 3, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "set", "NEW", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "set.?LAST", "10", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "set", "NEW", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "set.?LAST", "1", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "gen", "Prova", 5, ASN1_SUCCESS, __LINE__},
  {ACT_READ_LENGTH, "oid", NULL, 8, ASN1_MEM_ERROR, __LINE__},
  {ACT_READ_LENGTH, "time1", NULL, 12, ASN1_MEM_ERROR, __LINE__},
  {ACT_READ_LENGTH, "time2", NULL, 22, ASN1_MEM_ERROR, __LINE__},
  {ACT_READ_LENGTH, "oct", NULL, 4, ASN1_MEM_ERROR, __LINE__},
  {ACT_READ_LENGTH, "bol", NULL, 5, ASN1_MEM_ERROR, __LINE__},
  {ACT_READ_LENGTH, "enum", NULL, 1, ASN1_MEM_ERROR, __LINE__},
  {ACT_READ_LENGTH, "any", NULL, 3, ASN1_MEM_ERROR, __LINE__},
  {ACT_READ_LENGTH, "gen", NULL, 5, ASN1_MEM_ERROR, __LINE__},
  {ACT_READ_LENGTH, "bit", NULL, 10, ASN1_MEM_ERROR, __LINE__},
  {ACT_READ_BIT, "bit", "1\xC0", 10, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING_LENGTH, "", 0, 79, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 78, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 79, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_CREATE, "TEST_TREE.OidAndTimeTest", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},

  /* Test: OID to STRUCTURE */
  {ACT_OID_2_STRUCTURE, "2.5.29.3", "", 0, ASN1_ELEMENT_NOT_FOUND, __LINE__},
  {ACT_OID_2_STRUCTURE, "1.2.29.2", "", 0, ASN1_ELEMENT_NOT_FOUND, __LINE__},
  {ACT_OID_2_STRUCTURE, "2.5.29.2", "anyTest2", 0, ASN1_SUCCESS, __LINE__},

  /* Test: READ TAG and CLASS */
  {ACT_CREATE, "TEST_TREE.SequenceTestTag", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_READ_TAG_CLASS, "int", "", 0, ASN1_ELEMENT_NOT_FOUND, __LINE__},
  {ACT_READ_TAG_CLASS, "int1", "TAG", ASN1_TAG_INTEGER, ASN1_SUCCESS,
   __LINE__},
  {ACT_READ_TAG_CLASS, "int1", "CLASS", ASN1_CLASS_UNIVERSAL, ASN1_SUCCESS,
   __LINE__},
  {ACT_READ_TAG_CLASS, "int2", "TAG", 3, ASN1_SUCCESS, __LINE__},
  {ACT_READ_TAG_CLASS, "int2", "CLASS", ASN1_CLASS_CONTEXT_SPECIFIC,
   ASN1_SUCCESS, __LINE__},
  {ACT_READ_TAG_CLASS, "str1", "TAG", 1, ASN1_SUCCESS, __LINE__},
  {ACT_READ_TAG_CLASS, "str1", "CLASS", ASN1_CLASS_CONTEXT_SPECIFIC,
   ASN1_SUCCESS, __LINE__},
  {ACT_READ_TAG_CLASS, "str2", "TAG", 28, ASN1_SUCCESS, __LINE__},
  {ACT_READ_TAG_CLASS, "str2", "CLASS", ASN1_CLASS_UNIVERSAL, ASN1_SUCCESS,
   __LINE__},
  {ACT_READ_TAG_CLASS, "str3", "TAG", 28, ASN1_SUCCESS, __LINE__},
  {ACT_READ_TAG_CLASS, "str3", "CLASS", ASN1_CLASS_UNIVERSAL, ASN1_SUCCESS,
   __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},

  /* Test: OBJECT IDENTIFIER  elements */
  {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "int1", "v2", 0, ASN1_SUCCESS, __LINE__},
  {ACT_READ, "int1", "\x01", 1, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "int2", "0", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "oct", "\x02\x01\x0a", 3, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "id", "1 2 3 4 5", 0, ASN1_VALUE_NOT_VALID, __LINE__},
  {ACT_WRITE, "id", "2.5.29.2", 0, ASN1_SUCCESS, __LINE__},
  {ACT_READ, "id", "2.5.29.2", 9, ASN1_SUCCESS, __LINE__},
  {ACT_READ_LENGTH, "id", NULL, 9, ASN1_MEM_ERROR, __LINE__},
  {ACT_WRITE, "any1", "\x02\x01\x05", 3, ASN1_SUCCESS, __LINE__},
  {ACT_READ_DEFINITIONS, "TEST_TREE.id-anyTest", "2.5.29.1", 9, ASN1_SUCCESS,
   __LINE__},
  {ACT_ENCODING_LENGTH, "", 0, 20, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 19, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 200, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_START_END, "id", "START", 7, ASN1_SUCCESS, __LINE__},
  {ACT_READ, "id", "2.5.29.2", 9, ASN1_SUCCESS, __LINE__},
  {ACT_EXPAND_ANY, "", NULL, 0, ASN1_SUCCESS, __LINE__},
  {ACT_EXPAND_OCTET, "oct", "id", 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},

  /* Test: CHOICE elements */
  {ACT_CREATE, "TEST_TREE.X520LocalityName", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "", "teletexString", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "teletexString", "PROVA", 5, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING_LENGTH, "", 0, 7, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 6, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 7, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_CREATE, "TEST_TREE.X520LocalityName", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},

  /* Test: OPTIONAL elements */
  {ACT_CREATE, "TEST_TREE.DHParameter", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "prime", "1", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "base", "2", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "privateValueLength", NULL, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING_LENGTH, "", 0, 8, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 7, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 8, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_CREATE, "TEST_TREE.DHParameter", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},

  /* Test: Integer */
  {ACT_CREATE, "TEST_TREE.AnyTest2", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "", "int", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "int", "0", 0, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING_LENGTH, "", 0, 3, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 2, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 3, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "int", "-1", 0, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "int", "1", 0, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "int", "2000000000", 0, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "int", "-2000000000", 0, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "int", "-20000000000", 0, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "int", "20000000000", 0, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},

  /* Test: elements without names */
  {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "int2", "10", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "seq", "NEW", 1, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "seq.?LAST", "1", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "seq", "NEW", 1, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "seq.?LAST", "2", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "any1", NULL, 0, ASN1_SUCCESS, __LINE__},
  {ACT_NUMBER_OF_ELEMENTS, "seq", "", 2, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "id", "1.2.3.4", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "oct", "\x30\x03\x02\x01\x15", 5, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING, "int2", 0, 1024, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING, "seq.?2", 0, 2, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "seq.?2", 0, 3, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING_LENGTH, "", 0, 25, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 24, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 25, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_ELEMENT, "int2", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_READ, "int2", "\x0a", 1, ASN1_SUCCESS, __LINE__},
  {ACT_READ_LENGTH, "int2", NULL, 1, ASN1_MEM_ERROR, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_START_END, "seq.?2", "START", 10, ASN1_SUCCESS, __LINE__},
  {ACT_EXPAND_OCTET, "oct", "id", 0, ASN1_SUCCESS, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},

  /* Test GeneralString */
  {ACT_CREATE, "TEST_TREE.Test3", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "a", "1234", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "b", "prova", 5, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING_LENGTH, "", 0, 17, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 16, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 17, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_CREATE, "TEST_TREE.Test3", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_ELEMENT, "b", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_READ, "b", "prova", 5, ASN1_SUCCESS, __LINE__},
  {ACT_READ_LENGTH, "b", NULL, 5, ASN1_MEM_ERROR, __LINE__},
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},

  /* Bug regression test: Empty write on 64-bit platforms */
  {ACT_CREATE, "TEST_TREE.Checksum", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "checksum", "foo", 0, ASN1_SUCCESS, __LINE__},
  {ACT_WRITE, "checksum", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_ENCODING_LENGTH, "", 0, 4, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 3, ASN1_MEM_ERROR, __LINE__},
  {ACT_ENCODING, "", 0, 4, ASN1_SUCCESS, __LINE__},
  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_CREATE, "TEST_TREE.Checksum", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_DECODING_ELEMENT, "checksum", 0, 0, ASN1_SUCCESS, __LINE__},
  {ACT_READ, "checksum", "", 0, ASN1_SUCCESS, __LINE__},
  {ACT_READ_LENGTH, "checksum", NULL, 0, ASN1_SUCCESS, __LINE__},	/* MEM_FAILURE? */
  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS, __LINE__},
  {ACT_DELETE, "", "", 0, ASN1_SUCCESS, __LINE__},

  /* end */
  {ACT_NULL}

};


#define  error() fprintf(stderr, "Error at line %d\n", __LINE__); exit(1)

int
main (int argc, char *argv[])
{
  int result;
  asn1_node definitions = NULL;
  asn1_node asn1_element = NULL;
  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
  FILE *out;
  test_type *test;
  int errorCounter = 0, testCounter = 0, der_len;
  unsigned char value[1024], der[1024];
  int valueLen, tag = 0, class = 0;
  int k;
  int start, end, verbose = 0;
  const char *str_p = NULL;
  const char *treefile = getenv ("ASN1TREE");

  if (argc > 1)
    verbose = 1;

  if (!treefile)
    treefile = "Test_tree.asn";

  if (verbose != 0)
    {
      printf ("\n\n/****************************************/\n");
      printf ("/*     Test sequence : Test_tree        */\n");
      printf ("/****************************************/\n\n");
      printf ("ASN1TREE: %s\n", treefile);
    }

  /* Check version */
  if (asn1_check_version ("0.2.11") == NULL)
    printf ("\nLibrary version check ERROR:\n actual version: %s\n\n",
	    asn1_check_version (NULL));

  if (1)
    result = asn1_parser2tree (treefile, &definitions, errorDescription);
  else
    result =
      asn1_array2tree (Test_tree_asn1_tab, &definitions, errorDescription);

  if (result != ASN1_SUCCESS)
    {
      asn1_perror (result);
      printf ("ErrorDescription = %s\n\n", errorDescription);
      exit (1);
    }

  if (1)
    out = stdout;
  else
    out = fopen ("Test_tree.out", "w");

  if (out == NULL)
    {
      printf ("Output file ERROR\n");
      exit (1);
    }

  if (0)
    {
      asn1_print_structure (out, definitions, "TEST_TREE", ASN1_PRINT_ALL);
      fprintf (out, "\n");
    }

  test = test_array;

  while (test->action != ACT_NULL)
    {
      testCounter++;

      switch (test->action)
	{
	case ACT_CREATE:
	  result =
	    asn1_create_element (definitions, test->par1, &asn1_element);
	  break;
	case ACT_DELETE:
	  result = asn1_delete_structure (&asn1_element);
	  break;
	case ACT_DELETE2:
	  result =
	    asn1_delete_structure2 (&asn1_element, ASN1_DELETE_FLAG_ZEROIZE);
	  break;
	case ACT_DELETE_ELEMENT:
	  result = asn1_delete_element (asn1_element, test->par1);
	  break;
	case ACT_WRITE:
	  if ((test->par2) && (!strcmp ("DER", test->par2)))
	    result =
	      asn1_write_value (asn1_element, test->par1, der, der_len);
	  else
	    result =
	      asn1_write_value (asn1_element, test->par1, test->par2,
				test->par3);
	  break;
	case ACT_READ:
	case ACT_READ_BIT:
	  valueLen = test->par3;
	  result =
	    asn1_read_value (asn1_element, test->par1, value, &valueLen);
	  break;
	case ACT_READ_LENGTH:
	  valueLen = 0;
	  result =
	    asn1_read_value (asn1_element, test->par1, NULL, &valueLen);
	  break;
	case ACT_READ_DEFINITIONS:
	  valueLen = 1024;
	  result =
	    asn1_read_value (definitions, test->par1, value, &valueLen);
	  break;
	case ACT_READ_TAG_CLASS:
	  result = asn1_read_tag (asn1_element, test->par1, &tag, &class);
	  break;
	case ACT_ENCODING:
	  der_len = test->par3;
	  result = asn1_der_coding (asn1_element, test->par1, der, &der_len,
				    errorDescription);
	  break;
	case ACT_ENCODING_LENGTH:
	  der_len = 0;
	  result = asn1_der_coding (asn1_element, test->par1, NULL, &der_len,
				    errorDescription);
	  break;
	case ACT_DECODING:
	  result = asn1_der_decoding (&asn1_element, der, der_len,
				      errorDescription);
	  break;
	case ACT_DECODING_ELEMENT:
	  result =
	    asn1_der_decoding_element (&asn1_element, test->par1, der,
				       der_len, errorDescription);
	  break;
	case ACT_DECODING_START_END:
	  result =
	    asn1_der_decoding_startEnd (asn1_element, der, der_len,
					test->par1, &start, &end);
	  break;
	case ACT_EXPAND_ANY:
	  result = asn1_expand_any_defined_by (definitions, &asn1_element);
	  break;
	case ACT_EXPAND_OCTET:
	  result =
	    asn1_expand_octet_string (definitions, &asn1_element, test->par1,
				      test->par2);
	  break;
	case ACT_OID_2_STRUCTURE:
	  str_p = asn1_find_structure_from_oid (definitions, test->par1);
	  break;
	case ACT_VISIT:
	  if (verbose)
	    {
	      asn1_print_structure (out, asn1_element, test->par1,
				    test->par3);
	      fprintf (out, "\n");
	    }
	  result = ASN1_SUCCESS;
	  break;
	case ACT_PRINT_DER:
	  if (verbose)
	    {
	      printf ("DER encoding len:%i\n", der_len);
	      printf ("DER encoding: ");
	      for (k = 0; k < der_len; k++)
		printf ("%02x ", der[k]);
	      printf ("\n\n");
	    }
	  result = ASN1_SUCCESS;
	  break;
	case ACT_SET_DER:
	  der_len = test->par3;
	  memcpy (der, test->par1, der_len);
	  result = ASN1_SUCCESS;
	  break;
	case ACT_NUMBER_OF_ELEMENTS:
	  result =
	    asn1_number_of_elements (asn1_element, test->par1, &valueLen);
	  break;
	default:
	  break;
	}


      switch (test->action)
	{
	case ACT_CREATE:
	case ACT_DELETE:
	case ACT_DELETE_ELEMENT:
	case ACT_WRITE:
	case ACT_VISIT:
	case ACT_ENCODING:
	case ACT_DECODING:
	case ACT_PRINT_DER:
	case ACT_EXPAND_ANY:
	case ACT_EXPAND_OCTET:
	case ACT_SET_DER:
	  if (result != test->errorNumber)
	    {
	      errorCounter++;
	      printf ("ERROR in %d:\n", test->line);
	      printf ("  Action %d - %s - %s - %d\n", test->action,
		      test->par1, test->par2, test->par3);
	      printf ("  Error expected: %s\n",
		      asn1_strerror (test->errorNumber));
	      printf ("  Error detected: %s\n\n", asn1_strerror (result));
	      error ();
	    }
	  break;
	case ACT_DECODING_ELEMENT:
	  if (result != test->errorNumber)
	    {
	      errorCounter++;
	      printf ("ERROR in %d:\n", test->line);
	      printf ("  Action %d - %s - %s - %d\n", test->action,
		      test->par1, test->par2, test->par3);
	      printf ("  Error expected: %s\n",
		      asn1_strerror (test->errorNumber));
	      printf ("  Error detected: %s\n", asn1_strerror (result));
	      printf ("  Error description : %s\n\n", errorDescription);
	      error ();
	    }
	  break;
	case ACT_NUMBER_OF_ELEMENTS:
	case ACT_READ_LENGTH:
	  if ((result != test->errorNumber) || (valueLen != test->par3))
	    {
	      errorCounter++;
	      printf ("ERROR in %d:\n", test->line);
	      printf ("  Action %d - %s\n", test->action, test->par1);
	      printf ("  Error expected: %s - %d\n",
		      asn1_strerror (test->errorNumber), test->par3);
	      printf ("  Error detected: %s - %d\n\n", asn1_strerror (result),
		      valueLen);
	      error ();
	    }
	  break;
	case ACT_ENCODING_LENGTH:
	  if ((result != test->errorNumber) || (der_len != test->par3))
	    {
	      errorCounter++;
	      printf ("ERROR in %d:\n", test->line);
	      printf ("  Action %d - %s\n", test->action, test->par1);
	      printf ("  Error expected: %s - %d\n",
		      asn1_strerror (test->errorNumber), test->par3);
	      printf ("  Error detected: %s - %d\n\n", asn1_strerror (result),
		      der_len);
	      error ();
	    }
	  break;
	case ACT_OID_2_STRUCTURE:
	  if (((test->errorNumber != ASN1_SUCCESS) && (str_p != NULL)) ||
	      ((test->errorNumber == ASN1_SUCCESS) && (str_p == NULL)) ||
	      ((test->errorNumber == ASN1_SUCCESS)
	       && (strcmp (str_p, test->par2))))
	    {
	      errorCounter++;
	      printf ("ERROR in %d:\n", test->line);
	      printf ("  Action %d - %s\n", test->action, test->par1);
	      printf ("  Error expected: %s - %s\n",
		      asn1_strerror (test->errorNumber), test->par2);
	      printf ("  Value detected: %s\n\n", str_p);
	      error ();
	    }
	  break;
	case ACT_DECODING_START_END:
	  if ((result != test->errorNumber) ||
	      ((!strcmp (test->par2, "START")) && (start != test->par3)) ||
	      ((!strcmp (test->par2, "END")) && (end != test->par3)))
	    {
	      errorCounter++;
	      printf ("ERROR in %d:\n", test->line);
	      printf ("  Action %d - %s - %d\n", test->action, test->par1,
		      test->par3);
	      printf ("  Error expected: %s - %s - %d\n",
		      asn1_strerror (test->errorNumber), test->par2,
		      test->par3);
	      printf ("  Error detected: %s - %d - %d\n\n",
		      asn1_strerror (result), start, end);
	      error ();
	    }
	  break;

	case ACT_READ_TAG_CLASS:
	  if ((result != test->errorNumber) ||
	      ((!strcmp (test->par2, "TAG")) && (tag != test->par3)) ||
	      ((!strcmp (test->par2, "CLASS")) && (class != test->par3)))
	    {
	      errorCounter++;
	      printf ("ERROR in %d:\n", test->line);
	      printf ("  Action %d - %s - %d\n", test->action, test->par1,
		      test->par3);
	      printf ("  Error expected: %s - %s - %d\n",
		      asn1_strerror (test->errorNumber), test->par2,
		      test->par3);
	      printf ("  Error detected: %s - %d - %d\n\n",
		      asn1_strerror (result), tag, class);
	      error ();
	    }

	  break;

	case ACT_READ:
	case ACT_READ_DEFINITIONS:
	case ACT_READ_BIT:
	  if (test->action == ACT_READ_BIT)
	    {
	      if (valueLen % 8 == 0)
		tag = valueLen / 8;
	      else
		tag = (valueLen / 8) + 1;
	      if (test->par3 % 8 == 0)
		class = test->par3 / 8;
	      else
		class = (test->par3 / 8) + 1;
	    }

	  for (k = 0; k < class; k++)
	    if ((unsigned char) test->par2[k] != value[k])
	      {
		k = -1;
		break;
	      }

	  if ((result != test->errorNumber) ||
	      (valueLen != test->par3) || (k == -1))
	    {
	      errorCounter++;
	      printf ("ERROR in %d:\n", test->line);
	      printf ("  Action %d - %s\n", test->action, test->par1);
	      printf ("  Error expected: %s - %d - ",
		      asn1_strerror (test->errorNumber), test->par3);
	      for (k = 0; k < test->par3; k++)
		printf ("%02x", (unsigned int) test->par2[k]);
	      printf ("\n  Error detected: %s - %d - ",
		      asn1_strerror (result), valueLen);
	      for (k = 0; k < valueLen; k++)
		printf ("%02x", value[k]);
	      printf ("\n\n");

	      error ();
	    }

	  break;
	default:
	  break;
	}

      test++;
    }


  if (verbose != 0)
    {
      printf ("Total tests : %d\n", testCounter);
      printf ("Total errors: %d\n", errorCounter);
    }

  /* Clear the definition structures */
  asn1_delete_structure (&definitions);


  if (out != stdout)
    fclose (out);

  if (errorCounter > 0)
    return 1;

  exit (0);
}
