summary refs log tree commit diff stats
path: root/test
diff options
context:
space:
mode:
authorSoniEx2 <endermoneymod@gmail.com>2024-06-09 13:02:25 -0300
committerSoniEx2 <endermoneymod@gmail.com>2024-06-09 13:02:25 -0300
commitca6e4d141484331a25cfa67cf370000b74d7725f (patch)
treec157a393a202044f08b02a35c5e055f3f1ba6243 /test
parent2751039739e5357beb8e858a25e21e2bc0344fe8 (diff)
Add hashmap implementation
Diffstat (limited to 'test')
-rw-r--r--test/bucketmap-tests.cratera35
-rw-r--r--test/defaultbucket.cratera22
2 files changed, 57 insertions, 0 deletions
diff --git a/test/bucketmap-tests.cratera b/test/bucketmap-tests.cratera
new file mode 100644
index 0000000..b2e0aaa
--- /dev/null
+++ b/test/bucketmap-tests.cratera
@@ -0,0 +1,35 @@
+local bucketlib = require "cratera.lib.bucket"
+
+local Bucketable = bucketlib.Bucketable
+local Bucket = bucketlib.Bucket
+local Struct = Struct
+
+local Point = mkstruct(function(_struct, x, y)
+    return {x, y}
+end, {
+    __eq = function(a, b)
+        return a[Struct] == b[Struct] and a[1] == b[1] and a[2] == b[2]
+    end
+})
+
+Point[Bucketable] = {}
+-- FIXME we really need that 'function Point:[Bucketable].bucket(bucket)' syntax...
+local pointbucket = Point[Bucketable]
+
+function pointbucket:bucket(bucket)
+    bucket:[Bucket].put_number(self[1])
+    bucket:[Bucket].put_number(self[2])
+end
+
+local map = bucketlib.BucketingMap()
+
+map:put(Point(0, 1), "hello")
+map:put(Point(2, 3), "cratera")
+map:put(Point(4, 5), "world")
+
+assert(map._buckets[2])
+assert(map._buckets[3])
+assert(map._buckets[4])
+assert(map:get(Point(0, 1)) == "hello")
+assert(map:get(Point(2, 3)) == "cratera")
+assert(map:get(Point(4, 5)) == "world")
diff --git a/test/defaultbucket.cratera b/test/defaultbucket.cratera
new file mode 100644
index 0000000..fd7281e
--- /dev/null
+++ b/test/defaultbucket.cratera
@@ -0,0 +1,22 @@
+local bucketlib = require "cratera.lib.bucket"
+
+local Bucket = bucketlib.Bucket
+local DefaultBucket = bucketlib.DefaultBucket
+
+local function hash_n(n)
+    local bucket = DefaultBucket()
+    bucket:[Bucket].put_number(n)
+    return bucket:[Bucket].finish()
+end
+
+local function hash_s(n)
+    local bucket = DefaultBucket()
+    bucket:[Bucket].put_string(n)
+    return bucket:[Bucket].finish()
+end
+
+assert(hash_n(1) == 1)
+assert(hash_n(2) == 2)
+assert(hash_n(-1) == 1)
+assert(hash_s("") == 0)
+assert(hash_s("h") == string.byte("h")+31)