51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2777|回复: 0
打印 上一主题 下一主题

[原创] 随机生成算法测试用例和性能测试

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-9 15:14:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-4-21 00:18 , Processed in 0.062733 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表