diff options
author | Michał Łyszczek <michal.lyszczek@bofc.pl> | 2018-02-02 20:05:46 +0100 |
---|---|---|
committer | Michał Łyszczek <michal.lyszczek@bofc.pl> | 2018-02-02 20:05:46 +0100 |
commit | c4c9f62adb08b61d82f10a3b348b993155af202f (patch) | |
tree | 687fd3599cd9c26a8660d6588ad50d914aad0044 | |
parent | f4d9899c8d24d87644d4cc0c13c3bba9d8f81bc3 (diff) | |
download | librb-c4c9f62adb08b61d82f10a3b348b993155af202f.tar.gz librb-c4c9f62adb08b61d82f10a3b348b993155af202f.tar.bz2 librb-c4c9f62adb08b61d82f10a3b348b993155af202f.zip |
add: tests to test rb_discard
-rw-r--r-- | rb/tests.c | 65 |
1 files changed, 65 insertions, 0 deletions
@@ -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); |