structure comparison functions
diff --git a/tests/50-constraint-OK.asn1.-Pgen-PER b/tests/50-constraint-OK.asn1.-Pgen-PER
index 0468213..1e22d99 100644
--- a/tests/50-constraint-OK.asn1.-Pgen-PER
+++ b/tests/50-constraint-OK.asn1.-Pgen-PER
@@ -37,6 +37,7 @@
 	"Int1",
 	NativeInteger_free,
 	NativeInteger_print,
+	NativeInteger_compare,
 	NativeInteger_constraint,
 	NativeInteger_decode_ber,
 	NativeInteger_encode_der,
@@ -131,6 +132,7 @@
 	"Int2",
 	NativeInteger_free,
 	NativeInteger_print,
+	NativeInteger_compare,
 	Int2_constraint,
 	NativeInteger_decode_ber,
 	NativeInteger_encode_der,
@@ -225,6 +227,7 @@
 	"Int3",
 	NativeInteger_free,
 	NativeInteger_print,
+	NativeInteger_compare,
 	Int3_constraint,
 	NativeInteger_decode_ber,
 	NativeInteger_encode_der,
@@ -319,6 +322,7 @@
 	"Int4",
 	NativeInteger_free,
 	NativeInteger_print,
+	NativeInteger_compare,
 	Int4_constraint,
 	NativeInteger_decode_ber,
 	NativeInteger_encode_der,
@@ -413,6 +417,7 @@
 	"Int5",
 	NativeInteger_free,
 	NativeInteger_print,
+	NativeInteger_compare,
 	Int5_constraint,
 	NativeInteger_decode_ber,
 	NativeInteger_encode_der,
@@ -506,6 +511,7 @@
 	"ExtensibleExtensions",
 	NativeInteger_free,
 	NativeInteger_print,
+	NativeInteger_compare,
 	ExtensibleExtensions_constraint,
 	NativeInteger_decode_ber,
 	NativeInteger_encode_der,
@@ -566,6 +572,7 @@
 	"Str1",
 	IA5String_free,
 	IA5String_print,
+	IA5String_compare,
 	IA5String_constraint,
 	IA5String_decode_ber,
 	IA5String_encode_der,
@@ -678,6 +685,7 @@
 	"Str2",
 	IA5String_free,
 	IA5String_print,
+	IA5String_compare,
 	Str2_constraint,
 	IA5String_decode_ber,
 	IA5String_encode_der,
@@ -814,6 +822,7 @@
 	"Str3",
 	IA5String_free,
 	IA5String_print,
+	IA5String_compare,
 	Str3_constraint,
 	IA5String_decode_ber,
 	IA5String_encode_der,
@@ -922,6 +931,7 @@
 	"Str4",
 	IA5String_free,
 	IA5String_print,
+	IA5String_compare,
 	Str4_constraint,
 	IA5String_decode_ber,
 	IA5String_encode_der,
@@ -1031,6 +1041,7 @@
 	"PER-Visible",
 	IA5String_free,
 	IA5String_print,
+	IA5String_compare,
 	PER_Visible_constraint,
 	IA5String_decode_ber,
 	IA5String_encode_der,
@@ -1139,6 +1150,7 @@
 	"PER-Visible-2",
 	IA5String_free,
 	IA5String_print,
+	IA5String_compare,
 	PER_Visible_2_constraint,
 	IA5String_decode_ber,
 	IA5String_encode_der,
@@ -1247,6 +1259,7 @@
 	"Not-PER-Visible-1",
 	IA5String_free,
 	IA5String_print,
+	IA5String_compare,
 	Not_PER_Visible_1_constraint,
 	IA5String_decode_ber,
 	IA5String_encode_der,
@@ -1355,6 +1368,7 @@
 	"Not-PER-Visible-2",
 	IA5String_free,
 	IA5String_print,
+	IA5String_compare,
 	Not_PER_Visible_2_constraint,
 	IA5String_decode_ber,
 	IA5String_encode_der,
@@ -1463,6 +1477,7 @@
 	"Not-PER-Visible-3",
 	IA5String_free,
 	IA5String_print,
