aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2006-03-21 04:48:15 +0000
committerLev Walkin <vlm@lionet.info>2006-03-21 04:48:15 +0000
commit0c0bca6bc489b142bdde51ef94c37805903ec3e5 (patch)
treed289be00253b7bf249f5afc885e0de26deb9ef81 /tests
parenta00d6b371486efc2fbe6e812882d250f5a0bb75c (diff)
parameterization: direct assignment
Diffstat (limited to 'tests')
-rw-r--r--tests/106-param-constr-OK.asn18
-rw-r--r--tests/106-param-constr-OK.asn1.-P166
-rw-r--r--tests/107-param-constr-2-OK.asn118
-rw-r--r--tests/84-param-tags-OK.asn1.-P36
4 files changed, 178 insertions, 50 deletions
diff --git a/tests/106-param-constr-OK.asn1 b/tests/106-param-constr-OK.asn1
index 196b3d7d..7dd8c4bf 100644
--- a/tests/106-param-constr-OK.asn1
+++ b/tests/106-param-constr-OK.asn1
@@ -11,10 +11,12 @@ ModuleParametrizationWithConstraints
DEFINITIONS ::=
BEGIN
- Narrow {Type} ::= SEQUENCE {
- narrower Type (2..5)
+ Narrow {Type, INTEGER:value} ::= SEQUENCE {
+ narrow1 Type (1..5) DEFAULT value,
+ narrow2 [0] Type (2..5),
+ narrow3 [1] Type (3..5) OPTIONAL
}
- NarrowInteger ::= Narrow {INTEGER (0..10)}
+ NarrowInteger ::= Narrow {INTEGER (0..10), 3}
END
diff --git a/tests/106-param-constr-OK.asn1.-P b/tests/106-param-constr-OK.asn1.-P
index 49046200..db115163 100644
--- a/tests/106-param-constr-OK.asn1.-P
+++ b/tests/106-param-constr-OK.asn1.-P
@@ -6,21 +6,48 @@
/*** <<< TYPE-DECLS [Narrow] >>> ***/
-typedef struct Narrow_16P0 {
- long narrower;
+typedef struct Narrow_15P0 {
+ long *narrow1 /* DEFAULT 3 */;
+ long narrow2;
+ long *narrow3 /* OPTIONAL */;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
-} Narrow_16P0_t;
+} Narrow_15P0_t;
/*** <<< FUNC-DECLS [Narrow] >>> ***/
-extern asn_TYPE_descriptor_t asn_DEF_Narrow_16P0;
+extern asn_TYPE_descriptor_t asn_DEF_Narrow_15P0;
/*** <<< CODE [Narrow] >>> ***/
static int
-memb_narrower_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_narrow1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_consume_bytes_f *app_errlog, void *app_key) {
+ long value;
+
+ if(!sptr) {
+ _ASN_ERRLOG(app_errlog, app_key,
+ "%s: value not given (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+
+ value = *(const long *)sptr;
+
+ if((value >= 1 && value <= 5)) {
+ /* Constraint check succeeded */
+ return 0;
+ } else {
+ _ASN_ERRLOG(app_errlog, app_key,
+ "%s: constraint failed (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+}
+
+static int
+memb_narrow2_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
asn_app_consume_bytes_f *app_errlog, void *app_key) {
long value;
@@ -44,36 +71,93 @@ memb_narrower_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
}
}
+static int
+memb_narrow3_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_consume_bytes_f *app_errlog, void *app_key) {
+ long value;
+
+ if(!sptr) {
+ _ASN_ERRLOG(app_errlog, app_key,
+ "%s: value not given (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+
+ value = *(const long *)sptr;
+
+ if((value >= 3 && value <= 5)) {
+ /* Constraint check succeeded */
+ return 0;
+ } else {
+ _ASN_ERRLOG(app_errlog, app_key,
+ "%s: constraint failed (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+}
+
/*** <<< STAT-DEFS [Narrow] >>> ***/
-static asn_TYPE_member_t asn_MBR_Narrow_16P0_1[] = {
- { ATF_NOFLAGS, 0, offsetof(struct Narrow_16P0, narrower),
+static int asn_DFL_2_set_3(void **sptr) {
+ long *st = *sptr;
+
+ if(!st) {
+ st = (*sptr = CALLOC(1, sizeof(*st)));
+ if(!st) return -1;
+ }
+
+ /* Install default value 3 */
+ *st = 3;
+ return 0;
+}
+static asn_TYPE_member_t asn_MBR_Narrow_15P0_1[] = {
+ { ATF_POINTER, 1, offsetof(struct Narrow_15P0, narrow1),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
.tag_mode = 0,
.type = &asn_DEF_NativeInteger,
- .memb_constraints = memb_narrower_constraint_1,
+ .memb_constraints = memb_narrow1_constraint_1,
+ .per_constraints = 0, /* PER is not compiled, use -gen-PER */
+ .default_value = asn_DFL_2_set_3, /* DEFAULT 3 */
+ .name = "narrow1"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct Narrow_15P0, narrow2),
+ .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+ .tag_mode = +1, /* EXPLICIT tag at current level */
+ .type = &asn_DEF_NativeInteger,
+ .memb_constraints = memb_narrow2_constraint_1,
+ .per_constraints = 0, /* PER is not compiled, use -gen-PER */
+ .default_value = 0,
+ .name = "narrow2"
+ },
+ { ATF_POINTER, 1, offsetof(struct Narrow_15P0, narrow3),
+ .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+ .tag_mode = +1, /* EXPLICIT tag at current level */
+ .type = &asn_DEF_NativeInteger,
+ .memb_constraints = memb_narrow3_constraint_1,
.per_constraints = 0, /* PER is not compiled, use -gen-PER */
.default_value = 0,
- .name = "narrower"
+ .name = "narrow3"
},
};
-static ber_tlv_tag_t asn_DEF_Narrow_16P0_tags_1[] = {
+static ber_tlv_tag_t asn_DEF_Narrow_15P0_tags_1[] = {
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
-static asn_TYPE_tag2member_t asn_MAP_Narrow_16P0_tag2el_1[] = {
- { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* narrower at 18 */
+static asn_TYPE_tag2member_t asn_MAP_Narrow_15P0_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* narrow1 at 20 */
+ { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* narrow2 at 20 */
+ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 } /* narrow3 at 20 */
};
-static asn_SEQUENCE_specifics_t asn_SPC_Narrow_16P0_specs_1 = {
- sizeof(struct Narrow_16P0),
- offsetof(struct Narrow_16P0, _asn_ctx),
- asn_MAP_Narrow_16P0_tag2el_1,
- 1, /* Count of tags in the map */
+static asn_SEQUENCE_specifics_t asn_SPC_Narrow_15P0_specs_1 = {
+ sizeof(struct Narrow_15P0),
+ offsetof(struct Narrow_15P0, _asn_ctx),
+ asn_MAP_Narrow_15P0_tag2el_1,
+ 3, /* Count of tags in the map */
0, 0, 0, /* Optional elements (not needed) */
-1, /* Start extensions */
-1 /* Stop extensions */
};
-asn_TYPE_descriptor_t asn_DEF_Narrow_16P0 = {
+asn_TYPE_descriptor_t asn_DEF_Narrow_15P0 = {
"Narrow",
"Narrow",
SEQUENCE_free,
@@ -85,16 +169,16 @@ asn_TYPE_descriptor_t asn_DEF_Narrow_16P0 = {
SEQUENCE_encode_xer,
0, /* No PER decoder, -gen-PER to enable */
0, /* Use generic outmost tag fetcher */
- asn_DEF_Narrow_16P0_tags_1,
- sizeof(asn_DEF_Narrow_16P0_tags_1)
- /sizeof(asn_DEF_Narrow_16P0_tags_1[0]), /* 1 */
- asn_DEF_Narrow_16P0_tags_1, /* Same as above */
- sizeof(asn_DEF_Narrow_16P0_tags_1)
- /sizeof(asn_DEF_Narrow_16P0_tags_1[0]), /* 1 */
+ asn_DEF_Narrow_15P0_tags_1,
+ sizeof(asn_DEF_Narrow_15P0_tags_1)
+ /sizeof(asn_DEF_Narrow_15P0_tags_1[0]), /* 1 */
+ asn_DEF_Narrow_15P0_tags_1, /* Same as above */
+ sizeof(asn_DEF_Narrow_15P0_tags_1)
+ /sizeof(asn_DEF_Narrow_15P0_tags_1[0]), /* 1 */
0, /* No PER visible constraints */
- asn_MBR_Narrow_16P0_1,
- 1, /* Elements count */
- &asn_SPC_Narrow_16P0_specs_1 /* Additional specs */
+ asn_MBR_Narrow_15P0_1,
+ 3, /* Elements count */
+ &asn_SPC_Narrow_15P0_specs_1 /* Additional specs */
};
@@ -104,7 +188,7 @@ asn_TYPE_descriptor_t asn_DEF_Narrow_16P0 = {
/*** <<< TYPE-DECLS [NarrowInteger] >>> ***/
-typedef Narrow_16P0_t NarrowInteger_t;
+typedef Narrow_15P0_t NarrowInteger_t;
/*** <<< FUNC-DECLS [NarrowInteger] >>> ***/
@@ -123,28 +207,28 @@ int
NarrowInteger_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
asn_app_consume_bytes_f *app_errlog, void *app_key) {
/* Replace with underlying type checker */
- td->check_constraints = asn_DEF_Narrow_16P0.check_constraints;
+ td->check_constraints = asn_DEF_Narrow_15P0.check_constraints;
return td->check_constraints(td, sptr, app_errlog, app_key);
}
/*
- * This type is implemented using Narrow_16P0,
+ * This type is implemented using Narrow_15P0,
* so here we adjust the DEF accordingly.
*/
static void
NarrowInteger_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
- td->free_struct = asn_DEF_Narrow_16P0.free_struct;
- td->print_struct = asn_DEF_Narrow_16P0.print_struct;
- td->ber_decoder = asn_DEF_Narrow_16P0.ber_decoder;
- td->der_encoder = asn_DEF_Narrow_16P0.der_encoder;
- td->xer_decoder = asn_DEF_Narrow_16P0.xer_decoder;
- td->xer_encoder = asn_DEF_Narrow_16P0.xer_encoder;
- td->uper_decoder = asn_DEF_Narrow_16P0.uper_decoder;
+ td->free_struct = asn_DEF_Narrow_15P0.free_struct;
+ td->print_struct = asn_DEF_Narrow_15P0.print_struct;
+ td->ber_decoder = asn_DEF_Narrow_15P0.ber_decoder;
+ td->der_encoder = asn_DEF_Narrow_15P0.der_encoder;
+ td->xer_decoder = asn_DEF_Narrow_15P0.xer_decoder;
+ td->xer_encoder = asn_DEF_Narrow_15P0.xer_encoder;
+ td->uper_decoder = asn_DEF_Narrow_15P0.uper_decoder;
if(!td->per_constraints)
- td->per_constraints = asn_DEF_Narrow_16P0.per_constraints;
- td->elements = asn_DEF_Narrow_16P0.elements;
- td->elements_count = asn_DEF_Narrow_16P0.elements_count;
- td->specifics = asn_DEF_Narrow_16P0.specifics;
+ td->per_constraints = asn_DEF_Narrow_15P0.per_constraints;
+ td->elements = asn_DEF_Narrow_15P0.elements;
+ td->elements_count = asn_DEF_Narrow_15P0.elements_count;
+ td->specifics = asn_DEF_Narrow_15P0.specifics;
}
void
diff --git a/tests/107-param-constr-2-OK.asn1 b/tests/107-param-constr-2-OK.asn1
new file mode 100644
index 00000000..40aefab9
--- /dev/null
+++ b/tests/107-param-constr-2-OK.asn1
@@ -0,0 +1,18 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .107
+
+ModuleParametrizationWithConstraints2
+ { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+ spelio(9363) software(1) asn1c(5) test(1) 107 }
+ DEFINITIONS ::=
+BEGIN
+
+ Narrow {Type} ::= Type (2..5)
+
+ NarrowInteger ::= Narrow {INTEGER}
+
+END
diff --git a/tests/84-param-tags-OK.asn1.-P b/tests/84-param-tags-OK.asn1.-P
index 8e48c258..d3a61c67 100644
--- a/tests/84-param-tags-OK.asn1.-P
+++ b/tests/84-param-tags-OK.asn1.-P
@@ -8,13 +8,13 @@
/*** <<< TYPE-DECLS [TestType] >>> ***/
typedef struct TestType_16P0 {
- long common;
+ long common /* DEFAULT 0 */;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} TestType_16P0_t;
typedef struct TestType_16P1 {
- BOOLEAN_t common;
+ BOOLEAN_t common /* DEFAULT 0 */;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
@@ -55,14 +55,26 @@ memb_common_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
/*** <<< STAT-DEFS [TestType] >>> ***/
+static int asn_DFL_2_set_0(void **sptr) {
+ long *st = *sptr;
+
+ if(!st) {
+ st = (*sptr = CALLOC(1, sizeof(*st)));
+ if(!st) return -1;
+ }
+
+ /* Install default value 0 */
+ *st = 0;
+ return 0;
+}
static asn_TYPE_member_t asn_MBR_TestType_16P0_1[] = {
- { ATF_NOFLAGS, 0, offsetof(struct TestType_16P0, common),
+ { ATF_NOFLAGS, 1, offsetof(struct TestType_16P0, common),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
.tag_mode = 0,
.type = &asn_DEF_NativeInteger,
.memb_constraints = memb_common_constraint_1,
.per_constraints = 0, /* PER is not compiled, use -gen-PER */
- .default_value = 0,
+ .default_value = asn_DFL_2_set_0, /* DEFAULT 0 */
.name = "common"
},
};
@@ -105,14 +117,26 @@ asn_TYPE_descriptor_t asn_DEF_TestType_16P0 = {
&asn_SPC_TestType_16P0_specs_1 /* Additional specs */
};
+static int asn_DFL_4_set_0(void **sptr) {
+ BOOLEAN_t *st = *sptr;
+
+ if(!st) {
+ st = (*sptr = CALLOC(1, sizeof(*st)));
+ if(!st) return -1;
+ }
+
+ /* Install default value 0 */
+ *st = 0;
+ return 0;
+}
static asn_TYPE_member_t asn_MBR_TestType_16P1_3[] = {
- { ATF_NOFLAGS, 0, offsetof(struct TestType_16P1, common),
+ { ATF_NOFLAGS, 1, offsetof(struct TestType_16P1, common),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
.tag_mode = 0,
.type = &asn_DEF_BOOLEAN,
.memb_constraints = 0, /* Defer constraints checking to the member type */
.per_constraints = 0, /* PER is not compiled, use -gen-PER */
- .default_value = 0,
+ .default_value = asn_DFL_4_set_0, /* DEFAULT 0 */
.name = "common"
},
};