diff options
author | Nick Wellnhofer <wellnhofer@aevum.de> | 2020-01-19 00:51:02 +0100 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2020-01-23 08:25:54 -0800 |
commit | b0a4cfa36e99c27dd2b20be8f8888fa7721bad58 (patch) | |
tree | 528ace24d0526b0dd647bcd774f348e677b78a9f /api_test | |
parent | 75b48c5938f5984dbcf79a579d15c9cbd6447d12 (diff) |
Use C string instead of chunk for literal text
Use zero-terminated C strings and a separate length field instead of
cmark_chunks. Literal inline text will now be copied from the parent
block's content buffer, slowing the benchmark down by 10-15%.
The node struct never references memory of other nodes now, fixing #309.
Node accessors don't have to check for delayed creation of C strings,
so parsing and iterating all literals using the public API should
actually be faster than before.
Diffstat (limited to 'api_test')
-rw-r--r-- | api_test/main.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/api_test/main.c b/api_test/main.c index e7fccbd..994ee39 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -243,6 +243,21 @@ static void accessors(test_batch_runner *runner) { cmark_node_free(doc); } +static void free_parent(test_batch_runner *runner) { + static const char markdown[] = "text\n"; + + cmark_node *doc = + cmark_parse_document(markdown, sizeof(markdown) - 1, CMARK_OPT_DEFAULT); + + cmark_node *para = cmark_node_first_child(doc); + cmark_node *text = cmark_node_first_child(para); + cmark_node_unlink(text); + cmark_node_free(doc); + STR_EQ(runner, cmark_node_get_literal(text), "text", + "inline content after freeing parent block"); + cmark_node_free(text); +} + static void node_check(test_batch_runner *runner) { // Construct an incomplete tree. cmark_node *doc = cmark_node_new(CMARK_NODE_DOCUMENT); @@ -381,9 +396,6 @@ static void create_tree(test_batch_runner *runner) { free(html); cmark_node_free(doc); - - // TODO: Test that the contents of an unlinked inline are valid - // after the parent block was destroyed. This doesn't work so far. cmark_node_free(emph); } @@ -1031,6 +1043,7 @@ int main() { version(runner); constructor(runner); accessors(runner); + free_parent(runner); node_check(runner); iterator(runner); iterator_delete(runner); |