https://github.com/akkartik/mu/blob/main/linux/bootstrap/003trace.test.cc
  1 void test_trace_check_compares() {
  2   trace("test layer") << "foo" << end();
  3   CHECK_TRACE_CONTENTS("test layer: foo");
  4 }
  5 
  6 void test_trace_check_ignores_other_layers() {
  7   trace("test layer 1") << "foo" << end();
  8   trace("test layer 2") << "bar" << end();
  9   CHECK_TRACE_CONTENTS("test layer 1: foo");
 10   CHECK_TRACE_DOESNT_CONTAIN("test layer 2: foo");
 11 }
 12 
 13 void test_trace_check_ignores_leading_whitespace() {
 14   trace("test layer 1") << " foo" << end();
 15   CHECK_EQ(trace_count("test layer 1", /*too little whitespace*/"foo"), 1);
 16   CHECK_EQ(trace_count("test layer 1", /*too much whitespace*/"  foo"), 1);
 17 }
 18 
 19 void test_trace_check_ignores_other_lines() {
 20   trace("test layer 1") << "foo" << end();
 21   trace("test layer 1") << "bar" << end();
 22   CHECK_TRACE_CONTENTS("test layer 1: foo");
 23 }
 24 
 25 void test_trace_check_ignores_other_lines2() {
 26   trace("test layer 1") << "foo" << end();
 27   trace("test layer 1") << "bar" << end();
 28   CHECK_TRACE_CONTENTS("test layer 1: bar");
 29 }
 30 
 31 void test_trace_ignores_trailing_whitespace() {
 32   trace("test layer 1") << "foo\n" << end();
 33   CHECK_TRACE_CONTENTS("test layer 1: foo");
 34 }
 35 
 36 void test_trace_ignores_trailing_whitespace2() {
 37   trace("test layer 1") << "foo " << end();
 38   CHECK_TRACE_CONTENTS("test layer 1: foo");
 39 }
 40 
 41 void test_trace_orders_across_layers() {
 42   trace("test layer 1") << "foo" << end();
 43   trace("test layer 2") << "bar" << end();
 44   trace("test layer 1") << "qux" << end();
 45   CHECK_TRACE_CONTENTS("test layer 1: foo\n"
 46                        "test layer 2: bar\n"
 47                        "test layer 1: qux\n");
 48 }
 49 
 50 void test_trace_supports_count
# Description:  dracut is an event driven initramfs infrastructure. 
# URL:          https://dracut.wiki.kernel.org/
# Maintainer:   Silvino Silva, silvino at bk dot ru
# Depends on:   cryptsetup nbd nfs-utils lvm2 mdadm

name=dracut
version=044
release=2
source=(https://www.kernel.org/pub/linux/utils/boot/$name/$name-$version.tar.xz
dracut.conf README)

build() {
    cd $name-$version

    ./configure --prefix=/usr

    make
    make DESTDIR=$PKG install

    install -m 0644 -D $SRC/dracut.conf $PKG/etc

    mv $PKG/usr/share/man $PKG/usr/
    find $PKG -name "README" | xargs rm

}
>// pending: readable_contents() adds newline if necessary.
74 // pending: raise also prints to stderr. 75 // pending: raise doesn't print to stderr if Hide_errors is set. 76 // pending: warn doesn't print to stderr if Hide_errors is set. 77 // pending: warn doesn't print to stderr if Hide_warnings is set. 78 // pending: raise doesn't have to be saved if Hide_errors is set, just printed. 79 // pending: raise prints to stderr if Trace_stream is NULL. 80 // pending: raise prints to stderr if Trace_stream is NULL even if Hide_errors is set. 81 82 // can't check trace because trace methods call 'split' 83 84 void test_split_returns_at_least_one_elem() { 85 vector<string> result = split("", ","); 86 CHECK_EQ(result.size(), 1); 87 CHECK_EQ(result.at(0), ""); 88 } 89 90 void test_split_returns_entire_input_when_no_delim() { 91 vector<string> result = split("abc", ","); 92 CHECK_EQ(result.size(), 1); 93 CHECK_EQ(result.at(0), "abc"); 94 } 95 96 void test_split_works() { 97 vector<string> result = split("abc,def", ","); 98 CHECK_EQ(result.size(), 2); 99 CHECK_EQ(result.at(0), "abc"); 100 CHECK_EQ(result.at(1), "def"); 101 } 102 103 void test_split_works2() { 104 vector<string> result = split("abc,def,ghi", ","); 105 CHECK_EQ(result.size(), 3); 106 CHECK_EQ(result.at(0), "abc"); 107 CHECK_EQ(result.at(1), "def"); 108 CHECK_EQ(result.at(2), "ghi"); 109 } 110 111 void test_split_handles_multichar_delim() { 112 vector<string> result = split("abc,,def,,ghi", ",,"); 113 CHECK_EQ(result.size(), 3); 114 CHECK_EQ(result.at(0), "abc"); 115 CHECK_EQ(result.at(1), "def"); 116 CHECK_EQ(result.at(2), "ghi"); 117 } 118 119 void test_trim() { 120 CHECK_EQ(trim(""), ""); 121 CHECK_EQ(trim(" "), ""); 122 CHECK_EQ(trim(" "), ""); 123 CHECK_EQ(trim("a"), "a"); 124 CHECK_EQ(trim(" a"), "a"); 125 CHECK_EQ(trim(" a"), "a"); 126 CHECK_EQ(trim(" ab"), "ab"); 127 CHECK_EQ(trim("a "), "a"); 128 CHECK_EQ(trim("a "), "a"); 129 CHECK_EQ(trim("ab "), "ab"); 130 CHECK_EQ(trim(" a "), "a"); 131 CHECK_EQ(trim(" a "), "a"); 132 CHECK_EQ(trim(" ab "), "ab"); 133 }