Clean up tree array assertions in stack spec
This commit is contained in:
parent
b113dc8b0f
commit
f444a715fd
5 changed files with 29 additions and 46 deletions
|
|
@ -41,6 +41,15 @@ bool operator==(const TSNode &left, const TSNode &right) {
|
|||
return ts_node_eq(left, right);
|
||||
}
|
||||
|
||||
bool operator==(const std::vector<TSTree *> &vec, const TreeArray &array) {
|
||||
if (vec.size() != array.size)
|
||||
return false;
|
||||
for (size_t i = 0; i < array.size; i++)
|
||||
if (array.contents[i] != vec[i])
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
ostream &operator<<(ostream &stream, const TSLength &length) {
|
||||
return stream << "{chars:" << length.chars << ", bytes:" <<
|
||||
length.bytes << ", rows:" << length.rows << ", columns:" << length.columns << "}";
|
||||
|
|
|
|||
|
|
@ -11,5 +11,6 @@ std::ostream &operator<<(std::ostream &stream, const TSTree *tree);
|
|||
std::ostream &operator<<(std::ostream &stream, const TSNode &node);
|
||||
std::ostream &operator<<(std::ostream &stream, const TSLength &length);
|
||||
bool operator==(const TSNode &left, const TSNode &right);
|
||||
bool operator==(const std::vector<TSTree *> &right, const TreeArray &array);
|
||||
|
||||
#endif // HELPERS_TREE_HELPERS_H_
|
||||
|
|
|
|||
|
|
@ -145,9 +145,7 @@ describe("Stack", [&]() {
|
|||
AssertThat(results.size, Equals<size_t>(1));
|
||||
|
||||
StackPopResult result = results.contents[0];
|
||||
AssertThat(result.trees.size, Equals<size_t>(2));
|
||||
AssertThat(result.trees.contents[0], Equals(trees[1]));
|
||||
AssertThat(result.trees.contents[1], Equals(trees[2]));
|
||||
AssertThat(result.trees, Equals(vector<TSTree *>({ trees[1], trees[2] })));
|
||||
AssertThat(*ts_stack_head(stack, 0), Equals<StackEntry>({trees[0], stateA, tree_len}));
|
||||
free_pop_results(&results);
|
||||
|
||||
|
|
@ -158,8 +156,7 @@ describe("Stack", [&]() {
|
|||
AssertThat(results.size, Equals<size_t>(1));
|
||||
|
||||
result = results.contents[0];
|
||||
AssertThat(result.trees.size, Equals<size_t>(1));
|
||||
AssertThat(result.trees.contents[0], Equals(trees[0]));
|
||||
AssertThat(result.trees, Equals(vector<TSTree *>({ trees[0] })));
|
||||
AssertThat(ts_stack_head(stack, 0), Equals<const StackEntry *>(nullptr));
|
||||
|
||||
free_pop_results(&results);
|
||||
|
|
@ -172,10 +169,7 @@ describe("Stack", [&]() {
|
|||
AssertThat(results.size, Equals<size_t>(1));
|
||||
|
||||
StackPopResult result = results.contents[0];
|
||||
AssertThat(result.trees.size, Equals<size_t>(3));
|
||||
AssertThat(result.trees.contents[0], Equals(trees[0]));
|
||||
AssertThat(result.trees.contents[1], Equals(trees[1]));
|
||||
AssertThat(result.trees.contents[2], Equals(trees[2]));
|
||||
AssertThat(result.trees, Equals(vector<TSTree *>({ trees[0], trees[1], trees[2] })));
|
||||
AssertThat(ts_stack_head(stack, 0), Equals<const StackEntry *>(nullptr));
|
||||
|
||||
free_pop_results(&results);
|
||||
|
|
@ -186,10 +180,7 @@ describe("Stack", [&]() {
|
|||
AssertThat(results.size, Equals<size_t>(1));
|
||||
|
||||
StackPopResult result = results.contents[0];
|
||||
AssertThat(result.trees.size, Equals<size_t>(3));
|
||||
AssertThat(result.trees.contents[0], Equals(trees[0]));
|
||||
AssertThat(result.trees.contents[1], Equals(trees[1]));
|
||||
AssertThat(result.trees.contents[2], Equals(trees[2]));
|
||||
AssertThat(result.trees, Equals(vector<TSTree *>({ trees[0], trees[1], trees[2] })));
|
||||
|
||||
free_pop_results(&results);
|
||||
});
|
||||
|
|
@ -386,15 +377,11 @@ describe("Stack", [&]() {
|
|||
AssertThat(results.size, Equals<size_t>(2));
|
||||
StackPopResult pop1 = results.contents[0];
|
||||
AssertThat(pop1.head_index, Equals(0));
|
||||
AssertThat(pop1.trees.size, Equals<size_t>(2));
|
||||
AssertThat(pop1.trees.contents[0], Equals(trees[3]));
|
||||
AssertThat(pop1.trees.contents[1], Equals(trees[6]));
|
||||
AssertThat(pop1.trees, Equals(vector<TSTree *>({ trees[3], trees[6] })));
|
||||
|
||||
StackPopResult pop2 = results.contents[1];
|
||||
AssertThat(pop2.head_index, Equals(1));
|
||||
AssertThat(pop2.trees.size, Equals<size_t>(2));
|
||||
AssertThat(pop2.trees.contents[0], Equals(trees[5]));
|
||||
AssertThat(pop2.trees.contents[1], Equals(trees[6]));
|
||||
AssertThat(pop2.trees, Equals(vector<TSTree *>({ trees[5], trees[6] })));
|
||||
|
||||
AssertThat(ts_stack_head_count(stack), Equals(2));
|
||||
AssertThat(*ts_stack_head(stack, 0), Equals<StackEntry>({trees[2], stateC, tree_len * 3}));
|
||||
|
|
@ -445,15 +432,12 @@ describe("Stack", [&]() {
|
|||
AssertThat(results.size, Equals<size_t>(2));
|
||||
StackPopResult pop1 = results.contents[0];
|
||||
AssertThat(pop1.head_index, Equals(0));
|
||||
AssertThat(pop1.trees.size, Equals<size_t>(2));
|
||||
AssertThat(pop1.trees.contents[0], Equals(trees[6]));
|
||||
AssertThat(pop1.trees.contents[1], Equals(trees[7]));
|
||||
AssertThat(pop1.trees, Equals(vector<TSTree *>({ trees[6], trees[7] })));
|
||||
|
||||
StackPopResult pop2 = results.contents[1];
|
||||
AssertThat(pop2.head_index, Equals(1));
|
||||
AssertThat(pop2.trees.size, Equals<size_t>(2));
|
||||
AssertThat(pop2.trees.contents[0], Equals(trees[6]));
|
||||
AssertThat(pop2.trees.contents[1], Equals(trees[7]));
|
||||
AssertThat(pop2.trees, Equals(vector<TSTree *>({ trees[6], trees[7] })));
|
||||
AssertThat(pop2.trees.contents, Equals(pop1.trees.contents));
|
||||
|
||||
free_pop_results(&results);
|
||||
});
|
||||
|
|
@ -473,9 +457,8 @@ describe("Stack", [&]() {
|
|||
|
||||
AssertThat(results.size, Equals<size_t>(1));
|
||||
StackPopResult pop1 = results.contents[0];
|
||||
AssertThat(pop1.trees.size, Equals<size_t>(3));
|
||||
AssertThat(pop1.head_index, Equals(0));
|
||||
AssertThat(pop1.trees.contents[0], Equals(trees[2]));
|
||||
AssertThat(pop1.trees, Equals(vector<TSTree *>({ trees[2], trees[3], trees[ 6] })));
|
||||
|
||||
free_pop_results(&results);
|
||||
});
|
||||
|
|
@ -494,9 +477,8 @@ describe("Stack", [&]() {
|
|||
|
||||
AssertThat(results.size, Equals<size_t>(1));
|
||||
StackPopResult pop1 = results.contents[0];
|
||||
AssertThat(pop1.trees.size, Equals<size_t>(3));
|
||||
AssertThat(pop1.head_index, Equals(0));
|
||||
AssertThat(pop1.trees.contents[0], Equals(trees[4]));
|
||||
AssertThat(pop1.trees, Equals(vector<TSTree *>({ trees[4], trees[5], trees[6] })))
|
||||
|
||||
free_pop_results(&results);
|
||||
});
|
||||
|
|
@ -548,9 +530,7 @@ describe("Stack", [&]() {
|
|||
StackPopResult pop1 = results.contents[0];
|
||||
AssertThat(ts_stack_top_tree(stack, 0), Equals(trees[3]));
|
||||
AssertThat(pop1.head_index, Equals(0));
|
||||
AssertThat(pop1.trees.size, Equals<size_t>(2));
|
||||
AssertThat(pop1.trees.contents[0], Equals(trees[8]));
|
||||
AssertThat(pop1.trees.contents[1], Equals(trees[9]));
|
||||
AssertThat(pop1.trees, Equals(vector<TSTree *>({ trees[8], trees[9] })))
|
||||
|
||||
StackPopResult pop2 = results.contents[1];
|
||||
AssertThat(ts_stack_top_tree(stack, 1), Equals(trees[5]));
|
||||
|
|
@ -583,26 +563,17 @@ describe("Stack", [&]() {
|
|||
StackPopResult pop1 = results.contents[0];
|
||||
AssertThat(ts_stack_top_tree(stack, 0), Equals(trees[2]));
|
||||
AssertThat(pop1.head_index, Equals(0));
|
||||
AssertThat(pop1.trees.size, Equals<size_t>(3));
|
||||
AssertThat(pop1.trees.contents[0], Equals(trees[3]));
|
||||
AssertThat(pop1.trees.contents[1], Equals(trees[8]));
|
||||
AssertThat(pop1.trees.contents[2], Equals(trees[9]));
|
||||
AssertThat(pop1.trees, Equals(vector<TSTree *>({ trees[3], trees[8], trees[9] })))
|
||||
|
||||
StackPopResult pop2 = results.contents[1];
|
||||
AssertThat(ts_stack_top_tree(stack, 1), Equals(trees[4]));
|
||||
AssertThat(pop2.head_index, Equals(1));
|
||||
AssertThat(pop2.trees.size, Equals<size_t>(3));
|
||||
AssertThat(pop2.trees.contents[0], Equals(trees[5]));
|
||||
AssertThat(pop2.trees.contents[1], Equals(trees[8]));
|
||||
AssertThat(pop2.trees.contents[2], Equals(trees[9]));
|
||||
AssertThat(pop2.trees, Equals(vector<TSTree *>({ trees[5], trees[8], trees[9] })))
|
||||
|
||||
StackPopResult pop3 = results.contents[2];
|
||||
AssertThat(ts_stack_top_tree(stack, 2), Equals(trees[6]));
|
||||
AssertThat(pop3.head_index, Equals(2));
|
||||
AssertThat(pop3.trees.size, Equals<size_t>(3));
|
||||
AssertThat(pop3.trees.contents[0], Equals(trees[7]));
|
||||
AssertThat(pop3.trees.contents[1], Equals(trees[8]));
|
||||
AssertThat(pop3.trees.contents[2], Equals(trees[9]));
|
||||
AssertThat(pop3.trees, Equals(vector<TSTree *>({ trees[7], trees[8], trees[9] })))
|
||||
|
||||
free_pop_results(&results);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ extern "C" {
|
|||
|
||||
#include "tree_sitter/parser.h"
|
||||
#include "runtime/array.h"
|
||||
#include "runtime/tree.h"
|
||||
|
||||
typedef struct Stack Stack;
|
||||
|
||||
|
|
@ -16,8 +17,6 @@ typedef struct {
|
|||
TSLength position;
|
||||
} StackEntry;
|
||||
|
||||
typedef Array(TSTree *) TreeArray;
|
||||
|
||||
typedef struct {
|
||||
TreeArray trees;
|
||||
int head_index;
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ extern "C" {
|
|||
#include <stdbool.h>
|
||||
#include "tree_sitter/parser.h"
|
||||
#include "runtime/length.h"
|
||||
#include "runtime/array.h"
|
||||
|
||||
extern TSStateId TS_TREE_STATE_INDEPENDENT;
|
||||
extern TSStateId TS_TREE_STATE_ERROR;
|
||||
|
|
@ -42,6 +43,8 @@ struct TSTree {
|
|||
bool has_changes : 1;
|
||||
};
|
||||
|
||||
typedef Array(TSTree *) TreeArray;
|
||||
|
||||
TSTree *ts_tree_make_leaf(TSSymbol, TSLength, TSLength, TSSymbolMetadata);
|
||||
TSTree *ts_tree_make_node(TSSymbol, size_t, TSTree **, TSSymbolMetadata);
|
||||
TSTree *ts_tree_make_copy(TSTree *child);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue