memoize 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +6 -1
- data/MANIFEST +1 -0
- data/README +8 -4
- data/lib/memoize.rb +4 -3
- data/test/tc_memoize.rb +28 -1
- metadata +4 -6
data/CHANGES
CHANGED
data/MANIFEST
CHANGED
data/README
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
== Gems Installation
|
13
13
|
ruby test/tc_memoize.rb (optional)
|
14
14
|
ruby memoize.gemspec
|
15
|
-
gem install memoize-
|
15
|
+
gem install memoize-x.y.z.gem # Where 'x.y.z' is the version
|
16
16
|
|
17
17
|
= Synopsis
|
18
18
|
require "memoize"
|
@@ -34,13 +34,17 @@ Memoize::MEMOIZE_VERSION
|
|
34
34
|
Returns the version of this package as a String.
|
35
35
|
|
36
36
|
= Methods
|
37
|
-
Memoize
|
37
|
+
Memoize#memoize(method)
|
38
38
|
Takes a method (symbol) and caches the results of +method+ in a hash table.
|
39
39
|
If you call +method+ again with the same arguments, memoize gives you the
|
40
40
|
value from the table instead of letting the method compute the value again.
|
41
41
|
|
42
|
+
Returns the cache, which you can inspect or manipulate directly if you are
|
43
|
+
so inclined.
|
44
|
+
|
42
45
|
= Acknowledgements
|
43
|
-
Code
|
46
|
+
Code borrowed from Nobu Nakada (ruby-talk:155159).
|
47
|
+
Ideas taken from Brian Buckley and Sean O'Halpin.
|
44
48
|
|
45
49
|
== License
|
46
50
|
Ruby's
|
@@ -51,5 +55,5 @@ Memoize.memoize(method)
|
|
51
55
|
|
52
56
|
= Author
|
53
57
|
Daniel J. Berger
|
54
|
-
djberg96
|
58
|
+
djberg96 at gmail dot com
|
55
59
|
IRC nick: imperator (freenode)
|
data/lib/memoize.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
module Memoize
|
2
|
-
MEMOIZE_VERSION = "1.
|
2
|
+
MEMOIZE_VERSION = "1.1.0"
|
3
3
|
def memoize(name)
|
4
4
|
meth = method(name)
|
5
5
|
cache = {}
|
6
6
|
(class << self; self; end).class_eval do
|
7
7
|
define_method(name) do |*args|
|
8
|
-
cache[args] ||= meth.call(*args)
|
8
|
+
cache.has_key?(args) ? cache[args] : cache[args] ||= meth.call(*args)
|
9
9
|
end
|
10
10
|
end
|
11
|
-
|
11
|
+
cache
|
12
|
+
end
|
12
13
|
end
|
data/test/tc_memoize.rb
CHANGED
@@ -17,18 +17,45 @@ require "memoize"
|
|
17
17
|
class TC_Memoize < Test::Unit::TestCase
|
18
18
|
include Memoize
|
19
19
|
|
20
|
+
def setup
|
21
|
+
@cache1 = nil
|
22
|
+
@cache2 = nil
|
23
|
+
end
|
24
|
+
|
20
25
|
def fib(n)
|
21
26
|
return n if n < 2
|
22
27
|
fib(n-1) + fib(n-2)
|
23
28
|
end
|
24
29
|
|
30
|
+
def factorial(n)
|
31
|
+
f = 1
|
32
|
+
n.downto(2) { |x| f *= x }
|
33
|
+
f
|
34
|
+
end
|
35
|
+
|
25
36
|
def test_version
|
26
|
-
assert_equal("1.
|
37
|
+
assert_equal("1.1.0", Memoize::MEMOIZE_VERSION)
|
27
38
|
end
|
28
39
|
|
29
40
|
def test_memoize
|
30
41
|
assert_respond_to(self, :memoize)
|
42
|
+
assert_nothing_raised{ fib(5) }
|
31
43
|
assert_nothing_raised{ memoize(:fib) }
|
32
44
|
assert_nothing_raised{ fib(50) }
|
33
45
|
end
|
46
|
+
|
47
|
+
# Ensure that a cache is returned, that it's a hash, and that each
|
48
|
+
# memoized method retains its own cache properly.
|
49
|
+
def test_memoize_cache
|
50
|
+
assert_nothing_raised{ @cache1 = self.memoize(:fib) }
|
51
|
+
assert_nothing_raised{ @cache2 = self.memoize(:factorial) }
|
52
|
+
|
53
|
+
assert_nothing_raised{ self.fib(3) }
|
54
|
+
assert_nothing_raised{ self.factorial(3) }
|
55
|
+
|
56
|
+
assert_kind_of(Hash, @cache1)
|
57
|
+
assert_kind_of(Hash, @cache2)
|
58
|
+
|
59
|
+
assert_not_equal(@cache1, @cache2)
|
60
|
+
end
|
34
61
|
end
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.8.
|
2
|
+
rubygems_version: 0.8.10
|
3
3
|
specification_version: 1
|
4
4
|
name: memoize
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date: 2005-
|
6
|
+
version: 1.1.0
|
7
|
+
date: 2005-10-21
|
8
8
|
summary: Speeds up methods at the cost of memory
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -24,15 +24,13 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
24
24
|
version: 0.0.0
|
25
25
|
version:
|
26
26
|
platform: ruby
|
27
|
-
signing_key:
|
28
|
-
cert_chain:
|
29
27
|
authors:
|
30
28
|
- Daniel J. Berger
|
31
29
|
files:
|
32
30
|
- lib/memoize.rb
|
31
|
+
- README
|
33
32
|
- CHANGES
|
34
33
|
- MANIFEST
|
35
|
-
- README
|
36
34
|
- test/tc_memoize.rb
|
37
35
|
test_files:
|
38
36
|
- test/tc_memoize.rb
|