spec/memoit_spec.rb in memoit-0.3.0 vs spec/memoit_spec.rb in memoit-0.4.0
- old
+ new
@@ -13,10 +13,26 @@
memoize def bar(*values)
rand
end
+ memoize def baz(pos = nil, hash = {}, kwak: nil)
+ rand
+ end
+
+ memoize def qux(pos = nil, kwak: nil)
+ rand
+ end
+
+ memoize def quux(kwak: nil)
+ rand
+ end
+
+ memoize def corge(hash = {}, kwak: nil)
+ rand
+ end
+
memoize def falsy
foo
false
end
@@ -47,10 +63,28 @@
expect(instance.bar(a, 1, :foo, "bar")).to eq(instance.bar(a, 1, :foo, "bar"))
expect(instance.bar(2)).not_to eq(instance.bar(1))
expect(instance.bar(a, 1, :foo, "bar")).not_to eq(instance.bar(Object.new, 1, :foo, "bar"))
end
+ it "caches results when positional, hash and keyword arguments are used" do
+ a = Object.new
+ expect(instance.baz(a, { hash_key: "hash_value" }, kwak: "kwav")).to eq(instance.baz(a, { hash_key: "hash_value" }, kwak: "kwav"))
+ end
+
+ it "caches results when positional and keyword arguments are used" do
+ a = Object.new
+ expect(instance.qux(a, kwak: "kwav")).to eq(instance.qux(a, kwak: "kwav"))
+ end
+
+ it "caches results when keyword arguments are used" do
+ expect(instance.quux(kwak: "kwav")).to eq(instance.quux(kwak: "kwav"))
+ end
+
+ it "caches results when hash and keyword arguments are used" do
+ expect(instance.corge({ hash_key: "hash_value" }, kwak: "kwav")).to eq(instance.corge({ hash_key: "hash_value" }, kwak: "kwav"))
+ end
+
it "ignores cache when block given" do
expect(instance.foo { }).not_to eq(instance.foo { })
end
it "caches falsy values" do
@@ -75,9 +109,28 @@
Class.new do
name = memoize def blah
end
end
expect(name).to eq(:blah)
+ end
+
+ it "works in a mixin" do
+ mod = Module.new do
+ memoize def cname
+ self.class.name
+ end
+ end
+
+ Foo = Class.new do
+ include mod
+ end
+
+ Bar = Class.new do
+ include mod
+ end
+
+ expect(Foo.new.cname).to eq("Foo")
+ expect(Bar.new.cname).to eq("Bar")
end
end
describe ".memoize_class_method" do
it "caches result" do