ofs | hex dump | ascii |
---|
0000 | 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 20 00 00 00 20 08 06 00 00 00 73 7a 7a | .PNG........IHDR.............szz |
0020 | f4 00 00 00 04 73 42 49 54 08 08 08 08 7c 08 64 88 00 00 00 09 70 48 59 73 00 00 00 e5 00 00 00 | .....sBIT....|.d.....pHYs....... |
0040 | e5 01 8f e5 9b 3c 00 00 00 19 74 45 58 74 53 6f 66 74 77 61 72 65 00 77 77 77 2e 69 6e 6b 73 63 | .....<....tEXtSoftware.www.inksc |
0060 | 61 70 65 2e 6f 72 67 9b ee 3c 1a 00 00 04 ec 49 44 41 54 58 85 c5 56 5f 4c 53 67 14 ff dd 4b 7b | ape.org..<.....IDATX..V_LSg...K{ |
0080 | db 62 e1 52 48 a3 09 34 5a 8a cd ad d5 8a a0 c3 38 0c 92 06 a7 d9 d3 26 09 d1 cc 2d 0c 93 a1 d1 | .b.RH..4Z.......8......&...-.... |
00a0 | 2d ee 61 59 58 f0 65 82 0a 51 b7 17 32 9c 71 26 0b 24 3c 18 93 49 1f c0 66 99 33 40 4c 34 44 a5 | -.aYX.e..Q..2.q&.$<..I..f.3@L4D. |
00c0 | 58 25 88 30 d1 d9 5a e0 7a 5b 4b 6b e9 d9 c3 b5 b4 9d 7f d6 22 ba 5f 72 72 bf ef dc ef 9c df ef | X%.0..Z.z[Kk........"._rr....... |
00e0 | 3b f7 7c f9 2e 43 44 00 00 86 61 38 a3 d1 d8 94 95 95 b5 85 e7 f9 3c 8e e3 38 2c 22 c2 e1 70 58 | ;.|..CD...a8..........<..8,"..pX |
0100 | 14 45 9f 24 49 7f 8c 8d 8d 7d 47 44 61 00 00 11 81 e3 38 c1 6c 36 0f 3b 1c 8e 10 bd 65 38 1c 8e | .E.$I....}GDa.....8.l6.;....e8.. |
0120 | 90 d9 6c 1e e6 38 4e 88 6d 5e 69 b1 58 5c 3e 9f ef 6d 73 cf c3 e7 f3 91 c5 62 71 01 50 c2 64 32 | ..l..8N.m^i.X\>..ms......bq.P.d2 |
0140 | 1d 73 3a 9d e1 77 c6 fe 1c 4e a7 33 6c 32 99 8e c1 66 b3 5d 7d d7 e4 31 d8 6c b6 ab 2c cf f3 b9 | .s:..w...N.3l2...f.]}..1.l..,... |
0160 | 8b d9 6c e9 80 e7 f9 5c 76 b1 bb 3d 1d 70 1c c7 b1 ff 17 79 0c 8a c5 4c 36 32 32 82 be 3e 27 ae | ..l....\v..=.p.....y...L622..>'. |
0180 | 5c 71 00 00 56 ad da 08 ab 75 13 d6 ac 59 03 bd 5e ff f6 04 74 74 b4 a3 ab ab 05 eb d6 05 50 5e | \q..V....u...Y..^...tt........P^ |
01a0 | ee 41 6b 2b 81 61 80 5b b7 1c 70 b9 32 d1 d9 a9 83 56 5b 81 c3 87 db a1 d5 6a 93 83 ed 76 fb fd | .Ak+.a.[..p.2....V[......j...v.. |
01c0 | 85 76 b1 28 8a 54 5b fb 01 9d 38 91 4d d1 28 88 e8 d5 d6 d7 c7 d2 b6 6d 46 ea ee 3e 37 1f 6f b7 | .v.(.T[...8.M.(........mF..>7.o. |
01e0 | db ef 2f 58 80 d7 eb a5 ad 5b 4d 34 38 c8 bc 96 38 d1 42 21 d0 fe fd 79 d4 db 7b e1 cd 05 d4 d5 | ../X.....[M48...8.B!...y..{..... |
0200 | 6d a7 a1 a1 64 82 6b d7 40 b3 b3 c9 3e 97 0b 34 33 13 9f 47 22 a0 1d 3b 8c e4 f1 78 c8 6e b7 df | m...d.k.@...>..43..G"..;...x.n.. |
0220 | 5f d0 29 e8 ed bd 00 83 e1 0a ac 56 79 1e 8d 02 7b f6 00 a5 a5 80 c9 04 cc ce ca fe 53 a7 80 d5 | _.)........Vy...{...........S... |
0240 | ab 81 bc 3c c0 ed 96 7d 19 19 c0 f1 e3 63 38 78 b0 1a 00 b0 20 01 6d 6d df a0 a1 61 6a 7e 1e 0c | ...<...}.....c8x......mm...aj~.. |
0260 | 02 e3 e3 f2 78 72 12 e8 ed 95 c7 13 13 00 11 30 37 07 9c 39 13 8f 5f be 1c 58 b9 72 18 7e bf 5f | ....xr.........07..9.._..X.r.~._ |
0280 | 99 b6 80 e9 e9 69 ac 58 e1 87 52 19 f7 69 34 32 59 0c 05 05 f2 d3 eb 4d 26 4d 44 45 c5 63 84 42 | .....i.X..R..i42Y......M&MDE.c.B |
02a0 | 8f 55 69 1f 43 97 cb 05 ab 55 4c f2 b1 2c 70 fa b4 5c f2 ca 4a a0 a4 44 f6 37 36 ca 25 57 a9 80 | .Ui.C....UL..,p..\..J..D.76.%W.. |
02c0 | fa fa e4 3c 65 65 00 91 4f 9d b6 80 a1 a1 01 ac 5d 2b bd e0 df bc 59 b6 44 14 14 00 6d 6d 2f cf | ...<ee..O.......]+....Y.D...mm/. |
02e0 | a3 d1 00 4b 96 84 59 36 18 0c 06 d2 11 20 49 5e e4 e4 a4 13 f1 6a 44 22 88 2a 44 51 f4 44 22 11 | ...K..Y6......I^.....jD".*DQ.D". |
0300 | b3 42 91 5a 31 4a 4a b6 a2 bf bf 0d 16 8b ac 7b 7a 1a f8 fc 43 06 bc 52 09 28 14 c0 fc 53 81 68 | .B.Z1JJ........{z...C..R.(...S.h |
0320 | 06 83 68 06 03 a5 9a 81 4a 03 e4 e7 07 d0 d8 28 7f be d9 59 40 92 f0 54 31 35 35 f5 c3 a1 43 87 | ..h.....J......(...Y@..T155...C. |
0340 | ac cd cd cd ba 54 04 94 95 6d 44 67 6void test_trace_check_compares() {
CHECK_TRACE_CONTENTS("test layer", "");
trace("test layer") << "foo";
CHECK_TRACE_CONTENTS("test layer", "foo");
}
void test_trace_check_filters_layers() {
trace("test layer 1") << "foo";
trace("test layer 2") << "bar";
CHECK_TRACE_CONTENTS("test layer 1", "foo");
}
void test_trace_check_ignores_other_lines() {
trace("test layer 1") << "foo";
trace("test layer 1") << "bar";
CHECK_TRACE_CONTENTS("test layer 1", "foo");
}
void test_trace_check_always_finds_empty_lines() {
CHECK_TRACE_CONTENTS("test layer 1", "");
}
void test_trace_check_treats_empty_layers_as_wildcards() {
trace("test layer 1") << "foo";
CHECK_TRACE_CONTENTS("", "foo");
}
void test_trace_check_multiple_lines_at_once() {
trace("test layer 1") << "foo";
trace("test layer 2") << "bar";
CHECK_TRACE_CONTENTS("", "foobar");
}
void test_trace_check_always_finds_empty_lines2() {
CHECK_TRACE_CONTENTS("test layer 1", "");
}
void test_trace_orders_across_layers() {
trace("test layer 1") << "foo";
trace("test layer 2") << "bar";
trace("test layer 1") << "qux";
CHECK_TRACE_CONTENTS("", "foobarqux");
}
void test_trace_orders_across_layers2() {
trace("test layer 1") << "foo";
trace("test layer 2") << "bar";
trace("test layer 1") << "qux";
CHECK_TRACE_CONTENTS("foobarqux");
}
void test_trace_checks_ordering_spanning_multiple_layers() {
trace("layer1") << "foo";
trace("layer2") << "bar";
trace("layer1") << "qux";
CHECK_TRACE_CONTENTS("layer1: foolayer2: barlayer1: qux");
}
void test_trace_segments_within_layers() {
trace("test layer 1") << "foo";
trace("test layer 2") << "bar";
new_trace_frame("test layer 1");
trace("test layer 1") << "qux";
CHECK_TRACE_CONTENTS("test layer 1", "fooqux");
CHECK_TRACE_CONTENTS("test layer 1", 0, "foo");
CHECK_TRACE_DOESNT_CONTAIN("test layer 1", 1, "foo");
}
void test_trace_checks_ordering_across_layers_and_frames() {
trace("test layer 1") << "foo";
trace("test layer 2") << "bar";
new_trace_frame("test layer 1");
trace("test layer 1") << "qux";
CHECK_TRACE_CONTENTS("test layer 1/0: footest layer 2: bartest layer 1: qux");
CHECK_TRACE_CONTENTS("test layer 1: footest layer 2: bartest layer 1/1: qux");
}
void trace_test_fn(int n) {
if (n == 0) return;
new_trace_frame("foo");
trace("foo") << "before: " << n;
trace_test_fn(n-1);
trace("foo") << "after: " << n;
}
void test_trace_keeps_level_together() {
CHECK_TRACE_CONTENTS("foo", "");
trace_test_fn(4);
CHECK_TRACE_CONTENTS("foo", 2, "before: 3after: 3");
}
void test_trace_supports_multiple_layers() {
trace("test layer 1") << "foo";
trace("test layer 2") << "bar";
trace("test layer 1") << "qux";
CHECK_TRACE_CONTENTS("test layer 1,test layer 2", "foobarqux");
}
void test_trace_supports_hierarchical_layers() {
trace("test layer/a") << "foo";
trace("different layer/c") << "foo 2";
trace("test layer/b") << "bar";
CHECK_TRACE_CONTENTS("test layer/", "foobar");
}
void test_trace_supports_count() {
trace("test layer 1") << "foo";
trace("test layer 1") << "foo";
CHECK_EQ(trace_count("test layer 1", "foo"), 2);
}
void test_trace_supports_count2() {
trace("test layer 1") << "foo";
trace("test layer 1") << "bar";
CHECK_EQ(trace_count("test layer 1"), 2);
}
// pending: DUMP tests
// pending: readable_contents() adds newline if necessary.
// pending: RAISE also prints to stderr.
// pending: RAISE doesn't print to stderr if Hide_warnings is set.
// pending: RAISE doesn't have to be saved if Hide_warnings is set, just printed.
// pending: RAISE prints to stderr if Trace_stream is NULL.
// pending: RAISE prints to stderr if Trace_stream is NULL even if Hide_warnings is set.
// pending: RAISE << ... die() doesn't die if Hide_warnings is set.
// can't check trace because trace methods call 'split'
void test_split_returns_at_least_one_elem() {
vector<string> result = split("", ",");
CHECK_EQ(result.size(), 1);
CHECK_EQ(result[0], "");
}
void test_split_returns_entire_input_when_no_delim() {
vector<string> result = split("abc", ",");
CHECK_EQ(result.size(), 1);
CHECK_EQ(result[0], "abc");
}
void test_split_works() {
vector<string> result = split("abc,def", ",");
CHECK_EQ(result.size(), 2);
CHECK_EQ(result[0], "abc");
CHECK_EQ(result[1], "def");
}
void test_split_works2() {
vector<string> result = split("abc,def,ghi", ",");
CHECK_EQ(result.size(), 3);
CHECK_EQ(result[0], "abc");
CHECK_EQ(result[1], "def");
CHECK_EQ(result[2], "ghi");
}
void test_split_handles_multichar_delim() {
vector<string> result = split("abc,,def,,ghi", ",,");
CHECK_EQ(result.size(), 3);
CHECK_EQ(result[0], "abc");
CHECK_EQ(result[1], "def");
CHECK_EQ(result[2], "ghi");
}
|