gsm0408_test: also test gsm48_generate_lai() and gsm48_decode_lai()

Change-Id: Idd6cee090464bc92b654332904a9a08edf16e5c9
diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c
index ad45507..a0e740a 100644
--- a/tests/gsm0408/gsm0408_test.c
+++ b/tests/gsm0408/gsm0408_test.c
@@ -159,6 +159,33 @@
 		printf("passed\n");
 }
 
+static inline void check_lai(const struct gprs_ra_id *raid)
+{
+	int rc;
+	struct gsm48_loc_area_id lai = {};
+	struct gprs_ra_id decoded = {};
+	struct gprs_ra_id _laid = *raid;
+	struct gprs_ra_id *laid = &_laid;
+	laid->rac = 0;
+
+	printf("- gsm48_generate_lai() from "); dump_ra(laid);
+
+	gsm48_generate_lai(&lai, laid->mcc, laid->mnc, laid->lac);
+	printf("  Encoded %s\n", osmo_hexdump((unsigned char*)&lai, sizeof(lai)));
+	rc = gsm48_decode_lai(&lai, &decoded.mcc, &decoded.mnc, &decoded.lac);
+	if (rc) {
+		printf("  gsm48_decode_lai() returned %d --> FAIL\n", rc);
+		return;
+	}
+	printf("  gsm48_decode_lai() gives  "); dump_ra(&decoded);
+	if (decoded.mcc == laid->mcc
+	    && decoded.mnc == laid->mnc
+	    && decoded.lac == laid->lac)
+		printf("  passed\n");
+	else
+		printf("  FAIL\n");
+}
+
 static struct gprs_ra_id test_ra_cap_items[] = {
 	{
 		.mcc = 77,
@@ -194,6 +221,15 @@
 		check_ra(&test_ra_cap_items[i]);
 }
 
+static void test_lai_encode_decode(void)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(test_ra_cap_items); i++) {
+		check_lai(&test_ra_cap_items[i]);
+	}
+}
+
 static void test_mid_from_tmsi(void)
 {
 	static const uint8_t res[] = { 0x17, 0x05, 0xf4, 0xaa, 0xbb, 0xcc, 0xdd };
@@ -229,6 +265,7 @@
 	test_mid_from_tmsi();
 	test_mid_from_imsi();
 	test_ra_cap();
+	test_lai_encode_decode();
 
 	return EXIT_SUCCESS;
 }