aboutsummaryrefslogtreecommitdiffstats
path: root/tests/fn
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2021-01-14 16:48:38 +0100
committerPau Espin Pedrol <pespin@sysmocom.de>2021-01-19 16:28:10 +0100
commit2182e627cda3ada77a203f9549260046278caf0e (patch)
treef2f60225f1d1a037354dd6f946229bc7268433f0 /tests/fn
parent793583ea2173c94b2dc779ab565fcf629a1d52b3 (diff)
Unify BTS into a C usable structure
Previous work on BTS class started to get stuff out of the C++ struct into a C struct (BTS -> struct gprs_glcmac_bts) so that some parts of it were accessible from C code. Doing so, however, ended up being messy too, since all code needs to be switching from one object to another, which actually refer to the same logical component. Let's instead rejoin the structures and make sure the struct is accessible and usable from both C and C++ code by rewriting all methods to be C compatible and converting 3 allocated suboject as pointers. This way BTS can internally still use those C++ objects while providing a clean APi to both C and C++ code. Change-Id: I7d12c896c5ded659ca9d3bff4cf3a3fc857db9dd
Diffstat (limited to 'tests/fn')
-rw-r--r--tests/fn/FnTest.cpp75
1 files changed, 38 insertions, 37 deletions
diff --git a/tests/fn/FnTest.cpp b/tests/fn/FnTest.cpp
index 3185bd5a..dd30b34d 100644
--- a/tests/fn/FnTest.cpp
+++ b/tests/fn/FnTest.cpp
@@ -36,24 +36,24 @@ extern "C" {
int16_t spoof_mnc = 0, spoof_mcc = 0;
bool spoof_mnc_3_digits = false;
-static uint32_t calc_fn(BTS * bts, uint32_t rfn)
+static uint32_t calc_fn(struct gprs_rlcmac_bts * bts, uint32_t rfn)
{
uint32_t fn;
- fn = bts->rfn_to_fn(rfn);
+ fn = bts_rfn_to_fn(bts, rfn);
printf("rfn=%i ==> fn=%i\n", rfn, fn);
return fn;
}
-static void set_fn(BTS * bts, uint32_t fn)
+static void set_fn(struct gprs_rlcmac_bts * bts, uint32_t fn)
{
printf("\n");
- bts->set_current_frame_number(fn);
+ bts_set_current_frame_number(bts, fn);
printf("bts: fn=%i\n", fn);
}
static void run_test()
{
- BTS bts(the_pcu);
+ struct gprs_rlcmac_bts *bts = bts_alloc(the_pcu);
uint32_t fn;
printf("RFN_MODULUS=%i\n",RFN_MODULUS);
@@ -63,20 +63,20 @@ static void run_test()
/* Test with a collection of real world examples,
* all all of them are not critical and do not
* assume the occurence of any race contions */
- set_fn(&bts, 1320462);
- fn = calc_fn(&bts, 5066);
+ set_fn(bts, 1320462);
+ fn = calc_fn(bts, 5066);
OSMO_ASSERT(fn == 1320458);
- set_fn(&bts, 8246);
- fn = calc_fn(&bts, 8244);
+ set_fn(bts, 8246);
+ fn = calc_fn(bts, 8244);
OSMO_ASSERT(fn == 8244);
- set_fn(&bts, 10270);
- fn = calc_fn(&bts, 10269);
+ set_fn(bts, 10270);
+ fn = calc_fn(bts, 10269);
OSMO_ASSERT(fn == 10269);
- set_fn(&bts, 311276);
- fn = calc_fn(&bts, 14250);
+ set_fn(bts, 311276);
+ fn = calc_fn(bts, 14250);
OSMO_ASSERT(fn == 311274);
@@ -84,20 +84,20 @@ static void run_test()
* just wrapped over a little bit above the
* modulo 42432 raster, but the rach request
* occurred before the wrapping */
- set_fn(&bts, RFN_MODULUS + 30);
- fn = calc_fn(&bts, RFN_MODULUS - 10);
+ set_fn(bts, RFN_MODULUS + 30);
+ fn = calc_fn(bts, RFN_MODULUS - 10);
OSMO_ASSERT(fn == 42422);
- set_fn(&bts, RFN_MODULUS + 1);
- fn = calc_fn(&bts, RFN_MODULUS - 1);
+ set_fn(bts, RFN_MODULUS + 1);
+ fn = calc_fn(bts, RFN_MODULUS - 1);
OSMO_ASSERT(fn == 42431);
- set_fn(&bts, RFN_MODULUS * 123 + 16);
- fn = calc_fn(&bts, RFN_MODULUS - 4);
+ set_fn(bts, RFN_MODULUS * 123 + 16);
+ fn = calc_fn(bts, RFN_MODULUS - 4);
OSMO_ASSERT(fn == 5219132);
- set_fn(&bts, RFN_MODULUS * 123 + 451);
- fn = calc_fn(&bts, RFN_MODULUS - 175);
+ set_fn(bts, RFN_MODULUS * 123 + 451);
+ fn = calc_fn(bts, RFN_MODULUS - 175);
OSMO_ASSERT(fn == 5218961);
@@ -105,41 +105,42 @@ static void run_test()
* the BTS just wrapped its internal frame number
* but we still get rach requests with high relative
* frame numbers. */
- set_fn(&bts, 0);
- fn = calc_fn(&bts, RFN_MODULUS - 13);
+ set_fn(bts, 0);
+ fn = calc_fn(bts, RFN_MODULUS - 13);
OSMO_ASSERT(fn == 2715635);
- set_fn(&bts, 453);
- fn = calc_fn(&bts, RFN_MODULUS - 102);
+ set_fn(bts, 453);
+ fn = calc_fn(bts, RFN_MODULUS - 102);
OSMO_ASSERT(fn == 2715546);
- set_fn(&bts, 10);
- fn = calc_fn(&bts, RFN_MODULUS - 10);
+ set_fn(bts, 10);
+ fn = calc_fn(bts, RFN_MODULUS - 10);
OSMO_ASSERT(fn == 2715638);
- set_fn(&bts, 23);
- fn = calc_fn(&bts, RFN_MODULUS - 42);
+ set_fn(bts, 23);
+ fn = calc_fn(bts, RFN_MODULUS - 42);
OSMO_ASSERT(fn == 2715606);
/* Also check with some corner case
* values where Fn and RFn reach its
* maximum/minimum valid range */
- set_fn(&bts, GSM_MAX_FN);
- fn = calc_fn(&bts, RFN_MODULUS-1);
+ set_fn(bts, GSM_MAX_FN);
+ fn = calc_fn(bts, RFN_MODULUS-1);
OSMO_ASSERT(fn == GSM_MAX_FN-1);
- set_fn(&bts, 0);
- fn = calc_fn(&bts, RFN_MODULUS-1);
+ set_fn(bts, 0);
+ fn = calc_fn(bts, RFN_MODULUS-1);
OSMO_ASSERT(fn == GSM_MAX_FN-1);
- set_fn(&bts, GSM_MAX_FN);
- fn = calc_fn(&bts, 0);
+ set_fn(bts, GSM_MAX_FN);
+ fn = calc_fn(bts, 0);
OSMO_ASSERT(fn == GSM_MAX_FN);
- set_fn(&bts, 0);
- fn = calc_fn(&bts, 0);
+ set_fn(bts, 0);
+ fn = calc_fn(bts, 0);
OSMO_ASSERT(fn == 0);
+ talloc_free(bts);
}
int main(int argc, char **argv)