Path: blob/main/contrib/libdiff/test/results_test.c
35066 views
#include <stdio.h>1#include <stdint.h>2#include <string.h>3#include <stdbool.h>4#include <stdlib.h>56#include <arraylist.h>7#include <diff_main.h>89#include <diff_internal.h>10#include <diff_debug.h>1112void test_minus_after_plus(void)13{14struct diff_result *result = malloc(sizeof(struct diff_result));15struct diff_data d_left, d_right;16char *left_data = "a\nb\nc\nd\ne\nm\nn\n";17char *right_data = "a\nb\nj\nk\nl\nm\nn\n";18int i;1920printf("\n--- %s()\n", __func__);2122d_left = (struct diff_data){23.data = left_data,24.len = strlen(left_data),25.root = &d_left,26};27d_right = (struct diff_data){28.data = right_data,29.len = strlen(right_data),30.root = &d_right,31};32*result = (struct diff_result) {33.left = &d_left,34.right = &d_right,35};3637diff_atomize_text_by_line(NULL, result->left);38diff_atomize_text_by_line(NULL, result->right);3940struct diff_state state = {41.result = result,42.recursion_depth_left = 32,43};44diff_data_init_subsection(&state.left, result->left,45result->left->atoms.head,46result->left->atoms.len);47diff_data_init_subsection(&state.right, result->right,48result->right->atoms.head,49result->right->atoms.len);5051/* "same" section */52diff_state_add_chunk(&state, true,53&state.left.atoms.head[0], 2,54&state.right.atoms.head[0], 2);5556/* "plus" section */57diff_state_add_chunk(&state, true,58&state.left.atoms.head[2], 0,59&state.right.atoms.head[2], 3);6061/* "minus" section */62diff_state_add_chunk(&state, true,63&state.left.atoms.head[2], 3,64&state.right.atoms.head[5], 0);6566/* "same" section */67diff_state_add_chunk(&state, true,68&state.left.atoms.head[5], 2,69&state.right.atoms.head[5], 2);7071for (i = 0; i < result->chunks.len; i++) {72struct diff_chunk *c = &result->chunks.head[i];73enum diff_chunk_type t = diff_chunk_type(c);7475printf("[%d] %s lines L%d R%d @L %lld @R %lld\n",76i, (t == CHUNK_MINUS ? "minus" :77(t == CHUNK_PLUS ? "plus" :78(t == CHUNK_SAME ? "same" : "?"))),79c->left_count,80c->right_count,81(long long)(c->left_start ? diff_atom_root_idx(result->left, c->left_start) : -1LL),82(long long)(c->right_start ? diff_atom_root_idx(result->right, c->right_start) : -1LL));83}8485diff_result_free(result);86diff_data_free(&d_left);87diff_data_free(&d_right);88}8990void test_plus_after_plus(void)91{92struct diff_result *result = malloc(sizeof(struct diff_result));93struct diff_data d_left, d_right;94char *left_data = "a\nb\nc\nd\ne\nm\nn\n";95char *right_data = "a\nb\nj\nk\nl\nm\nn\n";96struct diff_chunk *c;9798printf("\n--- %s()\n", __func__);99100d_left = (struct diff_data){101.data = left_data,102.len = strlen(left_data),103.root = &d_left,104};105d_right = (struct diff_data){106.data = right_data,107.len = strlen(right_data),108.root = &d_right,109};110*result = (struct diff_result) {111.left = &d_left,112.right = &d_right,113};114115diff_atomize_text_by_line(NULL, result->left);116diff_atomize_text_by_line(NULL, result->right);117118struct diff_state state = {119.result = result,120.recursion_depth_left = 32,121};122diff_data_init_subsection(&state.left, result->left,123result->left->atoms.head,124result->left->atoms.len);125diff_data_init_subsection(&state.right, result->right,126result->right->atoms.head,127result->right->atoms.len);128129/* "same" section */130diff_state_add_chunk(&state, true,131&state.left.atoms.head[0], 2,132&state.right.atoms.head[0], 2);133134/* "minus" section */135diff_state_add_chunk(&state, true,136&state.left.atoms.head[2], 3,137&state.right.atoms.head[2], 0);138139/* "plus" section */140diff_state_add_chunk(&state, true,141&state.left.atoms.head[5], 0,142&state.right.atoms.head[2], 1);143/* "plus" section */144diff_state_add_chunk(&state, true,145&state.left.atoms.head[5], 0,146&state.right.atoms.head[3], 2);147148/* "same" section */149diff_state_add_chunk(&state, true,150&state.left.atoms.head[5], 2,151&state.right.atoms.head[5], 2);152153ARRAYLIST_FOREACH(c, result->chunks) {154enum diff_chunk_type t = diff_chunk_type(c);155156printf("[%lu] %s lines L%d R%d @L %lld @R %lld\n",157(unsigned long)ARRAYLIST_IDX(c, result->chunks),158(t == CHUNK_MINUS ? "minus" :159(t == CHUNK_PLUS ? "plus" :160(t == CHUNK_SAME ? "same" : "?"))),161c->left_count,162c->right_count,163(long long)(c->left_start ? diff_atom_root_idx(result->left, c->left_start) : -1LL),164(long long)(c->right_start ? diff_atom_root_idx(result->right, c->right_start) : -1LL));165}166167diff_result_free(result);168diff_data_free(&d_left);169diff_data_free(&d_right);170}171172int main(void)173{174test_minus_after_plus();175test_plus_after_plus();176return 0;177}178179180