成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

測(cè)試數(shù)據(jù)之自動(dòng)生成

tabalt / 3497人閱讀

摘要:最近在學(xué)習(xí)排序算法的時(shí)候,需要利用程序自動(dòng)生成測(cè)試數(shù)據(jù),代碼和思路整理在這篇文章里面。歡迎常來(lái)設(shè)計(jì)思路因?yàn)闀?huì)被很多排序算法調(diào)用,所以,數(shù)據(jù)自動(dòng)生成代碼應(yīng)該放在頭文件中。

最近在學(xué)習(xí)排序算法的時(shí)候,需要利用程序自動(dòng)生成測(cè)試數(shù)據(jù),代碼和思路整理在這篇文章里面。

文章圖片來(lái)源于 GitHub,網(wǎng)速不佳的朋友請(qǐng)點(diǎn)我看原文。

順便軟廣一下個(gè)人技術(shù)小站:https://godbmw.com。歡迎常來(lái) ?(^?^*)

1. 設(shè)計(jì)思路

因?yàn)闀?huì)被很多排序算法調(diào)用,所以,數(shù)據(jù)自動(dòng)生成代碼應(yīng)該放在.h頭文件中。為了防止命名沖突,函數(shù)被封裝在“命名空間”中(代碼中命名空間是: SortTestHelper)。

而對(duì)于排序來(lái)說(shuō),自動(dòng)生成數(shù)據(jù)的類(lèi)型需要有以下幾種:

[a, b]范圍內(nèi)的n個(gè)隨機(jī)數(shù)據(jù),比如:1、2、100、-1...

n個(gè)近乎有序的數(shù)據(jù),比如:1、2、3、7、5、6、4...

n個(gè)近乎相同的數(shù)據(jù),比如:1、1、1、2、2、2、2、2...

除此之外,還需要數(shù)組淺拷貝、打印的函數(shù),以及驗(yàn)證是否排序成功和測(cè)試排序時(shí)間的函數(shù)。

2. 用的知識(shí)點(diǎn)

srand(time(NULL))rand() : 設(shè)立隨機(jī)種子,生成隨機(jī)數(shù)

clock() : 用來(lái)算法運(yùn)行前后的計(jì)算時(shí)鐘周期差值,再除以CLOCKS_PER_SEC 即為運(yùn)行秒數(shù)。

函數(shù)式編程 : 使用函數(shù)指針,方便調(diào)用和測(cè)試排序函數(shù)

其中rand()函數(shù)能生成 0 到MAX_INT之間的隨機(jī)整數(shù)。如果想生成[0, n)之間的整數(shù),需要取余操作:int x = rand() % n;;如果想生成[left, right]之間的整數(shù),需要進(jìn)行偏移:int x = rand() % (right - left + 1) + left;

3. 代碼實(shí)現(xiàn)
//
// Created by GodBMW.com on 2018/9/11.
//

#ifndef BASESORT_SORTHELPER_H
#define BASESORT_SORTHELPER_H

#include 
#include 
#include 
#include 

using namespace std;

namespace SortTestHelper {
    // 生成[left, right]范圍內(nèi)n個(gè)隨機(jī)數(shù)
    template 
    T* generateRandomArray(int n, int left, int right) {
        assert( left <= right );
        T *arr = new T[n];
        srand(time(NULL)); // set random seed
        for(int i = 0; i < n; i++) {
            arr[i] = rand() % (right - left + 1) + left;
        }
        return arr;
    }

    // 生成[0, n)范圍內(nèi)n個(gè)近乎有序的隨機(jī)數(shù)
    template 
    T* generateNearlyOrderedArray(int n, int swap_times) {
        T *arr = new T[n];
        srand(time(NULL));
        // 先生成長(zhǎng)度為n的有序數(shù)組
        for(int i = 0; i < n; i++) {
            arr[i] = i + 1;
        }
        // 隨機(jī)選取其中2個(gè)數(shù)據(jù),交換 swap_times 次
        for(int i = 0; i < swap_times; i++) {
            int pos_x = rand() % n;
            int pos_y = rand() % n;
            swap(arr[pos_x], arr[pos_y]);
        }
        return arr;
    }

    template 
    T* copyArray(T arr[], int length) {
      T* brr = new T[length]; // 注意檢查brr數(shù)組大小
      copy(arr, arr + length, brr);
      return brr;
    }

    template 
    void printArray(T arr[], int length) {
        for(int i = 0; i < length; i++) {
            cout<< arr[i] << " ";
        }
        cout<< endl;
        return;
    }

