aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichał Łyszczek <michal.lyszczek@bofc.pl>2018-02-02 20:05:46 +0100
committerMichał Łyszczek <michal.lyszczek@bofc.pl>2018-02-02 20:05:46 +0100
commitc4c9f62adb08b61d82f10a3b348b993155af202f (patch)
tree687fd3599cd9c26a8660d6588ad50d914aad0044
parentf4d9899c8d24d87644d4cc0c13c3bba9d8f81bc3 (diff)
downloadlibrb-c4c9f62adb08b61d82f10a3b348b993155af202f.tar.gz
librb-c4c9f62adb08b61d82f10a3b348b993155af202f.tar.bz2
librb-c4c9f62adb08b61d82f10a3b348b993155af202f.zip
add: tests to test rb_discard
-rw-r--r--rb/tests.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/rb/tests.c b/rb/tests.c
index a93cabe..2241f53 100644
--- a/rb/tests.c
+++ b/rb/tests.c
@@ -460,6 +460,70 @@ static void single_thread(void)
rb_destroy(rb);
}
+static void discard(void)
+{
+ char s[8] = "0123456";
+ char d[8];
+ int i;
+ struct rb *rb;
+
+ for (i = 0; i != 1; i++)
+ {
+ int flags;
+
+#if ENABLE_THREADS
+ flags = i ? O_MULTITHREAD : 0;
+#else
+ /*
+ * yup, if ENABLE_THREADS is 0, same code will be executed twice...
+ * it's not a bug, it's a feature! MORE TESTS NEVER HURT!
+ */
+
+ flags = 0;
+#endif
+ rb = rb_new(8, 1, 0);
+ rb_write(rb, s, 6);
+ rb_discard(rb, 3);
+ rb_read(rb, d, 3);
+ mt_fok(memcmp(d, "345", 3));
+ rb_clear(rb, 0);
+
+ rb_write(rb, s, 6);
+ rb_read(rb, d, 2);
+ rb_discard(rb, 2);
+ rb_read(rb, d, 2);
+ mt_fok(memcmp(d, "45", 2));
+ rb_clear(rb, 0);
+
+ /* overlap cases */
+ rb_write(rb, s, 7);
+ rb_read(rb, d, 5);
+ rb_write(rb, s, 5);
+ rb_discard(rb, 3);
+ rb_read(rb, d, 3);
+ mt_fok(memcmp(d, "123", 3));
+ rb_clear(rb, 0);
+
+ rb_write(rb, s, 7);
+ rb_read(rb, d, 5);
+ rb_write(rb, s, 5);
+ rb_discard(rb, 2);
+ rb_read(rb, d, 3);
+ mt_fok(memcmp(d, "012", 3));
+ rb_clear(rb, 0);
+
+ rb_write(rb, s, 7);
+ rb_read(rb, d, 5);
+ rb_write(rb, s, 5);
+ rb_discard(rb, 4);
+ rb_read(rb, d, 3);
+ mt_fok(memcmp(d, "234", 3));
+ rb_clear(rb, 0);
+
+ rb_destroy(rb);
+ }
+}
+
static void bad_count_value(void)
{
struct rb *rb;
@@ -520,6 +584,7 @@ int main(void)
mt_run(multithread_flag);
mt_run(nonblocking_flag);
mt_run(singlethread_eagain);
+ mt_run(discard);
#if ENABLE_THREADS
mt_run(multithread_eagain);