Тестирование подпрограмм обработки массивов

Материал из Вики ИТ мехмата ЮФУ
Версия от 10:31, 7 декабря 2016; Ulysses (обсуждение | вклад) (MakeIntArr → Arr)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Предположим, нам следует протестировать функцию MakeOddArr(N), которая создаёт массив из N первых нечётных натуральных чисел. Результирующие тесты должны выглядеть так

        Assert(IntArrsAreEqual(MakeOddArr(0), new integer[0]));
        Assert(IntArrsAreEqual(MakeOddArr(1), Arr(1)));
        Assert(IntArrsAreEqual(MakeOddArr(3), Arr(1, 3, 5)));

Где функция IntArrsAreEqual позволяет поэлементно сравнить два массива: она возвращает истину тогда и только тогда, когда они имеют одинаковую длину и состоят из одних и тех же элементов, расположенных в одном порядке. На занятиях эта функция обычно выдаётся в заготовках тестирующих модулей, но для полноты приведём здесь её реализацию.

        /// Проверяет массивы a, b на равенство и возвращает
        /// истину, если они равны
        function IntArrsAreEqual(a, b: IntArr): boolean; 
        begin
          Assert(a <> nil, 'a is nil');
          Assert(b <> nil, 'b is nil');
          // сравниваем длины
          Result := a.Length = b.Length;
          if Result then
          begin
            // здесь result is true
            var i := 0;
            while (i < a.Length) and (a[i] = b[i]) do
              i += 1;
            // если не дошли до конца, значит какие-то элементы не совпадают
            if i < a.Length then
              Result := false;
          end;
        end;