#include "string_test.h"
TEST_CASE("basic_string<char>", "[string][string_char]") { test::test_string<char>::run(); }

void test_compilation_warnings () {
    {
        struct {
            uint64_t a;
            uint64_t b;
        } abc = {};
        auto data = string("\x05\x01\x00\x01") + string((char*)&abc, 16) + string((char*)&abc, 2);
    }

    {
        string str = "andedf";
        string str2 = std::move(str);
    }
    {
        string_view in("123zzz");
        in.find("zzz");
    }
}

TEST_CASE("string synopsis", "[string]") {
    using panda::string;
    string a = "hello, ";
    string b("world!!!", 6);
    string c = a + b;
    REQUIRE(c == "hello, world!");

    //CoW, no copy on assignment or substr
    string copy = a;
    REQUIRE(copy.data() == a.data());
    copy[1] = 'a';
    REQUIRE(a == "hello, ");
    REQUIRE(copy == "hallo, ");


    string sub = a.substr(0, 4);
    REQUIRE(sub.data() == a.data());
}