Mercurial
annotate infinite_canvas/scene_store_test.c @ 281:c57149ad216e default tip
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Tue, 18 Aug 2026 22:18:15 -0700 |
| parents | |
| children |
| rev | line source |
|---|---|
|
281
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1 #include "infinite_canvas/scene_store.h" |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2 |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3 #include <assert.h> |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4 #include <stdio.h> |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
5 #include <string.h> |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
6 #if defined(_WIN32) |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
7 #include <windows.h> |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
8 #else |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
9 #include <unistd.h> |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
10 #endif |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
11 |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
12 int main(void) |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
13 { |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
14 char path[256]; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
15 #if defined(_WIN32) |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
16 snprintf( |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
17 path, |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
18 sizeof(path), |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
19 "C:/temp/infinite-canvas-scene-%lu.zmap", |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
20 (unsigned long)GetCurrentProcessId()); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
21 #else |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
22 snprintf( |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
23 path, |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
24 sizeof(path), |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
25 "/tmp/infinite-canvas-scene-%ld.zmap", |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
26 (long)getpid()); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
27 #endif |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
28 char named_path[CANVAS_SCENE_STORE_PATH_CAPACITY]; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
29 #if defined(_WIN32) |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
30 assert(_putenv_s("XDG_STATE_HOME", "C:/temp/zenbu-scene-store-test") == 0); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
31 #else |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
32 assert(setenv("XDG_STATE_HOME", "/tmp/zenbu-scene-store-test", 1) == 0); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
33 #endif |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
34 assert(Canvas_Scene_Store_Path( |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
35 "workspace-1", named_path, sizeof(named_path))); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
36 assert(strstr(named_path, "workspace-1.zmap")); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
37 assert(!Canvas_Scene_Store_Path( |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
38 "../workspace", named_path, sizeof(named_path))); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
39 Dowa_Arena *p_source_arena = Dowa_Arena_Create(4 * ONE_MEGA_BYTE); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
40 Dowa_Arena *p_loaded_arena = Dowa_Arena_Create(4 * ONE_MEGA_BYTE); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
41 assert(p_source_arena && p_loaded_arena); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
42 Canvas_Scene source; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
43 Canvas_Scene loaded; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
44 Canvas_Camera source_camera; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
45 Canvas_Camera loaded_camera; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
46 Canvas_Scene_Init(&source, p_source_arena); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
47 Canvas_Scene_Init(&loaded, p_loaded_arena); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
48 Canvas_Camera_Init(&source_camera, 1200, 800); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
49 Canvas_Camera_Init(&loaded_camera, 1200, 800); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
50 |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
51 assert(Canvas_Scene_Add( |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
52 &source, CANVAS_ENTITY_TEXT_AREA, (Vector2){42.0f, -17.0f})); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
53 assert(Canvas_Scene_Add( |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
54 &source, CANVAS_ENTITY_CONVERSATION, (Vector2){800.0f, 120.0f})); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
55 Canvas_Entity *p_text = &source.p_entities[0]; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
56 snprintf(p_text->label, sizeof(p_text->label), "Dictation"); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
57 snprintf(p_text->text, sizeof(p_text->text), "persist me"); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
58 p_text->pinned = TRUE; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
59 p_text->pinned_screen_position = (Vector2){30.0f, 40.0f}; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
60 p_text->pinned_screen_size = (Vector2){280.0f, 148.0f}; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
61 Canvas_Entity *p_conversation = &source.p_entities[1]; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
62 p_conversation->active = TRUE; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
63 p_conversation->parked = TRUE; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
64 p_conversation->parked_restore_position = (Vector2){90.0f, 110.0f}; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
65 source.show_grid = TRUE; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
66 source_camera.target = (Vector2){400.0f, -200.0f}; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
67 source_camera.zoom = 1.75f; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
68 |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
69 assert(Canvas_Scene_Store_Save(path, &source, &source_camera)); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
70 assert(Canvas_Scene_Store_Load(path, &loaded, &loaded_camera)); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
71 assert(Dowa_Array_Length(loaded.p_entities) == 2); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
72 assert(strcmp(loaded.p_entities[0].label, "Dictation") == 0); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
73 assert(strcmp(loaded.p_entities[0].text, "persist me") == 0); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
74 assert(loaded.p_entities[0].pinned); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
75 assert(loaded.p_entities[1].active); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
76 assert(loaded.p_entities[1].parked); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
77 assert(loaded.show_grid); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
78 assert(loaded_camera.target.x == 400.0f); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
79 assert(loaded_camera.target.y == -200.0f); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
80 assert(loaded_camera.zoom == 1.75f); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
81 |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
82 FILE *p_file = fopen(path, "r+b"); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
83 assert(p_file); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
84 assert(fseek(p_file, 50, SEEK_SET) == 0); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
85 int byte = fgetc(p_file); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
86 assert(byte != EOF); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
87 assert(fseek(p_file, 50, SEEK_SET) == 0); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
88 assert(fputc(byte ^ 0xff, p_file) != EOF); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
89 fclose(p_file); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
90 assert(!Canvas_Scene_Store_Load(path, &loaded, &loaded_camera)); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
91 assert(Dowa_Array_Length(loaded.p_entities) == 2); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
92 |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
93 remove(path); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
94 Dowa_Arena_Free(p_loaded_arena); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
95 Dowa_Arena_Free(p_source_arena); |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
96 return 0; |
|
c57149ad216e
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
97 } |