aboutsummaryrefslogtreecommitdiffstats
path: root/tests/types
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-12-04 21:05:18 +0100
commit11f2d58dbd0f590da3612a9f587a23b92857436f (patch)
tree5cf4d83f840fa0fcc28a3157263c31982648835e /tests/types
parent3cbf9e040c8a84886468fe70e99d8d578d379b0d (diff)
rlc: Create a testcase for the uplink window
Diffstat (limited to 'tests/types')
-rw-r--r--tests/types/TypesTest.cpp100
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();