File: cstring_ref.cpp

package info (click to toggle)
boost1.90 1.90.0-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 593,168 kB
  • sloc: cpp: 4,190,642; xml: 196,648; python: 34,618; ansic: 23,145; asm: 5,468; sh: 3,776; makefile: 1,162; perl: 1,020; sql: 728; ruby: 676; yacc: 478; java: 77; lisp: 24; csh: 6
file content (97 lines) | stat: -rw-r--r-- 2,911 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// Copyright (c) 2022 Klemens D. Morgenstern
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)


// Disable autolinking for unit tests.
#if !defined(BOOST_ALL_NO_LIB)
#define BOOST_ALL_NO_LIB 1
#endif // !defined(BOOST_ALL_NO_LIB)

// Test that header file is self-contained.
#include <boost/process/v2/cstring_ref.hpp>

#include <boost/test/unit_test.hpp>

namespace bp2 = boost::process::v2;

template struct bp2::basic_cstring_ref<char, std::char_traits<char>>;

using char_type = bp2::basic_cstring_ref<wchar_t, std::char_traits<wchar_t>>::const_pointer;

BOOST_AUTO_TEST_CASE(cstring_view_test)
{
    auto null = bp2::cstring_ref();
    BOOST_CHECK(null.empty());
    BOOST_CHECK_NE(null.c_str(), nullptr);
    BOOST_CHECK_EQUAL(null.c_str()[0], '\0');
    BOOST_CHECK_EQUAL(null, "");
    auto *c = "foobar";
    bp2::cstring_ref cv = c;

    BOOST_CHECK_EQUAL(cv.c_str(), c);

    std::string s = "barfoo";

    bp2::cstring_ref sv = s;
    BOOST_CHECK(!s.empty());
    BOOST_CHECK_EQUAL(sv.c_str(), s.c_str());

    BOOST_CHECK_EQUAL_COLLECTIONS(s.begin(), s.end(), sv.begin(), sv.end());
    BOOST_CHECK_EQUAL_COLLECTIONS(s.cbegin(), s.cend(), sv.cbegin(), sv.cend());
    BOOST_CHECK_EQUAL_COLLECTIONS(s.rbegin(), s.rend(), sv.rbegin(), sv.rend());
    BOOST_CHECK_EQUAL_COLLECTIONS(s.crbegin(), s.crend(), sv.crbegin(), sv.crend());

    BOOST_CHECK_EQUAL(sv.size(), 6u);
    sv.remove_prefix(1);
    BOOST_CHECK_EQUAL(sv.at(0), 'a');
    BOOST_CHECK_EQUAL(sv.at(4), 'o');
    BOOST_CHECK_THROW(sv.at(5), std::out_of_range);
    BOOST_CHECK_EQUAL(sv.front(), 'a');
    BOOST_CHECK_EQUAL(sv.back(), 'o');

    BOOST_CHECK_EQUAL(sv.length(), 5u);
    BOOST_CHECK_EQUAL(sv.c_str(), s.c_str() + 1);
    BOOST_CHECK_EQUAL(sv.substr(2).c_str(), s.c_str() + 3);

    bp2::string_view ssv = sv;
    BOOST_CHECK_EQUAL(ssv, "arfoo");

    ssv = sv.substr(1, 3);
    BOOST_CHECK_EQUAL(ssv, "rfo");

    sv.swap(null);

    const bp2::cstring_ref cc = null;
    BOOST_CHECK_EQUAL(cc.front(), 'a');
    BOOST_CHECK_EQUAL(cc.back(), 'o');
    BOOST_CHECK_GE(cc.max_size(), cc.size());

    char out[2];
    cc.copy(out, 2, 1);
    BOOST_CHECK_EQUAL(out[0], 'r');
    BOOST_CHECK_EQUAL(out[1], 'f');
    BOOST_CHECK(cc.starts_with('a'));
    BOOST_CHECK(cc.starts_with("arf"));
    BOOST_CHECK(cc == cc);
    BOOST_CHECK(cc == null);
    BOOST_CHECK(!(cc == sv));

    BOOST_CHECK(!(cc != cc));
    BOOST_CHECK(!(cc != null));
    BOOST_CHECK(cc != sv);

    null.clear();
    BOOST_CHECK_EQUAL(null.to_string(), "");
    BOOST_CHECK_EQUAL(null.to_string(std::allocator<char>()), "");

    bp2::cstring_ref av = "aa", bv = "bb";
    BOOST_CHECK_LT(av, bv);
    BOOST_CHECK_GT(bv, av);

    BOOST_CHECK_EQUAL(av.compare(av), 0);
    BOOST_CHECK_LT(av.compare(bv), 0);
    BOOST_CHECK_GT(bv.compare(av), 0);

}