0

Cpp で簡単なプログラムを書きましたが、これをテストする最善の方法がわかりません。Java のような単体テスト用の特定の形式はありますか?

#include <iostream>
#include <sstream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;
static vector<int> getAllFlipLocations(
        vector<int> & pancakesRepresentedByDiameter);

/**
 * Problem statement can be viewed at:
 * http://www.programming-challenges.com/pg.php?page=downloadproblem&probid=110402&format=html
 *
 * The following is a solution for the above problem.
 *
 * @author Quinn Liu (quinnliu@vt.edu)
 */
int main(void) {
    string stackOfPancakes;

    while (getline(cin, stackOfPancakes)) {
        istringstream is(stackOfPancakes);

        vector<int> pancakesRepresentedByDiameter;

        int diameterOfPancake;
        while (is >> diameterOfPancake) {
            pancakesRepresentedByDiameter.push_back(diameterOfPancake);
        }
        reverse(pancakesRepresentedByDiameter.begin(),
                pancakesRepresentedByDiameter.end());

        vector<int> orderOfFlipLocations = getAllFlipLocations(
                pancakesRepresentedByDiameter);

        // first print original stack of pancakes
        cout << stackOfPancakes << endl;

        // now print location within stack to flip pancakes to get a stack
        // of pancakes where the pancake diameters decrease as they move
        // from the bottom to the top
        for (int i = 0; i < orderOfFlipLocations.size(); i++) {
            if (i != 0) {
                cout << ' ';
            }
            cout << orderOfFlipLocations[i];
        }
        cout << endl;
    }
}

/**
 * Return the order of the locations to flip pancakes in the pancake stack.
 */
vector<int> getAllFlipLocations(vector<int> &pancakesRepresentedByDiameter) {
    vector<int> orderOfFlipLocations;

    vector<int>::iterator beginIndex = pancakesRepresentedByDiameter.begin();
    vector<int>::iterator endIndex = pancakesRepresentedByDiameter.end();

    for (int i = 0; i < pancakesRepresentedByDiameter.size(); i++) {
        vector<int>::iterator currentIndex = beginIndex + i;
        vector<int>::iterator maximumIndex = max_element(currentIndex,
                endIndex);

        // iterate through the stack of pancakes
        if (currentIndex != maximumIndex) {

            if (maximumIndex + 1 != endIndex) {
                // adds value of (maximumIndex - beginIndex + 1) to the end of the vector
                orderOfFlipLocations.push_back(maximumIndex - beginIndex + 1);
                reverse(maximumIndex, endIndex);
            }
            orderOfFlipLocations.push_back(i + 1);
            reverse(currentIndex, endIndex);
        }
    }
    orderOfFlipLocations.push_back(0);
    return orderOfFlipLocations;
}
4

1 に答える 1

0

いいえ、すぐに使用できる C++ には単体テストがありません。ただし、最近では多くの IDE がそうしています。ここでは、Visual Studio で単体テストを行う方法を示します。言及する価値のあるフレームワークもいくつかありますが、それらはCppUnitUnitTest++またはGoogle C++ Testing Frameworkです。より具体的なものを探している場合は、トピックに関する古いスレッドをここで確認できます。

于 2013-10-19T22:28:11.440 に答える