CANONICAL-XER testing


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@479 59561ff5-6e30-0410-9f3c-9617f08c8826
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 */
 };