91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

如何測試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
麻江县| 盐城市| 南平市| 夏河县| 穆棱市| 额尔古纳市| 太白县| 巴塘县| 霍州市| 台南县| 莱阳市| 黄陵县| 政和县| 小金县| 木兰县| 蒲江县| 教育| 资溪县| 五寨县| 柘城县| 仁寿县| 商都县| 塔河县| 上栗县| 兰西县| 海门市| 海兴县| 天水市| 泽州县| 富民县| 秭归县| 东海县| 庆阳市| 刚察县| 竹溪县| 云霄县| 策勒县| 宁德市| 大厂| 栾川县| 无极县|