Программирование. Принципы и практика использования C++ Исправленное издание, стр. 379
if (ln.point(1)!=Point(100,100)) cerr << "Неправильная точка 2";for (int i=0; i<10; ++i) { // смотрим на перемещения объекта ln.move(i+5,i+5); ln.draw();}for (int i=0; i<10; ++i) { // проверяем, возвращается ли объект // в исходное положение ln.move(i–5,i–5); ln.draw();}if (point(0)!=Point(10,10)) cerr << "Неправильная точка 1 после перемещения";if (point(1)!=Point(100,100)) cerr << "Неправильная точка 2 после перемещения";for (int i = 0; i<100; ++i) { // смотрим, правильно ли изменяются // цвета ln.set_color(Color(i*100)); if (ln.color() != Color(i*100)) cerr << "Неправильное значение set_color"; ln.draw();}for (int i = 0; i<100; ++i) { // смотрим, правильно ли изменяется // стиль ln.set_style(Line_style(i*5)); if (ln.style() != Line_style(i*5)) cerr << "Неправильное значение set_style"; ln.draw();}В принципе эта программа тестирует создание, перемещение, цвет и стиль. На практике мы должны учесть много больше факторов (с учетом отклонений от сценария), как мы это делали при тестировании функции
binary_searchКроме того, мы выясним, что совершенно не обязательно усаживать перед экраном компьютера человека, который отслеживал бы изменения состояния объектов класса
Shape• замедлить работу программы, чтобы за ней мог следить наблюдатель;
• найти такое представление класса
ShapeОтметим, что мы еще не тестировали функцию
add(Point)Open_polyline26.3.6. Поиск предположений, которые не выполняются
Спецификация класса
binary_search
Рассмотрим функцию
binary_search[first:last]template<class Iter, class T>bool b2(Iter first, Iter last, const T& value){ // проверяем, является ли диапазон [first:last) // последовательностью: if (last<first) throw Bad_sequence(); // проверяем, является ли последовательность упорядоченной : for (Iter p = first+1; p<last; ++p) if (*p<*(p–1)) throw Not_ordered(); // все хорошо, вызываем функцию binary_search: return binary_search(first,last,value);}Перечислим причины, по которым функция
binary_search• Условие
last<firststd::list<firstlast• Просмотр последовательности для проверки того, что ее значения упорядочены, является более затратным, чем выполнение самой функции
binary_searchbinary_searchstd::findЧто же мы могли бы сделать? Мы могли бы при тестировании заменить функцию
binary_searchb2binary_searchbinary_search