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