Blame


1 87c31341 2020-10-11 neels #include <stdio.h>
2 87c31341 2020-10-11 neels #include <stdint.h>
3 87c31341 2020-10-11 neels #include <string.h>
4 87c31341 2020-10-11 neels #include <stdbool.h>
5 87c31341 2020-10-11 neels #include <stdlib.h>
6 87c31341 2020-10-11 neels
7 87c31341 2020-10-11 neels #include <arraylist.h>
8 87c31341 2020-10-11 neels #include <diff_main.h>
9 87c31341 2020-10-11 neels
10 87c31341 2020-10-11 neels #include <diff_internal.h>
11 87c31341 2020-10-11 neels #include <diff_debug.h>
12 87c31341 2020-10-11 neels
13 87c31341 2020-10-11 neels void test_minus_after_plus(void)
14 87c31341 2020-10-11 neels {
15 87c31341 2020-10-11 neels struct diff_result *result = malloc(sizeof(struct diff_result));
16 87c31341 2020-10-11 neels char *left_data = "a\nb\nc\nd\ne\nm\nn\n";
17 87c31341 2020-10-11 neels char *right_data = "a\nb\nj\nk\nl\nm\nn\n";
18 87c31341 2020-10-11 neels int i;
19 87c31341 2020-10-11 neels
20 87c31341 2020-10-11 neels printf("\n--- %s()\n", __func__);
21 87c31341 2020-10-11 neels
22 87c31341 2020-10-11 neels *result = (struct diff_result) {
23 87c31341 2020-10-11 neels .left = (struct diff_data){
24 87c31341 2020-10-11 neels .data = left_data,
25 87c31341 2020-10-11 neels .len = strlen(left_data),
26 87c31341 2020-10-11 neels .root = &result->left,
27 87c31341 2020-10-11 neels },
28 87c31341 2020-10-11 neels .right = (struct diff_data){
29 87c31341 2020-10-11 neels .data = right_data,
30 87c31341 2020-10-11 neels .len = strlen(right_data),
31 87c31341 2020-10-11 neels .root = &result->right,
32 87c31341 2020-10-11 neels },
33 87c31341 2020-10-11 neels };
34 87c31341 2020-10-11 neels
35 87c31341 2020-10-11 neels diff_atomize_text_by_line(0, &result->left, &result->right);
36 87c31341 2020-10-11 neels
37 87c31341 2020-10-11 neels struct diff_state state = {
38 87c31341 2020-10-11 neels .result = result,
39 87c31341 2020-10-11 neels .recursion_depth_left = 32,
40 87c31341 2020-10-11 neels };
41 87c31341 2020-10-11 neels diff_data_init_subsection(&state.left, &result->left,
42 87c31341 2020-10-11 neels result->left.atoms.head,
43 87c31341 2020-10-11 neels result->left.atoms.len);
44 87c31341 2020-10-11 neels diff_data_init_subsection(&state.right, &result->right,
45 87c31341 2020-10-11 neels result->right.atoms.head,
46 87c31341 2020-10-11 neels result->right.atoms.len);
47 87c31341 2020-10-11 neels
48 87c31341 2020-10-11 neels /* "same" section */
49 87c31341 2020-10-11 neels diff_state_add_chunk(&state, true,
50 87c31341 2020-10-11 neels &state.left.atoms.head[0], 2,
51 87c31341 2020-10-11 neels &state.right.atoms.head[0], 2);
52 87c31341 2020-10-11 neels
53 87c31341 2020-10-11 neels /* "plus" section */
54 87c31341 2020-10-11 neels diff_state_add_chunk(&state, true,
55 87c31341 2020-10-11 neels &state.left.atoms.head[2], 0,
56 87c31341 2020-10-11 neels &state.right.atoms.head[2], 3);
57 87c31341 2020-10-11 neels
58 87c31341 2020-10-11 neels /* "minus" section */
59 87c31341 2020-10-11 neels diff_state_add_chunk(&state, true,
60 87c31341 2020-10-11 neels &state.left.atoms.head[2], 3,
61 87c31341 2020-10-11 neels &state.right.atoms.head[5], 0);
62 87c31341 2020-10-11 neels
63 87c31341 2020-10-11 neels /* "same" section */
64 87c31341 2020-10-11 neels diff_state_add_chunk(&state, true,
65 87c31341 2020-10-11 neels &state.left.atoms.head[5], 2,
66 87c31341 2020-10-11 neels &state.right.atoms.head[5], 2);
67 87c31341 2020-10-11 neels
68 87c31341 2020-10-11 neels for (i = 0; i < result->chunks.len; i++) {
69 87c31341 2020-10-11 neels struct diff_chunk *c = &result->chunks.head[i];
70 87c31341 2020-10-11 neels enum diff_chunk_type t = diff_chunk_type(c);
71 87c31341 2020-10-11 neels
72 87c31341 2020-10-11 neels printf("[%d] %s lines L%d R%d @L %d @R %d\n",
73 87c31341 2020-10-11 neels i, (t == CHUNK_MINUS ? "minus" :
74 87c31341 2020-10-11 neels (t == CHUNK_PLUS ? "plus" :
75 87c31341 2020-10-11 neels (t == CHUNK_SAME ? "same" : "?"))),
76 87c31341 2020-10-11 neels c->left_count,
77 87c31341 2020-10-11 neels c->right_count,
78 87c31341 2020-10-11 neels c->left_start ? c->left_start->pos : -1,
79 87c31341 2020-10-11 neels c->right_start ? c->right_start->pos : -1);
80 87c31341 2020-10-11 neels }
81 87c31341 2020-10-11 neels
82 87c31341 2020-10-11 neels diff_result_free(result);
83 87c31341 2020-10-11 neels }
84 87c31341 2020-10-11 neels
85 87c31341 2020-10-11 neels void test_plus_after_plus(void)
86 87c31341 2020-10-11 neels {
87 87c31341 2020-10-11 neels struct diff_result *result = malloc(sizeof(struct diff_result));
88 87c31341 2020-10-11 neels char *left_data = "a\nb\nc\nd\ne\nm\nn\n";
89 87c31341 2020-10-11 neels char *right_data = "a\nb\nj\nk\nl\nm\nn\n";
90 87c31341 2020-10-11 neels struct diff_chunk *c;
91 87c31341 2020-10-11 neels
92 87c31341 2020-10-11 neels printf("\n--- %s()\n", __func__);
93 87c31341 2020-10-11 neels
94 87c31341 2020-10-11 neels *result = (struct diff_result) {
95 87c31341 2020-10-11 neels .left = (struct diff_data){
96 87c31341 2020-10-11 neels .data = left_data,
97 87c31341 2020-10-11 neels .len = strlen(left_data),
98 87c31341 2020-10-11 neels .root = &result->left,
99 87c31341 2020-10-11 neels },
100 87c31341 2020-10-11 neels .right = (struct diff_data){
101 87c31341 2020-10-11 neels .data = right_data,
102 87c31341 2020-10-11 neels .len = strlen(right_data),
103 87c31341 2020-10-11 neels .root = &result->right,
104 87c31341 2020-10-11 neels },
105 87c31341 2020-10-11 neels };
106 87c31341 2020-10-11 neels
107 87c31341 2020-10-11 neels diff_atomize_text_by_line(0, &result->left, &result->right);
108 87c31341 2020-10-11 neels
109 87c31341 2020-10-11 neels struct diff_state state = {
110 87c31341 2020-10-11 neels .result = result,
111 87c31341 2020-10-11 neels .recursion_depth_left = 32,
112 87c31341 2020-10-11 neels };
113 87c31341 2020-10-11 neels diff_data_init_subsection(&state.left, &result->left,
114 87c31341 2020-10-11 neels result->left.atoms.head,
115 87c31341 2020-10-11 neels result->left.atoms.len);
116 87c31341 2020-10-11 neels diff_data_init_subsection(&state.right, &result->right,
117 87c31341 2020-10-11 neels result->right.atoms.head,
118 87c31341 2020-10-11 neels result->right.atoms.len);
119 87c31341 2020-10-11 neels
120 87c31341 2020-10-11 neels /* "same" section */
121 87c31341 2020-10-11 neels diff_state_add_chunk(&state, true,
122 87c31341 2020-10-11 neels &state.left.atoms.head[0], 2,
123 87c31341 2020-10-11 neels &state.right.atoms.head[0], 2);
124 87c31341 2020-10-11 neels
125 87c31341 2020-10-11 neels /* "minus" section */
126 87c31341 2020-10-11 neels diff_state_add_chunk(&state, true,
127 87c31341 2020-10-11 neels &state.left.atoms.head[2], 3,
128 87c31341 2020-10-11 neels &state.right.atoms.head[2], 0);
129 87c31341 2020-10-11 neels
130 87c31341 2020-10-11 neels /* "plus" section */
131 87c31341 2020-10-11 neels diff_state_add_chunk(&state, true,
132 87c31341 2020-10-11 neels &state.left.atoms.head[5], 0,
133 87c31341 2020-10-11 neels &state.right.atoms.head[2], 1);
134 87c31341 2020-10-11 neels /* "plus" section */
135 87c31341 2020-10-11 neels diff_state_add_chunk(&state, true,
136 87c31341 2020-10-11 neels &state.left.atoms.head[5], 0,
137 87c31341 2020-10-11 neels &state.right.atoms.head[3], 2);
138 87c31341 2020-10-11 neels
139 87c31341 2020-10-11 neels /* "same" section */
140 87c31341 2020-10-11 neels diff_state_add_chunk(&state, true,
141 87c31341 2020-10-11 neels &state.left.atoms.head[5], 2,
142 87c31341 2020-10-11 neels &state.right.atoms.head[5], 2);
143 87c31341 2020-10-11 neels
144 87c31341 2020-10-11 neels ARRAYLIST_FOREACH(c, result->chunks) {
145 87c31341 2020-10-11 neels enum diff_chunk_type t = diff_chunk_type(c);
146 87c31341 2020-10-11 neels
147 87c31341 2020-10-11 neels printf("[%d] %s lines L%d R%d @L %d @R %d\n",
148 87c31341 2020-10-11 neels ARRAYLIST_IDX(c, result->chunks),
149 87c31341 2020-10-11 neels (t == CHUNK_MINUS ? "minus" :
150 87c31341 2020-10-11 neels (t == CHUNK_PLUS ? "plus" :
151 87c31341 2020-10-11 neels (t == CHUNK_SAME ? "same" : "?"))),
152 87c31341 2020-10-11 neels c->left_count,
153 87c31341 2020-10-11 neels c->right_count,
154 87c31341 2020-10-11 neels c->left_start ? c->left_start->pos : -1,
155 87c31341 2020-10-11 neels c->right_start ? c->right_start->pos : -1);
156 87c31341 2020-10-11 neels }
157 87c31341 2020-10-11 neels
158 87c31341 2020-10-11 neels diff_result_free(result);
159 87c31341 2020-10-11 neels }
160 87c31341 2020-10-11 neels
161 87c31341 2020-10-11 neels int main(void)
162 87c31341 2020-10-11 neels {
163 87c31341 2020-10-11 neels test_minus_after_plus();
164 87c31341 2020-10-11 neels test_plus_after_plus();
165 87c31341 2020-10-11 neels return 0;
166 87c31341 2020-10-11 neels }