diff options
author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2013-11-26 23:32:49 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2013-12-04 21:05:18 +0100 |
commit | 11f2d58dbd0f590da3612a9f587a23b92857436f (patch) | |
tree | 5cf4d83f840fa0fcc28a3157263c31982648835e /tests | |
parent | 3cbf9e040c8a84886468fe70e99d8d578d379b0d (diff) |
rlc: Create a testcase for the uplink window
Diffstat (limited to 'tests')
-rw-r--r-- | tests/types/TypesTest.cpp | 100 |
1 files changed, 99 insertions, 1 deletions
diff --git a/tests/types/TypesTest.cpp b/tests/types/TypesTest.cpp index 28180f7f..3859dfb9 100644 --- a/tests/types/TypesTest.cpp +++ b/tests/types/TypesTest.cpp @@ -95,7 +95,7 @@ static void test_rlc_v_b() gprs_rlc_v_b vb; vb.reset(); - for (size_t i = 0; i < RLC_MAX_SNS/2; ++i) + for (size_t i = 0; i < RLC_MAX_SNS; ++i) OSMO_ASSERT(vb.is_invalid(i)); vb.mark_unacked(23); @@ -180,10 +180,108 @@ static void test_rlc_dl_ul_basic() OSMO_ASSERT(dl_win.distance() == 4); } } + + { + gprs_rlc_ul_window ul_win = { 0, }; + gprs_rlc_v_n v_n; + int count; + + v_n.reset(); + + OSMO_ASSERT(ul_win.is_in_window(0)); + OSMO_ASSERT(ul_win.is_in_window(63)); + OSMO_ASSERT(!ul_win.is_in_window(64)); + + OSMO_ASSERT(!v_n.is_received(0)); + + /* simulate to have received 0, 1 and 5 */ + OSMO_ASSERT(ul_win.is_in_window(0)); + v_n.mark_received(0); + ul_win.raise_v_r(0, &v_n); + count = ul_win.raise_v_q(&v_n); + OSMO_ASSERT(v_n.is_received(0)); + OSMO_ASSERT(ul_win.v_q() == 1); + OSMO_ASSERT(ul_win.v_r() == 1); + OSMO_ASSERT(count == 1); + + OSMO_ASSERT(ul_win.is_in_window(1)); + v_n.mark_received(1); + ul_win.raise_v_r(1, &v_n); + count = ul_win.raise_v_q(&v_n); + OSMO_ASSERT(v_n.is_received(0)); + OSMO_ASSERT(ul_win.v_q() == 2); + OSMO_ASSERT(ul_win.v_r() == 2); + OSMO_ASSERT(count == 1); + + OSMO_ASSERT(ul_win.is_in_window(5)); + v_n.mark_received(5); + ul_win.raise_v_r(5, &v_n); + count = ul_win.raise_v_q(&v_n); + OSMO_ASSERT(v_n.is_received(0)); + OSMO_ASSERT(ul_win.v_q() == 2); + OSMO_ASSERT(ul_win.v_r() == 6); + OSMO_ASSERT(count == 0); + + OSMO_ASSERT(ul_win.is_in_window(65)); + OSMO_ASSERT(ul_win.is_in_window(2)); + OSMO_ASSERT(v_n.is_received(5)); + v_n.mark_received(65); + ul_win.raise_v_r(65, &v_n); + count = ul_win.raise_v_q(&v_n); + OSMO_ASSERT(count == 0); + OSMO_ASSERT(v_n.is_received(5)); + OSMO_ASSERT(ul_win.v_q() == 2); + OSMO_ASSERT(ul_win.v_r() == 66); + + OSMO_ASSERT(ul_win.is_in_window(2)); + OSMO_ASSERT(!ul_win.is_in_window(66)); + v_n.mark_received(2); + ul_win.raise_v_r(2, &v_n); + count = ul_win.raise_v_q(&v_n); + OSMO_ASSERT(count == 1); + OSMO_ASSERT(ul_win.v_q() == 3); + OSMO_ASSERT(ul_win.v_r() == 66); + + OSMO_ASSERT(ul_win.is_in_window(66)); + v_n.mark_received(66); + ul_win.raise_v_r(66, &v_n); + count = ul_win.raise_v_q(&v_n); + OSMO_ASSERT(count == 0); + OSMO_ASSERT(ul_win.v_q() == 3); + OSMO_ASSERT(ul_win.v_r() == 67); + + for (int i = 3; i <= 67; ++i) { + v_n.mark_received(i); + ul_win.raise_v_r(i, &v_n); + ul_win.raise_v_q(&v_n); + } + + OSMO_ASSERT(ul_win.v_q() == 68); + OSMO_ASSERT(ul_win.v_r() == 68); + + v_n.mark_received(68); + ul_win.raise_v_r(68, &v_n); + count = ul_win.raise_v_q(&v_n); + OSMO_ASSERT(ul_win.v_q() == 69); + OSMO_ASSERT(ul_win.v_r() == 69); + OSMO_ASSERT(count == 1); + + /* now test the wrapping */ + OSMO_ASSERT(ul_win.is_in_window(4)); + OSMO_ASSERT(!ul_win.is_in_window(5)); + v_n.mark_received(4); + ul_win.raise_v_r(4, &v_n); + count = ul_win.raise_v_q(&v_n); + OSMO_ASSERT(count == 0); + } } int main(int argc, char **argv) { + osmo_init_logging(&gprs_log_info); + log_set_use_color(osmo_stderr_target, 0); + log_set_print_filename(osmo_stderr_target, 0); + printf("Making some basic type testing.\n"); test_llc(); test_rlc(); |