В принципе эта программа тестирует создание, перемещение, цвет и стиль. На практике мы должны учесть много больше факторов (с учетом отклонений от сценария), как мы это делали при тестировании функции binary_search
Кроме того, мы выясним, что совершенно не обязательно усаживать перед экраном компьютера человека, который отслеживал бы изменения состояния объектов класса Shape
• замедлить работу программы, чтобы за ней мог следить наблюдатель;
• найти такое представление класса Shape
Отметим, что мы еще не тестировали функцию add(Point)
Open_polyline.26.3.6. Поиск предположений, которые не выполняются
Спецификация класса binary_search
Рассмотрим функцию binary_search
[first:last] действительно является последовательностью и что она была упорядочена (см. раздел 26.3.2.2). Однако можем написать функцию, которая выполняет эту проверку.template
bool b2(Iter first, Iter last, const T& value)
{
// проверяем, является ли диапазон [first:last)
// последовательностью:
if (last
// проверяем, является ли последовательность упорядоченной :
for (Iter p = first+1; p
if (*p<*(p–1)) throw Not_ordered();
// все хорошо, вызываем функцию binary_search:
return binary_search(first,last,value);
}
Перечислим причины, по которым функция binary_search
• Условие laststd::list
< (раздел Б.3.2). В общем, на самом деле хорошего способа проверки того, что пара итераторов определяет последовательность, не существует (начинать перемещение с итератора first, надеясь достигнуть итератора last, — не самая хорошая идея).• Просмотр последовательности для проверки того, что ее значения упорядочены, является более затратным, чем выполнение самой функции binary_search
binary_search заключается не в слепом блуждании по последовательности в поисках значения, как это делает функция std::find).Что же мы могли бы сделать? Мы могли бы при тестировании заменить функцию binary_search
b2 (впрочем, только для вызовов функции binary_search с помощью итераторов произвольного доступа). В качестве альтернативы мы могли бы взять у разработчика функции binary_search ее код, чтобы вставить в нее свой фрагмент.template
// содержит псевдокод
bool binary_search (Iter first, Iter last, const T& value)
{
if ( тест включен ) {
if (Iter является итератором произвольного доступа) {
// проверяем, является ли [first:last)