aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-11-26 23:32:49 +0100
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-11-26 23:32:49 +0100
commit72febb9d7492c95bf428f150fb409ad18c4fcf03 (patch)
treeae1d3bae439bbd0530d4280ea99f5a99cc3ff933
parent73257c550c6ee4f6c8a435f42c33e5c1d8a19dfa (diff)
rlc: Create a testcase for the uplink windowzecke/features/clean-up
-rw-r--r--tests/types/TypesTest.cpp98
1 files changed, 98 insertions, 0 deletions
diff --git a/tests/types/TypesTest.cpp b/tests/types/TypesTest.cpp
index 28180f7..91b43b6 100644
--- a/tests/types/TypesTest.cpp
+++ b/tests/types/TypesTest.cpp
@@ -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();