+	IA5String_compare,
 	Not_PER_Visible_3_constraint,
 	IA5String_decode_ber,
 	IA5String_encode_der,
@@ -1574,6 +1589,7 @@
 	"SIZE-but-not-FROM",
 	IA5String_free,
 	IA5String_print,
+	IA5String_compare,
 	SIZE_but_not_FROM_constraint,
 	IA5String_decode_ber,
 	IA5String_encode_der,
@@ -1685,6 +1701,7 @@
 	"SIZE-and-FROM",
 	IA5String_free,
 	IA5String_print,
+	IA5String_compare,
 	SIZE_and_FROM_constraint,
 	IA5String_decode_ber,
 	IA5String_encode_der,
@@ -1793,6 +1810,7 @@
 	"Neither-SIZE-nor-FROM",
 	IA5String_free,
 	IA5String_print,
+	IA5String_compare,
 	Neither_SIZE_nor_FROM_constraint,
 	IA5String_decode_ber,
 	IA5String_encode_der,
@@ -1895,6 +1913,7 @@
 	"Utf8-4",
 	UTF8String_free,
 	UTF8String_print,
+	UTF8String_compare,
 	Utf8_4_constraint,
 	UTF8String_decode_ber,
 	UTF8String_encode_der,
@@ -2025,6 +2044,7 @@
 	"Utf8-3",
 	UTF8String_free,
 	UTF8String_print,
+	UTF8String_compare,
 	Utf8_3_constraint,
 	UTF8String_decode_ber,
 	UTF8String_encode_der,
@@ -2126,6 +2146,7 @@
 	"Utf8-2",
 	UTF8String_free,
 	UTF8String_print,
+	UTF8String_compare,
 	Utf8_2_constraint,
 	UTF8String_decode_ber,
 	UTF8String_encode_der,
@@ -2186,6 +2207,7 @@
 	"Utf8-1",
 	UTF8String_free,
 	UTF8String_print,
+	UTF8String_compare,
 	UTF8String_constraint,
 	UTF8String_decode_ber,
 	UTF8String_encode_der,
@@ -2308,6 +2330,7 @@
 	"VisibleIdentifier",
 	VisibleString_free,
 	VisibleString_print,
+	VisibleString_compare,
 	VisibleIdentifier_constraint,
 	VisibleString_decode_ber,
 	VisibleString_encode_der,
@@ -2550,6 +2573,7 @@
 	"enum-c",
 	NativeEnumerated_free,
 	NativeEnumerated_print,
+	NativeEnumerated_compare,
 	NativeEnumerated_constraint,
 	NativeEnumerated_decode_ber,
 	NativeEnumerated_encode_der,
@@ -2671,6 +2695,7 @@
 	"Sequence",
 	SEQUENCE_free,
 	SEQUENCE_print,
+	SEQUENCE_compare,
 	SEQUENCE_constraint,
 	SEQUENCE_decode_ber,
 	SEQUENCE_encode_der,
@@ -2755,6 +2780,7 @@
 	"SequenceOf",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
+	SEQUENCE_OF_compare,
 	SEQUENCE_OF_constraint,
 	SEQUENCE_OF_decode_ber,
 	SEQUENCE_OF_encode_der,
@@ -2848,6 +2874,7 @@
 	"Enum0",
 	NativeEnumerated_free,
 	NativeEnumerated_print,
+	NativeEnumerated_compare,
 	NativeEnumerated_constraint,
 	NativeEnumerated_decode_ber,
 	NativeEnumerated_encode_der,
@@ -2965,6 +2992,7 @@
 	"Enum1",
 	NativeEnumerated_free,
 	NativeEnumerated_print,
+	NativeEnumerated_compare,
 	Enum1_constraint,
 	NativeEnumerated_decode_ber,
 	NativeEnumerated_encode_der,
@@ -3107,6 +3135,7 @@
 	"Identifier",
 	VisibleString_free,
 	VisibleString_print,
+	VisibleString_compare,
 	Identifier_constraint,
 	VisibleString_decode_ber,
 	VisibleString_encode_der,