亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

如何測試C++ option類型的正確性

c++
小樊
85
2024-09-07 05:19:54
欄目: 編程語言

要測試 C++ std::optional 類型的正確性,你可以編寫一些測試用例來驗證其行為是否符合預期

  1. 包含必要的頭文件
#include<iostream>
#include<optional>
#include<string>
#include<vector>
#include <stdexcept>
  1. 編寫測試函數

為了簡化測試,我們可以編寫一個輔助函數,該函數接受一個布爾表達式和一個錯誤消息。如果表達式為 false,則拋出一個異常并顯示錯誤消息。

void assertTrue(bool expr, const std::string& msg) {
    if (!expr) {
        throw std::runtime_error("Assertion failed: " + msg);
    }
}
  1. 編寫測試用例

接下來,我們將編寫一些測試用例來驗證 std::optional 的行為。

void testOptional() {
    // 測試默認構造的 optional 是否為空
    std::optional<int> emptyOpt;
    assertTrue(!emptyOpt, "Default constructed optional should be empty");

    // 測試值構造的 optional 是否包含值
    std::optional<int> valueOpt(42);
    assertTrue(valueOpt, "Value constructed optional should not be empty");
    assertTrue(valueOpt.value() == 42, "Value constructed optional should contain the correct value");

    // 測試從值構造的 optional
    std::optional<std::string> strOpt = std::string("Hello");
    assertTrue(strOpt, "Optional constructed from value should not be empty");
    assertTrue(strOpt.value() == "Hello", "Optional constructed from value should contain the correct value");

    // 測試復制構造
    std::optional<int> copiedOpt = valueOpt;
    assertTrue(copiedOpt, "Copied optional should not be empty");
    assertTrue(copiedOpt.value() == 42, "Copied optional should contain the correct value");

    // 測試賦值操作
    emptyOpt = 100;
    assertTrue(emptyOpt, "Assigned optional should not be empty");
    assertTrue(emptyOpt.value() == 100, "Assigned optional should contain the correct value");

    // 測試重置操作
    valueOpt.reset();
    assertTrue(!valueOpt, "Reset optional should be empty");
}
  1. 運行測試

在主函數中調用測試函數,并捕獲任何可能拋出的異常。

int main() {
    try {
        testOptional();
        std::cout << "All tests passed!"<< std::endl;
    } catch (const std::exception& e) {
        std::cerr << "Test failed: " << e.what()<< std::endl;
        return 1;
    }
    return 0;
}
  1. 編譯和運行

使用支持 C++17 或更高版本的編譯器編譯并運行上述代碼。如果所有測試都通過,你將看到 “All tests passed!” 的輸出。如果有任何失敗的測試,你將看到相應的錯誤消息。

請注意,這只是一個簡單的測試示例,實際上你可能需要根據你的需求編寫更多的測試用例來覆蓋更多的場景和邊界情況。

0
都江堰市| 新龙县| 利津县| 新丰县| 仙居县| 崇文区| 三台县| 安徽省| 格尔木市| 信阳市| 宁强县| 南澳县| 克什克腾旗| 肥西县| 益阳市| 遂平县| 丰都县| 曲周县| 黑山县| 兴宁市| 舒兰市| 新郑市| 个旧市| 黔东| 铜川市| 博湖县| 淳化县| 沙坪坝区| 高尔夫| 合作市| 巴塘县| 汕尾市| 东山县| 藁城市| 郁南县| 扎赉特旗| 花莲县| 饶平县| 宽甸| 罗田县| 新乐市|