#include #include #include #include #include #include #include #define ASSERT_THROWS(expression) \ try { \ (expression); \ assert(false && "Expected exception did not throw: " #expression); \ } catch (...) { \ } int main() { std::cout << "================ Subject's Test ================" << std::endl; { Span sp = Span(5); sp.addNumber(6); sp.addNumber(3); sp.addNumber(17); sp.addNumber(9); sp.addNumber(11); std::cout << sp.shortestSpan() << std::endl; std::cout << sp.longestSpan() << std::endl; } { Span span = Span(); const int array[] = {1, 2, 4, 8, 16, 32, 64, 128}; const int size = sizeof(array) / sizeof(array[0]); std::vector vector = std::vector(array, array + size); std::deque deque = std::deque(array, array + size); std::list list = std::list(array, array + size); ASSERT_THROWS(span.addNumber(1)); ASSERT_THROWS(span.addNumbers(vector.begin(), vector.end())); ASSERT_THROWS(span.addNumbers(deque.begin(), deque.end())); ASSERT_THROWS(span.addNumbers(list.begin(), list.end())); ASSERT_THROWS(span.shortestSpan()); ASSERT_THROWS(span.longestSpan()); } { Span span = Span(8192); std::vector vector(8192); for (size_t i = 0; i < 8192; ++i) vector[i] = i; span.addNumbers(vector.begin(), vector.end()); assert(span.shortestSpan() == 1); assert(span.longestSpan() == 8191); } }