summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJesper Jensen <jesper@jnsn.dev>2025-10-19 13:53:57 +0200
committerJesper Jensen <jesper@jnsn.dev>2025-10-19 13:54:04 +0200
commit9b33e6879b79905adfa415eba911d7e8b540429f (patch)
treec0ca248df3cb396778ae9ed03b03ba306457b4a6 /test
parent197fd727099d264cbf7c746f752f762dd3618814 (diff)
Add tests
Diffstat (limited to 'test')
-rw-r--r--test/construction.c133
1 files changed, 133 insertions, 0 deletions
diff --git a/test/construction.c b/test/construction.c
new file mode 100644
index 0000000..10a377c
--- /dev/null
+++ b/test/construction.c
@@ -0,0 +1,133 @@
+#include "cad/construction.h"
+
+int main(int argc, char *argv[]) {
+ {
+ 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,
+ });
+
+ 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 *p2 = insert_cmd(&drawing, (struct command){
+ .op = CMD_POINT_CIRCLE_LINE,
+ .hidden = true,
+ .result.type = ETYPE_POINT,
+ .arg1 = c1,
+ .arg2 = xaxis,
+ });
+
+
+ struct element* r2 = insert_cmd(&drawing, (struct command){
+ .op = CMD_VALUE_INPUT,
+ .hidden = true,
+ .result.type = ETYPE_VALUE,
+ });
+
+ struct element *c2 = insert_cmd(&drawing, (struct command){
+ .op = CMD_CIRCLE_CENTER_RADIUS,
+ .hidden = true,
+ .result.type = ETYPE_CIRCLE,
+ .arg1 = p2,
+ .arg2 = r2,
+ });
+
+ struct element *p3 = insert_cmd(&drawing, (struct command){
+ .op = CMD_POINT_CIRCLE_CIRCLE,
+ .hidden = true,
+ .result.type = ETYPE_POINT,
+ .arg1 = c1,
+ .arg2 = c2,
+ });
+
+ execute_drawing(&drawing, (double[]){1, 1});
+
+ assert(p3->point.pos[0] == 0.5 && fabs(p3->point.pos[1] - 0.866025) < 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,
+ });
+
+ 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 *p2 = insert_cmd(&drawing, (struct command){
+ .op = CMD_POINT_CIRCLE_LINE,
+ .hidden = true,
+ .result.type = ETYPE_POINT,
+ .arg1 = c1,
+ .arg2 = xaxis,
+ });
+
+
+ struct element* r2 = insert_cmd(&drawing, (struct command){
+ .op = CMD_VALUE_INPUT,
+ .hidden = true,
+ .result.type = ETYPE_VALUE,
+ });
+
+ struct element *c2 = insert_cmd(&drawing, (struct command){
+ .op = CMD_CIRCLE_CENTER_RADIUS,
+ .hidden = true,
+ .result.type = ETYPE_CIRCLE,
+ .arg1 = p2,
+ .arg2 = r2,
+ });
+
+ struct element *p3 = insert_cmd(&drawing, (struct command){
+ .op = CMD_POINT_CIRCLE_CIRCLE,
+ .hidden = true,
+ .result.type = ETYPE_POINT,
+ .arg1 = c2,
+ .arg2 = c1,
+ });
+
+ execute_drawing(&drawing, (double[]){1, 1});
+
+ assert(p3->point.pos[0] == 0.5 && fabs(p3->point.pos[1] - 0.866025) < 0.001);
+ }
+}