void test_buffer_fronts_in_sequence_of_push_pop() { BoundedBuffer<int> buffer { 5 }; std::vector<int> frontValues { }, expectedValues { 1, 1, 1, 2, 2, 3, 4, 4, 5 }; buffer.push(1); frontValues.push_back(buffer.front()); buffer.push(2); frontValues.push_back(buffer.front()); buffer.push(3); frontValues.push_back(buffer.front()); buffer.pop(); frontValues.push_back(buffer.front()); buffer.push(4); frontValues.push_back(buffer.front()); buffer.pop(); frontValues.push_back(buffer.front()); buffer.pop(); frontValues.push_back(buffer.front()); buffer.push(5); frontValues.push_back(buffer.front()); buffer.pop(); frontValues.push_back(buffer.front()); ASSERT_EQUAL(expectedValues, frontValues); }
void test_buffer_front_throws_after_push_pop() { BoundedBuffer<int> buffer { 5 }; buffer.push(5); buffer.pop(); ASSERT_THROWS(buffer.front(), std::logic_error); }
void test_buffer_front_gets_first_element_of_pushs() { BoundedBuffer<int> buffer { 5 }; buffer.push(1); buffer.push(2); ASSERT_EQUAL(1, buffer.front()); }
void test_buffer_front_gets_element_of_push() { BoundedBuffer<int> buffer { 5 }; buffer.push(5); ASSERT_EQUAL(5, buffer.front()); }
void test_buffer_wrap_around_behavior_front() { BoundedBuffer<int> buffer { 3 }; std::vector<int> frontValues { }, expectedValues { 1, 1, 2, 2, 2, 3, 4, 4, 5, 5, 5, 6, 7 }; buffer.push(1); frontValues.push_back(buffer.front()); buffer.push(2); frontValues.push_back(buffer.front()); buffer.pop(); frontValues.push_back(buffer.front()); buffer.push(3); frontValues.push_back(buffer.front()); buffer.push(4); frontValues.push_back(buffer.front()); buffer.pop(); frontValues.push_back(buffer.front()); buffer.pop(); frontValues.push_back(buffer.front()); buffer.push(5); frontValues.push_back(buffer.front()); buffer.pop(); frontValues.push_back(buffer.front()); buffer.push(6); frontValues.push_back(buffer.front()); buffer.push(7); frontValues.push_back(buffer.front()); buffer.pop(); frontValues.push_back(buffer.front()); buffer.pop(); frontValues.push_back(buffer.front()); ASSERT_EQUAL(expectedValues, frontValues); }
void test_make_bounded_buffer_from_two_mixed_arguments_first_element_moved() { MemoryOperationCounter expected{1, 0, true}; MemoryOperationCounter lvalue{}; BoundedBuffer<MemoryOperationCounter> buffer = BoundedBuffer<MemoryOperationCounter>::make_buffer(MemoryOperationCounter{}, lvalue); ASSERT_EQUAL(expected, buffer.front()); }
void test_make_bounded_buffer_from_two_rvalue_arguments_first_element_copied() { MemoryOperationCounter expected{0, 1, true}; MemoryOperationCounter lvalue{}; BoundedBuffer<MemoryOperationCounter> buffer = BoundedBuffer<MemoryOperationCounter>::make_buffer(lvalue, MemoryOperationCounter{}); ASSERT_EQUAL(expected, buffer.front()); }
void test_bounded_buffer_constructed_with_const_lvalue_argument_object_copied() { MemoryOperationCounter expected{0, 1, true}; MemoryOperationCounter const insertee{}; BoundedBuffer<MemoryOperationCounter> buffer = BoundedBuffer<MemoryOperationCounter>::make_buffer(insertee); ASSERT_EQUAL(expected, buffer.front()); }
void test_make_bounded_buffer_from_rvalue_argument_object_moved() { MemoryOperationCounter expected{1, 0, true}; BoundedBuffer<MemoryOperationCounter> buffer = BoundedBuffer<MemoryOperationCounter>::make_buffer(MemoryOperationCounter{}); ASSERT_EQUAL(expected, buffer.front()); }