51Testing软件测试论坛

标题: 随机生成算法测试用例和性能测试 [打印本页]

作者: 小文0111    时间: 2019-4-9 15:14
标题: 随机生成算法测试用例和性能测试

1、生成大量随机数

2、传入函数指针,对不同的排序算法进行统一的性能测试

  1. //main.cpp
  2. #include <iostream>
  3. #include <string>
  4. #include "SortTestHelper.h"

  5. template<typename T>
  6. void SelectSort(T arr[], int n)
  7. {
  8.         //寻找[i,n)区间内的最小值
  9.         for (int i = 0; i < n; i++)
  10.         {
  11.                 int index = i;
  12.                 for (int j = i + 1; j < n; j++)
  13.                 {
  14.                         if (arr[j] < arr[index])
  15.                                 index = j;
  16.                 }
  17.                 if (index != i)
  18.                         std::swap(arr[i], arr[index]);
  19.         }
  20. }

  21. int main()
  22. {
  23.         int n = 100000;
  24.         int* arr1 = SortTestHelper::GenerateRandomArray(n, 1, n);
  25.         SortTestHelper::TestSort("SelectSort", SelectSort, arr1, n);
  26.         SortTestHelper::PrintArr(arr1, n);

  27.         system("pause");
  28.         delete[] arr1;
  29.         return 0;
  30. }
复制代码

3、简单计时进行性能测试

  1. //SortTestHelper.h
  2. #ifndef __SORTTESTHELPER_H
  3. #define __SORTTESTHELPER_H

  4. #include <cstdlib>
  5. #include <ctime>
  6. #include <time.h>
  7. #include <cassert>
  8. #include <iomanip>

  9. namespace SortTestHelper {
  10.     int* GenerateRandomArray(int n, int rangeL, int rangeR)
  11.     {
  12.         assert(rangeL <= rangeR);
  13.         //生成有n个元素的随机数组,每个元素的取值范围为[rangeL,rangeR]
  14.         int* arr = new int[n];
  15.         srand((unsigned int)time(NULL));
  16.         for (int i = 0; i < n; i++)
  17.         {
  18.             arr[i] = rand() % (rangeR - rangeL + 1) + rangeL;
  19.         }
  20.         return arr;
  21.     }

  22.     template<typename T>
  23.     void PrintArr(T arr[], int n)
  24.     {
  25.         for (int i = 0; i < n; i++)
  26.         {
  27.             std::cout << arr[i] << " ";
  28.         }
  29.         std::cout << std::endl;
  30.     }

  31.     template<typename T>
  32.     void TestSort(std::string sortName, void(*sort)(T [], int), T arr[], int n)
  33.     {
  34.         clock_t start = clock();
  35.         sort(arr,n);
  36.         clock_t end = clock();

  37.         assert(IsSorted(arr, n));
  38.         double time = double(end - start) / CLOCKS_PER_SEC;
  39.         std::cout << sortName << ": " << std::setprecision(6) << time << "s" << std::endl;
  40.     }

  41.     template<typename T>
  42.     bool IsSorted(T arr[], int n)
  43.     {
  44.         for (int i = 0; i < n - 1; i++)
  45.         {
  46.             if (arr[i] > arr[i + 1])
  47.                 return false;
  48.         }
  49.         return true;
  50.     }
  51. }

  52. #endif
复制代码







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2