diff options
| author | Douglas Rumbaugh <dbr4@psu.edu> | 2024-02-05 15:18:33 -0500 |
|---|---|---|
| committer | Douglas Rumbaugh <dbr4@psu.edu> | 2024-02-05 15:18:33 -0500 |
| commit | 0ff3cedf5df9c27bccd3053ce6339e317f87ff76 (patch) | |
| tree | 0ffdeb674cc31d8b285547e86b6939b0899f2113 /tests | |
| parent | db4806d9dd9757273a14e6c3ea92e5a087239145 (diff) | |
| download | dynamic-extension-0ff3cedf5df9c27bccd3053ce6339e317f87ff76.tar.gz | |
BufferView: Adjusted BV to avoid repeated modulus operations
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/mutable_buffer_tests.cpp | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/tests/mutable_buffer_tests.cpp b/tests/mutable_buffer_tests.cpp index 4064412..31c16dc 100644 --- a/tests/mutable_buffer_tests.cpp +++ b/tests/mutable_buffer_tests.cpp @@ -238,6 +238,143 @@ START_TEST(t_truncate) } END_TEST +START_TEST(t_bview_get) +{ + auto buffer = new MutableBuffer<Rec>(50, 100); + + /* insert 75 records and get tail when LWM is exceeded */ + size_t new_head = 0; + Rec rec = {1, 1}; + size_t cnt = 0; + for (size_t i=0; i<75; i++) { + ck_assert_int_eq(buffer->append(rec), 1); + + rec.key++; + rec.value++; + cnt++; + + if (buffer->is_at_low_watermark() && new_head == 0) { + new_head = buffer->get_tail(); + } + } + + ck_assert_int_eq(buffer->get_available_capacity(), 200 - cnt); + + { + /* get a view of the pre-advanced state */ + auto view = buffer->get_buffer_view(); + auto reccnt = view.get_record_count(); + + /* scan the records in the view */ + for (size_t i=0; i<reccnt; i++) { + ck_assert_int_eq(view.get(i)->rec.key, i+1); + } + + /* advance the head */ + buffer->advance_head(new_head); + + /* scan the records in the view again -- should be unchanged */ + for (size_t i=0; i<reccnt; i++) { + ck_assert_int_eq(view.get(i)->rec.key, i+1); + } + } + + { + /* get a new view (should have fewer records) */ + auto view = buffer->get_buffer_view(); + auto reccnt = view.get_record_count(); + + /* verify the scan again */ + for (size_t i=0; i<reccnt; i++) { + ck_assert_int_eq(view.get(i)->rec.key, i + 51); + } + } + + /* insert more records (to trigger a wrap-around) */ + for (size_t i=0; i<75; i++) { + ck_assert_int_eq(buffer->append(rec), 1); + + rec.key++; + rec.value++; + cnt++; + } + + { + /* get a new view (should have fewer records) */ + auto view = buffer->get_buffer_view(); + auto reccnt = view.get_record_count(); + + /* verify the scan again */ + for (size_t i=0; i<reccnt; i++) { + ck_assert_int_eq(view.get(i)->rec.key, i + 51); + } + } + + delete buffer; +} +END_TEST + + +START_TEST(t_bview_delete) +{ + + auto buffer = new MutableBuffer<Rec>(50, 100); + + /* insert 75 records and get tail when LWM is exceeded */ + size_t new_head = 0; + Rec rec = {1, 1}; + size_t cnt = 0; + for (size_t i=0; i<75; i++) { + ck_assert_int_eq(buffer->append(rec), 1); + + rec.key++; + rec.value++; + cnt++; + + if (buffer->is_at_low_watermark() && new_head == 0) { + new_head = buffer->get_tail(); + } + } + + buffer->advance_head(new_head); + + for (size_t i=0; i<75; i++) { + ck_assert_int_eq(buffer->append(rec), 1); + + rec.key++; + rec.value++; + cnt++; + } + + Rec dr1 = {67, 67}; + Rec dr2 = {89, 89}; + Rec dr3 = {103, 103}; + + Rec fdr1 = {5, 5}; + Rec fdr2 = {300, 300}; + { + /* get a new view (should have fewer records) */ + auto view = buffer->get_buffer_view(); + ck_assert_int_eq(view.delete_record(dr1), 1); + ck_assert_int_eq(view.delete_record(dr2), 1); + ck_assert_int_eq(view.delete_record(dr3), 1); + ck_assert_int_eq(view.delete_record(fdr1), 0); + ck_assert_int_eq(view.delete_record(fdr2), 0); + + for (size_t i=0; i<view.get_record_count(); i++) { + if (view.get(i)->rec == dr1 || view.get(i)->rec == dr2 + || view.get(i)->rec == dr3) { + ck_assert_int_eq(view.get(i)->is_deleted(), 1); + } else { + ck_assert_int_eq(view.get(i)->is_deleted(), 0); + } + } + } + + delete buffer; +} +END_TEST + Suite *unit_testing() { @@ -255,6 +392,11 @@ Suite *unit_testing() suite_add_tcase(unit, append); + TCase *view = tcase_create("de::BufferView Testing"); + tcase_add_test(view, t_bview_get); + tcase_add_test(view, t_bview_delete); + + suite_add_tcase(unit, view); TCase *truncate = tcase_create("de::MutableBuffer::truncate Testing"); tcase_add_test(truncate, t_truncate); |