    template 
    bool isSorted(T arr[], int length) {
        for(int i = 0; i < length-1; i++) {
            if(arr[i] > arr[i + 1]) {
                return false;
            }
        }
        return true;
    }

    // 第三個(gè)參數(shù)是函數(shù)指針,傳入后,可以在本函數(shù)內(nèi)運(yùn)行被傳入的函數(shù)
    template 
    void testSort(T arr[], int length, void(*sort)(T[], int), string name) {
        clock_t startTime = clock();
        sort(arr, length);
        clock_t endTime = clock();

        assert(isSorted(arr, length));
        cout << name << " : " << double(endTime - startTime) / CLOCKS_PER_SEC << " seconds" << endl;
        // endTime - startTime: 時(shí)鐘周期
        return;
    }

}

#endif //BASESORT_SORTHELPER_H

我們沒(méi)有實(shí)現(xiàn)第二部分所說(shuō)的 生成n個(gè)近乎相同的數(shù)據(jù),比如:1、1、1、2、2、2、2、2...。因?yàn)榭梢越柚?generateRandomArray 函數(shù),比如:SortTestHelper::generateRandomArray(10000, 0, 10)。生成[0,10]區(qū)間內(nèi) 10000 個(gè)整數(shù),那么不就是近乎相同的嗎?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/8842.html

相關(guān)文章

  • 軟件測(cè)試肖sir__軟件測(cè)試介紹001測(cè)試分類(lèi)(3)

    摘要:白盒測(cè)試白盒測(cè)試又稱(chēng)結(jié)構(gòu)測(cè)試,透明測(cè)試,邏輯驅(qū)動(dòng)測(cè)試,或基于代碼的測(cè)試。 測(cè)試分類(lèi): 一、按開(kāi)發(fā)階段劃分 1、單元測(cè)試 2、集成測(cè)試 3、系統(tǒng)測(cè)試 4、驗(yàn)收測(cè)試 二...

    szysky 評(píng)論0 收藏0
  • 測(cè)試開(kāi)發(fā)系類(lèi)接口自動(dòng)測(cè)試

    摘要:接口定義代碼角度的接口定義中的接口是一系列方法的聲明,是一些方法特征的集合,一個(gè)接口只有方法的特征沒(méi)有方法的實(shí)現(xiàn),因此這些方法可以在不同的地方被不同的類(lèi)實(shí)現(xiàn),而這些實(shí)現(xiàn)可以具有不同的行為功能。 接口定義 代碼角度的接口Interface 定義:Java中的接口是一系列方法的聲明,是一些方法特征的集合,一個(gè)接口只有方法的特征沒(méi)有方法的實(shí)現(xiàn),因此這些方法可以在不同的地方被不同的類(lèi)實(shí)現(xiàn),而這...

    alexnevsky 評(píng)論0 收藏0
  • Postman接口自動(dòng)測(cè)試——批量執(zhí)行(集合操作)

    摘要:集合定義在接口自動(dòng)化測(cè)試過(guò)程中將一組請(qǐng)求多條請(qǐng)求保存到一起進(jìn)行集中管理。右上角有結(jié)果統(tǒng)計(jì)導(dǎo)出測(cè)試結(jié)果再次執(zhí)行重新發(fā)起集合執(zhí)行。 集合定義:在接口自動(dòng)化測(cè)試過(guò)程中將一...

    tracymac7 評(píng)論0 收藏0
  • 移動(dòng)測(cè)試中游戲和應(yīng)用的不同

    摘要:今天就說(shuō)說(shuō)移動(dòng)測(cè)試中最重要的兩個(gè)方向。自動(dòng)化測(cè)試完全不同于手游自動(dòng)化測(cè)試手機(jī)和手游的開(kāi)發(fā)技術(shù)不同,這導(dǎo)致了兩者的自動(dòng)化測(cè)試技術(shù)是截然不同的。手游和的第二個(gè)玩法不同在于探索性。 隨著智能設(shè)備的普及和移動(dòng)互聯(lián)網(wǎng)的興起,各家互聯(lián)網(wǎng)巨頭紛紛在往移動(dòng)端布局和轉(zhuǎn)型,同時(shí)初創(chuàng)的移動(dòng)互聯(lián)網(wǎng)公司也都盯著這個(gè)市場(chǎng)希望分一杯羹。在這個(gè)大環(huán)境下,互聯(lián)網(wǎng)的重心已經(jīng)慢慢從Web端轉(zhuǎn)向了移動(dòng)端,而移動(dòng)端的軟件測(cè)試也...

    Jinkey 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<