diff --git a/openbsc/tests/gsm0408/gsm0408_test.c b/openbsc/tests/gsm0408/gsm0408_test.c
index d6abce6..2d91b68 100644
--- a/openbsc/tests/gsm0408/gsm0408_test.c
+++ b/openbsc/tests/gsm0408/gsm0408_test.c
@@ -103,11 +103,55 @@
 		printf("failed to generate SI2quater: %s\n", strerror(-r));
 }
 
-static inline void test_si2q(void)
+static inline void test_si2q_u(void)
 {
 	struct gsm_bts *bts;
 	struct gsm_network *network = gsm_network_init(1, 1, NULL);
-	printf("Testing SYSINFO_TYPE_2quater generation:\n");
+	printf("Testing SYSINFO_TYPE_2quater UARFCN generation:\n");
+
+	if (!network)
+		exit(1);
+	bts = gsm_bts_alloc(network);
+
+	bts_uarfcn_add(bts, 1982, 13, 1);
+	gen(bts);
+
+	bts_uarfcn_add(bts, 1982, 44, 0);
+	gen(bts);
+
+	bts_uarfcn_add(bts, 1982, 61, 1);
+	gen(bts);
+
+	bts_uarfcn_add(bts, 1982, 89, 1);
+	gen(bts);
+
+	bts_uarfcn_add(bts, 1982, 113, 0);
+	gen(bts);
+
+	bts_uarfcn_add(bts, 1982, 123, 0);
+	gen(bts);
+
+	bts_uarfcn_add(bts, 1982, 56, 1);
+	gen(bts);
+
+	bts_uarfcn_add(bts, 1982, 72, 1);
+	gen(bts);
+
+	bts_uarfcn_add(bts, 1982, 223, 1);
+	gen(bts);
+
+	bts_uarfcn_add(bts, 1982, 14, 0);
+	gen(bts);
+
+	bts_uarfcn_add(bts, 1982, 88, 0);
+	gen(bts);
+}
+
+static inline void test_si2q_e(void)
+{
+	struct gsm_bts *bts;
+	struct gsm_network *network = gsm_network_init(1, 1, NULL);
+	printf("Testing SYSINFO_TYPE_2quater EARFCN generation:\n");
 
 	if (!network)
 		exit(1);
@@ -230,11 +274,7 @@
 					      f0, &f0_included);
 
 	memset(w, 0, sizeof(w));
-	rc = range_enc_arfcns(range, arfcns, arfcns_used, w, 0);
-	if (rc != 0) {
-		printf("Cannot compute range W(k), rc = %d\n", rc);
-		return 1;
-	}
+	range_enc_arfcns(range, arfcns, arfcns_used, w, 0);
 
 	if (!silent)
 		fprintf(stderr, "range=%d, arfcns_used=%d, f0=%d, f0_included=%d\n",
@@ -243,24 +283,20 @@
 	/* Select the range and the amount of bits needed */
 	switch (range) {
 	case ARFCN_RANGE_128:
-		rc = range_enc_range128(chan_list, f0, w);
+		range_enc_range128(chan_list, f0, w);
 		break;
 	case ARFCN_RANGE_256:
-		rc = range_enc_range256(chan_list, f0, w);
+		range_enc_range256(chan_list, f0, w);
 		break;
 	case ARFCN_RANGE_512:
-		rc = range_enc_range512(chan_list, f0, w);
+		range_enc_range512(chan_list, f0, w);
 		break;
 	case ARFCN_RANGE_1024:
-		rc = range_enc_range1024(chan_list, f0, f0_included, w);
+		range_enc_range1024(chan_list, f0, f0_included, w);
 		break;
 	default:
 		return 1;
 	};
-	if (rc != 0) {
-		printf("Cannot encode range, rc = %d\n", rc);
-		return 1;
-	}
 
 	if (!silent)
 		printf("chan_list = %s\n",
@@ -471,8 +507,7 @@
 			break;
 		}
 
-	rc = range_enc_range512(chan_list, (1 << 9) | 0x96, w);
-	VERIFY(rc, ==, 0);
+	range_enc_range512(chan_list, (1 << 9) | 0x96, w);
 
 	printf("Range512: %s\n", osmo_hexdump(chan_list, ARRAY_SIZE(chan_list)));
 }
@@ -496,8 +531,7 @@
 	printf("Element is: %d => freqs[i] = %d\n", i,  i >= 0 ? freqs3[i] : -1);
 	VERIFY(i, ==, 0);
 
-	i = range_enc_arfcns(1023, freqs1, ARRAY_SIZE(freqs1), ws, 0);
-	VERIFY(i, ==, 0);
+	range_enc_arfcns(1023, freqs1, ARRAY_SIZE(freqs1), ws, 0);
 
 	for (i = 0; i < sizeof(freqs1)/sizeof(freqs1[0]); ++i) {
 		printf("w[%d]=%d\n", i, ws[i]);
@@ -554,7 +588,8 @@
 	test_range_encoding();
 	test_gsm411_rp_ref_wrap();
 
-	test_si2q();
+	test_si2q_e();
+	test_si2q_u();
 	printf("Done.\n");
 	return EXIT_SUCCESS;
 }
