aboutsummaryrefslogtreecommitdiff
path: root/set
diff options
context:
space:
mode:
authorJulian Hurst <julian.hurst92@gmail.com>2022-06-15 10:46:03 +0200
committerJulian Hurst <julian.hurst92@gmail.com>2022-06-15 10:46:03 +0200
commita95fcb445bbc9299eb1d974ce34db8cf24622c10 (patch)
treec88fee737c02c8f8894f2e08c35d85fa9a45dfd7 /set
parentaa288b25a00385e8b034735838f3d5cc512df93f (diff)
downloadilhare-a95fcb445bbc9299eb1d974ce34db8cf24622c10.tar.gz
Externalize modules and add .gitignore
Diffstat (limited to 'set')
-rw-r--r--set/set.ha85
1 files changed, 0 insertions, 85 deletions
diff --git a/set/set.ha b/set/set.ha
deleted file mode 100644
index 504d716..0000000
--- a/set/set.ha
+++ /dev/null
@@ -1,85 +0,0 @@
-export type set = struct {
- items: []size,
-};
-
-export type nosuchitem = !void;
-
-export fn add(s: *set, item: size) bool = {
- for (let i = 0z; i < len(s.items); i += 1) {
- if (s.items[i] == item) {
- return false;
- };
- };
- append(s.items, item);
- return true;
-};
-
-export fn del(s: *set, item: size) bool = {
- match (contains(*s, item)) {
- case let i: size =>
- delete(s.items[i]);
- return true;
- case nosuchitem =>
- return false;
- };
-};
-
-export fn contains(s: set, item: size) (size | nosuchitem) = {
- for (let i = 0z; i < len(s.items); i += 1) {
- if (s.items[i] == item) {
- return i;
- };
- };
- return nosuchitem;
-};
-
-// Clears all items.
-export fn clear(s: *set) void = {
- delete(s.items[..]);
-};
-
-// Free the underlying slice.
-export fn finish(s: *set) void = {
- free(s.items);
-};
-
-@test fn add() void = {
- let s = set {...};
- assert(add(&s, 1z));
- assert(len(s.items) == 1);
- assert(!add(&s, 1z));
- assert(len(s.items) == 1);
-};
-
-@test fn del() void = {
- let s = set {...};
- assert(add(&s, 1z));
- assert(len(s.items) == 1);
- assert(del(&s, 1z));
- assert(len(s.items) == 0);
- assert(!del(&s, 1z));
- assert(len(s.items) == 0);
-};
-
-@test fn contains() void = {
- let s = set {...};
- assert(add(&s, 1z));
- assert(!add(&s, 1z));
- const c = contains(s, 1z);
- assert(c is size);
- assert(c as size == 0);
- assert(add(&s, 2z));
- const c = contains(s, 2z);
- assert(c is size);
- assert(c as size == 1);
-};
-
-@test fn clear() void = {
- let s = set {...};
- assert(add(&s, 1z));
- assert(len(s.items) == 1);
- assert(!add(&s, 1z));
- assert(len(s.items) == 1);
- clear(&s);
- assert(len(s.items) == 0);
-};