CANONICAL-XER testing
diff --git a/tests/30-set-OK.asn1 b/tests/30-set-OK.asn1
index 2cd6a5a..41ad52d 100644
--- a/tests/30-set-OK.asn1
+++ b/tests/30-set-OK.asn1
@@ -12,10 +12,10 @@
BEGIN
T ::= SET {
- a [APPLICATION 3] INTEGER,
- b IA5String,
+ i [APPLICATION 3] INTEGER,
+ s IA5String,
...,
- c [2] BOOLEAN
+ b [2] BOOLEAN
}
END
diff --git a/tests/30-set-OK.asn1.-P b/tests/30-set-OK.asn1.-P
new file mode 100644
index 0000000..1ffd9b4
--- /dev/null
+++ b/tests/30-set-OK.asn1.-P
@@ -0,0 +1,109 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <INTEGER.h>
+#include <IA5String.h>
+#include <BOOLEAN.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [T] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum T_PR {
+ T_PR_i, /* Member i is present */
+ T_PR_s, /* Member s is present */
+ T_PR_b, /* Member b is present */
+} T_PR;
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+
+typedef struct T {
+ INTEGER_t i;
+ IA5String_t s;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+ BOOLEAN_t *b;
+
+ /* Presence bitmask: ASN_SET_ISPRESENT(pT, T_PR_x) */
+ unsigned int _presence_map
+ [((3+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct T, i),
+ .tag = (ASN_TAG_CLASS_APPLICATION | (3 << 2)),
+ .tag_mode = -1, /* IMPLICIT tag at current level */
+ .type = (void *)&asn_DEF_INTEGER,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "i"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct T, s),
+ .tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
+ .tag_mode = 0,
+ .type = (void *)&asn_DEF_IA5String,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "s"
+ },
+ { ATF_POINTER, 0, offsetof(struct T, b),
+ .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+ .tag_mode = -1, /* IMPLICIT tag at current level */
+ .type = (void *)&asn_DEF_BOOLEAN,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "b"
+ },
+};
+static ber_tlv_tag_t asn_DEF_T_tags[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_TYPE_tag2member_t asn_DEF_T_tag2el[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)), 1, 0, 0 }, /* s at 16 */
+ { (ASN_TAG_CLASS_APPLICATION | (3 << 2)), 0, 0, 0 }, /* i at 15 */
+ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* b at 18 */
+};
+static uint8_t asn_DEF_T_mmap[(3 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+ (1 << 7) | (1 << 6) | (0 << 5)
+};
+static asn_SET_specifics_t asn_DEF_T_specs = {
+ sizeof(struct T),
+ offsetof(struct T, _asn_ctx),
+ offsetof(struct T, _presence_map),
+ asn_DEF_T_tag2el,
+ 3, /* Count of tags in the map */
+ asn_DEF_T_tag2el, /* Same as above */
+ 3, /* Count of tags in the CANONICAL-XER map */
+ 1, /* Whether extensible */
+ (unsigned int *)asn_DEF_T_mmap /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+ "T",
+ SET_free,
+ SET_print,
+ SET_constraint,
+ SET_decode_ber,
+ SET_encode_der,
+ 0, /* Not implemented yet */
+ SET_encode_xer,
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_T_tags,
+ sizeof(asn_DEF_T_tags)
+ /sizeof(asn_DEF_T_tags[0]), /* 1 */
+ asn_DEF_T_tags, /* Same as above */
+ sizeof(asn_DEF_T_tags)
+ /sizeof(asn_DEF_T_tags[0]), /* 1 */
+ asn_MBR_T,
+ 3, /* Elements count */
+ &asn_DEF_T_specs /* Additional specs */
+};
+
diff --git a/tests/31-set-of-OK.asn1 b/tests/31-set-of-OK.asn1
index 6f36c01..c8fa51e 100644
--- a/tests/31-set-of-OK.asn1
+++ b/tests/31-set-of-OK.asn1
@@ -20,8 +20,14 @@
-- The following clause tests OPTIONAL.
Stuff ::= SET {
- trees [0] SET OF Forest OPTIONAL,
- anything [1] SET OF
+ trees [1] SET OF Forest OPTIONAL,
+ ...,
+ other CHOICE {
+ a [0] INTEGER,
+ b [3] INTEGER
+ },
+ ...,
+ anything [2] SET OF
SEQUENCE {
cup-of-coffee BIT STRING,
...
diff --git a/tests/31-set-of-OK.asn1.-EF b/tests/31-set-of-OK.asn1.-EF
index 692450b..2efaccc 100644
--- a/tests/31-set-of-OK.asn1.-EF
+++ b/tests/31-set-of-OK.asn1.-EF
@@ -12,11 +12,16 @@
}
Stuff ::= SET {
- trees [0] IMPLICIT SET OF Forest OPTIONAL,
- anything [1] IMPLICIT SET OF SEQUENCE {
+ trees [1] IMPLICIT SET OF Forest OPTIONAL,
+ anything [2] IMPLICIT SET OF SEQUENCE {
cup-of-coffee BIT STRING,
...
- } OPTIONAL
+ } OPTIONAL,
+ ...,
+ other CHOICE {
+ a [0] IMPLICIT INTEGER,
+ b [3] IMPLICIT INTEGER
+ }
}
END
diff --git a/tests/31-set-of-OK.asn1.-P b/tests/31-set-of-OK.asn1.-P
index 37533f0..143ab8c 100644
--- a/tests/31-set-of-OK.asn1.-P
+++ b/tests/31-set-of-OK.asn1.-P
@@ -142,6 +142,8 @@
#include <constr_SET_OF.h>
#include <BIT_STRING.h>
#include <constr_SEQUENCE.h>
+#include <INTEGER.h>
+#include <constr_CHOICE.h>
#include <constr_SET.h>
/*** <<< DEPS [Stuff] >>> ***/
@@ -153,7 +155,13 @@
typedef enum Stuff_PR {
Stuff_PR_trees, /* Member trees is present */
Stuff_PR_anything, /* Member anything is present */
+ Stuff_PR_other, /* Member other is present */
} Stuff_PR;
+typedef enum other_PR {
+ other_PR_NOTHING, /* No components present */
+ other_PR_a,
+ other_PR_b,
+} other_PR;
extern asn_TYPE_descriptor_t asn_DEF_Stuff;
/*** <<< TYPE-DECLS [Stuff] >>> ***/
@@ -181,10 +189,24 @@
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} *anything;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+ struct other {
+ other_PR present;
+ union {
+ INTEGER_t a;
+ INTEGER_t b;
+ } choice;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+ } *other;
/* Presence bitmask: ASN_SET_ISPRESENT(pStuff, Stuff_PR_x) */
unsigned int _presence_map
- [((2+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+ [((3+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
@@ -202,7 +224,7 @@
},
};
static ber_tlv_tag_t asn_DEF_trees_tags[] = {
- (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+ (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
};
static asn_SET_OF_specifics_t asn_DEF_trees_specs = {
@@ -245,7 +267,7 @@
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn_TYPE_tag2member_t asn_DEF_anything_member_tag2el[] = {
- { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 0 }, /* cup-of-coffee at 26 */
+ { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 0 }, /* cup-of-coffee at 32 */
};
static asn_SEQUENCE_specifics_t asn_DEF_anything_member_specs = {
sizeof(struct anything_member),
@@ -287,7 +309,7 @@
},
};
static ber_tlv_tag_t asn_DEF_anything_tags[] = {
- (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+ (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
};
static asn_SET_OF_specifics_t asn_DEF_anything_specs = {
@@ -317,39 +339,104 @@
&asn_DEF_anything_specs /* Additional specs */
};
-static asn_TYPE_member_t asn_MBR_Stuff[] = {
- { ATF_POINTER, 2, offsetof(struct Stuff, trees),
+static asn_TYPE_member_t asn_MBR_other[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct other, choice.a),
.tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
.tag_mode = -1, /* IMPLICIT tag at current level */
+ .type = (void *)&asn_DEF_INTEGER,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "a"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct other, choice.b),
+ .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+ .tag_mode = -1, /* IMPLICIT tag at current level */
+ .type = (void *)&asn_DEF_INTEGER,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "b"
+ },
+};
+static asn_TYPE_tag2member_t asn_DEF_other_tag2el[] = {
+ { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a at 26 */
+ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 }, /* b at 28 */
+};
+static asn_CHOICE_specifics_t asn_DEF_other_specs = {
+ sizeof(struct other),
+ offsetof(struct other, _asn_ctx),
+ offsetof(struct other, present),
+ sizeof(((struct other *)0)->present),
+ asn_DEF_other_tag2el,
+ 2, /* Count of tags in the map */
+ 0 /* Whether extensible */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_other = {
+ "other",
+ CHOICE_free,
+ CHOICE_print,
+ CHOICE_constraint,
+ CHOICE_decode_ber,
+ CHOICE_encode_der,
+ 0, /* Not implemented yet */
+ CHOICE_encode_xer,
+ CHOICE_outmost_tag,
+ 0, /* No effective tags (pointer) */
+ 0, /* No effective tags (count) */
+ 0, /* No tags (pointer) */
+ 0, /* No tags (count) */
+ asn_MBR_other,
+ 2, /* Elements count */
+ &asn_DEF_other_specs /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Stuff[] = {
+ { ATF_POINTER, 3, offsetof(struct Stuff, trees),
+ .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+ .tag_mode = -1, /* IMPLICIT tag at current level */
.type = (void *)&asn_DEF_trees,
.memb_constraints = 0, /* Defer to actual type */
.name = "trees"
},
- { ATF_POINTER, 1, offsetof(struct Stuff, anything),
- .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+ { ATF_POINTER, 2, offsetof(struct Stuff, anything),
+ .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
.tag_mode = -1, /* IMPLICIT tag at current level */
.type = (void *)&asn_DEF_anything,
.memb_constraints = 0, /* Defer to actual type */
.name = "anything"
},
+ { ATF_POINTER, 0, offsetof(struct Stuff, other),
+ .tag = -1 /* Ambiguous tag (CHOICE?) */,
+ .tag_mode = 0,
+ .type = (void *)&asn_DEF_other,
+ .memb_constraints = 0, /* Defer to actual type */
+ .name = "other"
+ },
};
static ber_tlv_tag_t asn_DEF_Stuff_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
};
static asn_TYPE_tag2member_t asn_DEF_Stuff_tag2el[] = {
- { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* trees at 23 */
- { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* anything at 28 */
+ { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* a at 26 */
+ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* trees at 23 */
+ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* anything at 34 */
+ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* b at 28 */
};
-static uint8_t asn_DEF_Stuff_mmap[(2 + (8 * sizeof(unsigned int)) - 1) / 8] = {
- (0 << 7) | (0 << 6)
+static asn_TYPE_tag2member_t asn_DEF_Stuff_tag2el_cxer[] = {
+ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* trees at 23 */
+ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* anything at 34 */
+ { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* a at 26 */
+};
+static uint8_t asn_DEF_Stuff_mmap[(3 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+ (0 << 7) | (0 << 6) | (0 << 5)
};
static asn_SET_specifics_t asn_DEF_Stuff_specs = {
sizeof(struct Stuff),
offsetof(struct Stuff, _asn_ctx),
offsetof(struct Stuff, _presence_map),
asn_DEF_Stuff_tag2el,
- 2, /* Count of tags in the map */
- 0, /* Whether extensible */
+ 4, /* Count of tags in the map */
+ asn_DEF_Stuff_tag2el_cxer,
+ 3, /* Count of tags in the CANONICAL-XER map */
+ 1, /* Whether extensible */
(unsigned int *)asn_DEF_Stuff_mmap /* Mandatory elements map */
};
asn_TYPE_descriptor_t asn_DEF_Stuff = {
@@ -369,7 +456,7 @@
sizeof(asn_DEF_Stuff_tags)
/sizeof(asn_DEF_Stuff_tags[0]), /* 1 */
asn_MBR_Stuff,
- 2, /* Elements count */
+ 3, /* Elements count */
&asn_DEF_Stuff_specs /* Additional specs */
};
diff --git a/tests/43-recursion-OK.asn1.-P b/tests/43-recursion-OK.asn1.-P
index 885e635..7f03aad 100644
--- a/tests/43-recursion-OK.asn1.-P
+++ b/tests/43-recursion-OK.asn1.-P
@@ -396,6 +396,8 @@
offsetof(struct Test_structure_2, _presence_map),
asn_DEF_Test_structure_2_tag2el,
1, /* Count of tags in the map */
+ asn_DEF_Test_structure_2_tag2el, /* Same as above */
+ 1, /* Count of tags in the CANONICAL-XER map */
0, /* Whether extensible */
(unsigned int *)asn_DEF_Test_structure_2_mmap /* Mandatory elements map */
};
@@ -479,6 +481,8 @@
offsetof(struct Test_structure_3, _presence_map),
asn_DEF_Test_structure_3_tag2el,
1, /* Count of tags in the map */
+ asn_DEF_Test_structure_3_tag2el, /* Same as above */
+ 1, /* Count of tags in the CANONICAL-XER map */
0, /* Whether extensible */
(unsigned int *)asn_DEF_Test_structure_3_mmap /* Mandatory elements map */
};
diff --git a/tests/47-set-ext-OK.asn1.-P b/tests/47-set-ext-OK.asn1.-P
index 568caad..5aa2ce2 100644
--- a/tests/47-set-ext-OK.asn1.-P
+++ b/tests/47-set-ext-OK.asn1.-P
@@ -59,6 +59,8 @@
offsetof(struct T1, _presence_map),
asn_DEF_T1_tag2el,
1, /* Count of tags in the map */
+ asn_DEF_T1_tag2el, /* Same as above */
+ 1, /* Count of tags in the CANONICAL-XER map */
1, /* Whether extensible */
(unsigned int *)asn_DEF_T1_mmap /* Mandatory elements map */
};
@@ -144,6 +146,8 @@
offsetof(struct T2, _presence_map),
asn_DEF_T2_tag2el,
1, /* Count of tags in the map */
+ asn_DEF_T2_tag2el, /* Same as above */
+ 1, /* Count of tags in the CANONICAL-XER map */
1, /* Whether extensible */
(unsigned int *)asn_DEF_T2_mmap /* Mandatory elements map */
};