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/main.c | |
| 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/main.c')
| -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); | 
