diff options
author | vlm <vlm@59561ff5-6e30-0410-9f3c-9617f08c8826> | 2006-03-21 04:48:15 +0000 |
---|---|---|
committer | vlm <vlm@59561ff5-6e30-0410-9f3c-9617f08c8826> | 2006-03-21 04:48:15 +0000 |
commit | 17e65d0c34675e16ead1141205f1d98866d85f4d (patch) | |
tree | d289be00253b7bf249f5afc885e0de26deb9ef81 /tests | |
parent | 0c6d3810a1ef7bfead832777159757097319ad76 (diff) |
parameterization: direct assignment
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1103 59561ff5-6e30-0410-9f3c-9617f08c8826
Diffstat (limited to 'tests')
-rw-r--r-- | tests/106-param-constr-OK.asn1 | 8 | ||||
-rw-r--r-- | tests/106-param-constr-OK.asn1.-P | 166 | ||||
-rw-r--r-- | tests/107-param-constr-2-OK.asn1 | 18 | ||||
-rw-r--r-- | tests/84-param-tags-OK.asn1.-P | 36 |
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" }, }; |