summaryrefslogtreecommitdiff
path: root/Data/Libraries/Penlight/tests/test-map.lua
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-10-30 11:32:16 +0800
committerchai <chaifix@163.com>2021-10-30 11:32:16 +0800
commit42ec7286b2d36a9ba22925f816a17cb1cc2aa5ce (patch)
tree24bc7009457a8d7500f264e89946dc20d069294f /Data/Libraries/Penlight/tests/test-map.lua
parent164885fd98d48703bd771f802d79557b7db97431 (diff)
+ Penlight
Diffstat (limited to 'Data/Libraries/Penlight/tests/test-map.lua')
-rw-r--r--Data/Libraries/Penlight/tests/test-map.lua134
1 files changed, 134 insertions, 0 deletions
diff --git a/Data/Libraries/Penlight/tests/test-map.lua b/Data/Libraries/Penlight/tests/test-map.lua
new file mode 100644
index 0000000..1c0bee6
--- /dev/null
+++ b/Data/Libraries/Penlight/tests/test-map.lua
@@ -0,0 +1,134 @@
+-- testing Map functionality
+
+local test = require 'pl.test'
+local Map = require 'pl.Map'
+local tablex = require 'pl.tablex'
+local Set = require 'pl.Set'
+local utils = require 'pl.utils'
+
+local asserteq = test.asserteq
+local cmp = tablex.compare_no_order
+
+
+
+-- construction, plain
+local m = Map{alpha=1,beta=2,gamma=3}
+
+assert(cmp(
+ m:values(),
+ {1, 2, 3}
+))
+
+assert(cmp(
+ m:keys(),
+ {'alpha', 'beta', 'gamma'}
+))
+
+asserteq(
+ m:items(),
+ {
+ {'alpha', 1},
+ {'beta', 2},
+ {'gamma', 3},
+ }
+)
+
+asserteq (m:getvalues {'alpha','gamma'}, {1,3})
+
+
+
+-- construction, from a set
+local s = Set{'red','orange','green','blue'}
+m = Map(s)
+
+asserteq(
+ m:items(),
+ {
+ {'blue', true},
+ {'green', true},
+ {'orange', true},
+ {'red', true},
+ }
+)
+
+
+-- iter()
+m = Map{alpha=1,beta=2,gamma=3}
+local t = {alpha=1,beta=2,gamma=3}
+for k,v in m:iter() do
+ asserteq(v, t[k])
+ t[k] = nil
+end
+assert(next(t) == nil, "expected the table to be empty by now")
+
+
+
+-- setdefault()
+m = Map{alpha=1,beta=2,gamma=3}
+local v = m:setdefault("charlie", 4)
+asserteq(v, 4)
+v = m:setdefault("alpha", 10)
+asserteq(v, 1)
+asserteq(
+ m:items(),
+ {
+ {'alpha', 1},
+ {'beta', 2},
+ {'charlie', 4},
+ {'gamma', 3},
+ }
+)
+v = m:set("alpha", false)
+v = m:setdefault("alpha", true) -- falsy value should not be altered
+asserteq(false, m:get("alpha"))
+
+
+
+-- len()
+m = Map{alpha=1,beta=2,gamma=3}
+asserteq(3, m:len())
+m = Map{}
+asserteq(0, m:len())
+m:set("charlie", 4)
+asserteq(1, m:len())
+
+
+
+-- set() & get()
+m = Map{}
+m:set("charlie", 4)
+asserteq(4, m:get("charlie"))
+m:set("charlie", 5)
+asserteq(5, m:get("charlie"))
+m:set("charlie", nil)
+asserteq(nil, m:get("charlie"))
+
+
+
+-- getvalues()
+m = Map{alpha=1,beta=2,gamma=3}
+local x = m:getvalues{"gamma", "beta"}
+asserteq({3, 2}, x)
+
+
+
+-- __eq() -- equality
+local m1 = Map{alpha=1,beta=2,gamma=3}
+local m2 = Map{alpha=1,beta=2,gamma=3}
+assert(m1 == m2)
+m1 = Map()
+m2 = Map()
+assert(m1 == m2)
+
+
+
+-- __tostring()
+m = Map()
+asserteq("{}", tostring(m))
+m = Map{alpha=1}
+asserteq("{alpha=1}", tostring(m))
+m = Map{alpha=1,beta=2}
+assert(({ -- test 2 versions, since we cannot rely on order
+ ["{alpha=1,beta=2}"] = true,
+ ["{beta=2,alpha=1}"] = true,
+ })[tostring(m)])