diff options
| author | Jesper Jensen <jesper@jnsn.dev> | 2026-02-10 16:43:41 +0100 |
|---|---|---|
| committer | Jesper Jensen <jesper@jnsn.dev> | 2026-02-10 16:43:41 +0100 |
| commit | 3c4954f1dfe0cda7da2e7f4b7f60eac88ce22fa3 (patch) | |
| tree | 73579688b7dc16c6b50fca5f19955f68d1fa007d /test | |
| parent | a13299362cf02e7e650d4bc60e6d3745c1fea177 (diff) | |
Add some simple test cases
Diffstat (limited to 'test')
| -rw-r--r-- | test/construction.c | 350 |
1 files changed, 344 insertions, 6 deletions
diff --git a/test/construction.c b/test/construction.c index 9ff6a20..2bb58e5 100644 --- a/test/construction.c +++ b/test/construction.c @@ -61,7 +61,7 @@ int main(int argc, char *argv[]) { .arg2 = c2, }); - execute_drawing(&drawing, (double[]){1, 1}); + place_points(&drawing, (double[]){1, 1}); assert(drawing.error == NULL); assert(p3->point.pos[0] == 0.5 && fabs(p3->point.pos[1] - 0.866025) < 0.001); @@ -81,7 +81,7 @@ int main(int argc, char *argv[]) { .hidden = true, .result.type = ETYPE_LINE, }); - + struct element* r1 = insert_cmd(&drawing, (struct command){ .op = CMD_VALUE_INPUT, .hidden = true, @@ -127,7 +127,7 @@ int main(int argc, char *argv[]) { .arg2 = c1, }); - execute_drawing(&drawing, (double[]){1, 1}); + place_points(&drawing, (double[]){1, 1}); assert(drawing.error == NULL); assert(p3->point.pos[0] == 0.5 && fabs(p3->point.pos[1] - (-0.866025)) < 0.001); @@ -147,11 +147,12 @@ int main(int argc, char *argv[]) { .hidden = true, .result.type = ETYPE_LINE, }); - + struct element* rspace = insert_cmd(&drawing, (struct command){ .op = CMD_VALUE_INPUT, .hidden = true, .result.type = ETYPE_VALUE, + .index = 0, }); struct element *cspace = insert_cmd(&drawing, (struct command){ @@ -174,6 +175,7 @@ int main(int argc, char *argv[]) { .op = CMD_VALUE_INPUT, .hidden = true, .result.type = ETYPE_VALUE, + .index = 1, }); struct element *c1 = insert_cmd(&drawing, (struct command){ @@ -188,6 +190,7 @@ int main(int argc, char *argv[]) { .op = CMD_VALUE_INPUT, .hidden = true, .result.type = ETYPE_VALUE, + .index = 2, }); struct element *c2 = insert_cmd(&drawing, (struct command){ @@ -206,9 +209,344 @@ int main(int argc, char *argv[]) { .arg2 = c1, }); - execute_drawing(&drawing, (double[]){2, 1, 4}); + place_points(&drawing, (double[]){2, 1, 4}); - assert(&drawing.error != NULL); + assert(drawing.error != NULL); assert(&drawing.error->result == p3); } + + { + struct drawing drawing = {}; + + struct element* origin = insert_cmd(&drawing, (struct command){ + .op = CMD_ORIGIN, + .hidden = true, + .result.type = ETYPE_POINT, + }); + + struct element* r1 = insert_cmd(&drawing, (struct command){ + .op = CMD_VALUE_INPUT, + .hidden = true, + .result.type = ETYPE_VALUE, + .index = 0, + }); + + struct element *c1 = insert_cmd(&drawing, (struct command){ + .op = CMD_CIRCLE_CENTER_RADIUS, + .hidden = true, + .result.type = ETYPE_CIRCLE, + .arg1 = origin, + .arg2 = r1, + }); + + struct element* r2 = insert_cmd(&drawing, (struct command){ + .op = CMD_VALUE_INPUT, + .hidden = true, + .result.type = ETYPE_VALUE, + .index = 1, + }); + + struct element *c2 = insert_cmd(&drawing, (struct command){ + .op = CMD_CIRCLE_CENTER_RADIUS, + .hidden = true, + .result.type = ETYPE_CIRCLE, + .arg1 = origin, + .arg2 = r2, + }); + + struct element *p = insert_cmd(&drawing, (struct command){ + .op = CMD_POINT_CIRCLE_CIRCLE, + .hidden = true, + .result.type = ETYPE_POINT, + .arg1 = c1, + .arg2 = c2, + }); + + place_points(&drawing, (double[]){1.0, 2.0}); + assert(drawing.error != NULL); + assert(&drawing.error->result == p); + } + + { + struct drawing drawing = {}; + + struct element* origin = insert_cmd(&drawing, (struct command){ + .op = CMD_ORIGIN, + .hidden = true, + .result.type = ETYPE_POINT, + }); + + struct element *xaxis = insert_cmd(&drawing, (struct command){ + .op = CMD_LINE_X, + .hidden = true, + .result.type = ETYPE_LINE, + }); + + struct element* r1 = insert_cmd(&drawing, (struct command){ + .op = CMD_VALUE_INPUT, + .hidden = true, + .result.type = ETYPE_VALUE, + .index = 0, + }); + + struct element *c1 = insert_cmd(&drawing, (struct command){ + .op = CMD_CIRCLE_CENTER_RADIUS, + .hidden = true, + .result.type = ETYPE_CIRCLE, + .arg1 = origin, + .arg2 = r1, + }); + + struct element* spacing = insert_cmd(&drawing, (struct command){ + .op = CMD_VALUE_INPUT, + .hidden = true, + .result.type = ETYPE_VALUE, + .index = 1, + }); + + struct element *spacing_circle = insert_cmd(&drawing, (struct command){ + .op = CMD_CIRCLE_CENTER_RADIUS, + .hidden = true, + .result.type = ETYPE_CIRCLE, + .arg1 = origin, + .arg2 = spacing, + }); + + struct element *center2 = insert_cmd(&drawing, (struct command){ + .op = CMD_POINT_CIRCLE_LINE, + .hidden = true, + .result.type = ETYPE_POINT, + .arg1 = spacing_circle, + .arg2 = xaxis, + }); + + struct element* r2 = insert_cmd(&drawing, (struct command){ + .op = CMD_VALUE_INPUT, + .hidden = true, + .result.type = ETYPE_VALUE, + .index = 2, + }); + + struct element *c2 = insert_cmd(&drawing, (struct command){ + .op = CMD_CIRCLE_CENTER_RADIUS, + .hidden = true, + .result.type = ETYPE_CIRCLE, + .arg1 = center2, + .arg2 = r2, + }); + + struct element *tangent_point = insert_cmd(&drawing, (struct command){ + .op = CMD_POINT_CIRCLE_CIRCLE, + .hidden = true, + .result.type = ETYPE_POINT, + .arg1 = c1, + .arg2 = c2, + }); + + place_points(&drawing, (double[]){1.0, 2.0, 1.0}); + assert(drawing.error == NULL); + assert(fabs(tangent_point->point.pos[0] - 1.0) < 0.001); + assert(fabs(tangent_point->point.pos[1] - 0.0) < 0.001); + } + + { + struct drawing drawing = {}; + + struct element* origin = insert_cmd(&drawing, (struct command){ + .op = CMD_ORIGIN, + .hidden = true, + .result.type = ETYPE_POINT, + }); + + struct element *xaxis = insert_cmd(&drawing, (struct command){ + .op = CMD_LINE_X, + .hidden = true, + .result.type = ETYPE_LINE, + }); + + struct element* r1 = insert_cmd(&drawing, (struct command){ + .op = CMD_VALUE_INPUT, + .hidden = true, + .result.type = ETYPE_VALUE, + .index = 0, + }); + + struct element *c1 = insert_cmd(&drawing, (struct command){ + .op = CMD_CIRCLE_CENTER_RADIUS, + .hidden = true, + .result.type = ETYPE_CIRCLE, + .arg1 = origin, + .arg2 = r1, + }); + + struct element* spacing = insert_cmd(&drawing, (struct command){ + .op = CMD_VALUE_INPUT, + .hidden = true, + .result.type = ETYPE_VALUE, + .index = 1, + }); + + struct element *spacing_circle = insert_cmd(&drawing, (struct command){ + .op = CMD_CIRCLE_CENTER_RADIUS, + .hidden = true, + .result.type = ETYPE_CIRCLE, + .arg1 = origin, + .arg2 = spacing, + }); + + struct element *center2 = insert_cmd(&drawing, (struct command){ + .op = CMD_POINT_CIRCLE_LINE, + .hidden = true, + .result.type = ETYPE_POINT, + .arg1 = spacing_circle, + .arg2 = xaxis, + }); + + struct element* r2 = insert_cmd(&drawing, (struct command){ + .op = CMD_VALUE_INPUT, + .hidden = true, + .result.type = ETYPE_VALUE, + .index = 2, + }); + + struct element *c2 = insert_cmd(&drawing, (struct command){ + .op = CMD_CIRCLE_CENTER_RADIUS, + .hidden = true, + .result.type = ETYPE_CIRCLE, + .arg1 = center2, + .arg2 = r2, + }); + + struct element *p = insert_cmd(&drawing, (struct command){ + .op = CMD_POINT_CIRCLE_CIRCLE, + .hidden = true, + .result.type = ETYPE_POINT, + .arg1 = c1, + .arg2 = c2, + }); + + place_points(&drawing, (double[]){1.0, 5.0, 1.0}); + assert(drawing.error != NULL); + assert(&drawing.error->result == p); + } + + { + struct drawing drawing = {}; + + struct element* origin = insert_cmd(&drawing, (struct command){ + .op = CMD_ORIGIN, + .hidden = true, + .result.type = ETYPE_POINT, + }); + + struct element *xaxis = insert_cmd(&drawing, (struct command){ + .op = CMD_LINE_X, + .hidden = true, + .result.type = ETYPE_LINE, + }); + + struct element* angle = insert_cmd(&drawing, (struct command){ + .op = CMD_VALUE_INPUT, + .hidden = true, + .result.type = ETYPE_VALUE, + .index = 0, + }); + + struct element *yaxis = insert_cmd(&drawing, (struct command){ + .op = CMD_LINE_POINT_LINE_ANGLE, + .hidden = true, + .result.type = ETYPE_LINE, + .arg1 = origin, + .arg2 = xaxis, + .arg3 = angle, + }); + + struct element *intersection = insert_cmd(&drawing, (struct command){ + .op = CMD_POINT_LINE_LINE, + .hidden = true, + .result.type = ETYPE_POINT, + .arg1 = xaxis, + .arg2 = yaxis, + }); + + place_points(&drawing, (double[]){M_PI/2}); + assert(drawing.error == NULL); + assert(fabs(intersection->point.pos[0]) < 0.001); + assert(fabs(intersection->point.pos[1]) < 0.001); + } + + { + struct drawing drawing = {}; + + struct element *xaxis = insert_cmd(&drawing, (struct command){ + .op = CMD_LINE_X, + .hidden = true, + .result.type = ETYPE_LINE, + }); + + struct element* offset1 = insert_cmd(&drawing, (struct command){ + .op = CMD_VALUE_INPUT, + .hidden = true, + .result.type = ETYPE_VALUE, + .index = 0, + }); + + struct element *line_y1 = insert_cmd(&drawing, (struct command){ + .op = CMD_LINE_LINE_DISTANCE_PARALLEL, + .hidden = true, + .result.type = ETYPE_LINE, + .arg1 = xaxis, + .arg2 = offset1, + }); + + struct element* origin = insert_cmd(&drawing, (struct command){ + .op = CMD_ORIGIN, + .hidden = true, + .result.type = ETYPE_POINT, + }); + + struct element* angle = insert_cmd(&drawing, (struct command){ + .op = CMD_VALUE_INPUT, + .hidden = true, + .result.type = ETYPE_VALUE, + .index = 1, + }); + + struct element *yaxis = insert_cmd(&drawing, (struct command){ + .op = CMD_LINE_POINT_LINE_ANGLE, + .hidden = true, + .result.type = ETYPE_LINE, + .arg1 = origin, + .arg2 = xaxis, + .arg3 = angle, + }); + + struct element* offset2 = insert_cmd(&drawing, (struct command){ + .op = CMD_VALUE_INPUT, + .hidden = true, + .result.type = ETYPE_VALUE, + .index = 2, + }); + + struct element *line_x2 = insert_cmd(&drawing, (struct command){ + .op = CMD_LINE_LINE_DISTANCE_PARALLEL, + .hidden = true, + .result.type = ETYPE_LINE, + .arg1 = yaxis, + .arg2 = offset2, + }); + + struct element *intersection = insert_cmd(&drawing, (struct command){ + .op = CMD_POINT_LINE_LINE, + .hidden = true, + .result.type = ETYPE_POINT, + .arg1 = line_y1, + .arg2 = line_x2, + }); + + place_points(&drawing, (double[]){1.0, M_PI/2, 2.0}); + assert(drawing.error == NULL); + assert(fabs(intersection->point.pos[0] - (-2.0)) < 0.001); + assert(fabs(intersection->point.pos[1] - (-1.0)) < 0.001); + } } |
