diff options
Diffstat (limited to 'test/contrained.c')
| -rw-r--r-- | test/contrained.c | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/test/contrained.c b/test/contrained.c new file mode 100644 index 0000000..1af01a8 --- /dev/null +++ b/test/contrained.c @@ -0,0 +1,281 @@ +#include "leven.h" + +#include "log.h" + +DECL_MAT3(no_trace, uint32_t, 0, 0, 0); + +int main(int argc, char **argv) { + log("Constrained edit tests"); + + { + struct Tree a = { + .adj = { .data = &(nid){0}, + .stride = 1, + }, + .len = 1, + }; + + struct Tree b = { + .adj = { + .data = &(nid){0}, + .stride = 1, + }, + .len = 1, + }; + + DECL_MAT_DATA(cost, uint32_t, 2, 2, + 0, 2, + 2, 1, + ); + DECL_MAT(cost_n, uint32_t, 2, 2); + DECL_MAT(cost_f, uint32_t, 2, 2); + DECL_MAT(cost_s, uint32_t, 1, 1); + + constrained_tree_distance( + a, + b, + cost, + cost_n, + cost_f, + cost_s + ); + + if(*imat_uint32_t(cost_n, 1, 1) != 1) { + log("Test Fail"); + return 1; + } + + DECL_MAT(alignment, uint32_t, 2, 2); + uint32_t adj_alignment[2] = {0, 0}; + constrained_tree_alignment( + a, + b, + cost, + cost_n, + cost_f, + cost_s, + adj_alignment, + alignment + ); + } + + { + struct Tree a = { + .adj = { + .data = (nid[]){2, 0}, + .stride = 1, + }, + .len = 2, + }; + + struct Tree b = { + .adj = { + .data = &(nid){0}, + .stride = 1, + }, + .len = 1, + }; + + DECL_MAT_DATA(cost, uint32_t, 3, 2, + 0, 1, 2, + 2, 1, 1, + ); + DECL_MAT(cost_n, uint32_t, 3, 2); + DECL_MAT(cost_f, uint32_t, 3, 2); + DECL_MAT(cost_s, uint32_t, 2, 2); + + constrained_tree_distance( + a, + b, + cost, + cost_n, + cost_f, + cost_s + ); + + if(*imat_uint32_t(cost_n, 1, 1) != 2) { + log("Test Fail"); + return 1; + } + + DECL_MAT(alignment, uint32_t, 3, 2); + uint32_t adj_alignment[2] = {0, 0}; + constrained_tree_alignment( + a, + b, + cost, + cost_n, + cost_f, + cost_s, + adj_alignment, + alignment + ); + } + + { + struct Tree a = { + .adj = { + .data = (nid[]){2, 0}, + .stride = 1, + }, + .len = 2, + }; + + struct Tree b = { + .adj = { + .data = (nid[]){2, 0}, + .stride = 1, + }, + .len = 2, + }; + + DECL_MAT_DATA(cost, uint32_t, 3, 3, + 0, 2, 2, + 2, 0, 2, + 2, 2, 0, + ); + DECL_MAT(cost_n, uint32_t, 3, 3); + DECL_MAT(cost_f, uint32_t, 3, 3); + DECL_MAT(cost_s, uint32_t, 2, 2); + + constrained_tree_distance( + a, + b, + cost, + cost_n, + cost_f, + cost_s + ); + + if(*imat_uint32_t(cost_n, 1, 1) != 0) { + log("Test Fail"); + return 1; + } + + DECL_MAT(alignment, uint32_t, 2, 2); + uint32_t adj_alignment[2] = {0, 0}; + constrained_tree_alignment( + a, + b, + cost, + cost_n, + cost_f, + cost_s, + adj_alignment, + alignment + ); + } + + { + struct Tree a = { + .adj = { + .data = (nid[]){2, 3, 0, 0, 0, 0}, + .stride = 2, + }, + .len = 3, + }; + + struct Tree b = { + .adj = { + .data = (nid[]){2, 0, 3, 4, 0, 0, 0, 0}, + .stride = 2, + }, + .len = 4, + }; + + DECL_MAT_DATA(cost, uint32_t, 4, 5, + 2, 2, 2, 2, + 2, 2, 2, 2, + 2, 0, 2, 2, + 2, 2, 0, 2, + 2, 2, 2, 0, + ); + DECL_MAT(cost_n, uint32_t, 4, 5); + DECL_MAT(cost_f, uint32_t, 4, 5); + DECL_MAT(cost_s, uint32_t, 3, 3); + + constrained_tree_distance( + a, + b, + cost, + cost_n, + cost_f, + cost_s + ); + + if(*imat_uint32_t(cost_n, 1, 1) != 2) { + log("Test Fail\n"); + return 1; + } + + DECL_MAT(alignment, uint32_t, 2, 2); + uint32_t adj_alignment[2] = {0, 0}; + constrained_tree_alignment( + a, + b, + cost, + cost_n, + cost_f, + cost_s, + adj_alignment, + alignment + ); + } + + { + struct Tree a = { + .adj = { + .data = (nid[]){2, 3, 0, 0, 0, 0}, + .stride = 2, + }, + .len = 3, + }; + + struct Tree b = { + .adj = { + .data = (nid[]){2, 3, 0}, + .stride = 1, + }, + .len = 3, + }; + + DECL_MAT_DATA(cost, uint32_t, 4, 4, + 0, 2, 2, 2, + 2, 0, 2, 2, + 2, 2, 0, 2, + 2, 2, 2, 0, + ); + DECL_MAT(cost_n, uint32_t, 4, 4); + DECL_MAT(cost_f, uint32_t, 4, 4); + DECL_MAT(cost_s, uint32_t, 3, 2); + + constrained_tree_distance( + a, + b, + cost, + cost_n, + cost_f, + cost_s + ); + + if(*imat_uint32_t(cost_n, 1, 1) != 4) { + log("Test Fail\n"); + return 1; + } + + DECL_MAT(alignment, uint32_t, 2, 2); + uint32_t adj_alignment[2] = {0, 0}; + constrained_tree_alignment( + a, + b, + cost, + cost_n, + cost_f, + cost_s, + adj_alignment, + alignment + ); + } + + return 0; +} |
