multimethod 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/.svn/README.txt +2 -0
  2. data/.svn/empty-file +0 -0
  3. data/.svn/entries +68 -0
  4. data/.svn/format +1 -0
  5. data/.svn/text-base/ChangeLog.svn-base +3 -0
  6. data/.svn/text-base/Manifest.txt.svn-base +54 -0
  7. data/.svn/text-base/README.txt.svn-base +40 -0
  8. data/.svn/text-base/Rakefile.svn-base +132 -0
  9. data/.svn/text-base/Releases.txt.svn-base +7 -0
  10. data/ChangeLog +3 -0
  11. data/Manifest.txt +54 -0
  12. data/README.txt +40 -0
  13. data/Rakefile +132 -0
  14. data/Releases.txt +7 -0
  15. data/examples/.svn/README.txt +2 -0
  16. data/examples/.svn/empty-file +0 -0
  17. data/examples/.svn/entries +22 -0
  18. data/examples/.svn/format +1 -0
  19. data/examples/.svn/props/ex1.rb.svn-work +5 -0
  20. data/examples/ex1.rb +26 -0
  21. data/lib/.svn/README.txt +2 -0
  22. data/lib/.svn/empty-file +0 -0
  23. data/lib/.svn/entries +24 -0
  24. data/lib/.svn/format +1 -0
  25. data/lib/.svn/text-base/multimethod.rb.svn-base +8 -0
  26. data/lib/multimethod.rb +8 -0
  27. data/lib/multimethod/.svn/README.txt +2 -0
  28. data/lib/multimethod/.svn/empty-file +0 -0
  29. data/lib/multimethod/.svn/entries +53 -0
  30. data/lib/multimethod/.svn/format +1 -0
  31. data/lib/multimethod/.svn/text-base/core_extensions.rb.svn-base +38 -0
  32. data/lib/multimethod/.svn/text-base/method.rb.svn-base +232 -0
  33. data/lib/multimethod/.svn/text-base/multimethod.rb.svn-base +171 -0
  34. data/lib/multimethod/.svn/text-base/parameter.rb.svn-base +64 -0
  35. data/lib/multimethod/.svn/text-base/table.rb.svn-base +99 -0
  36. data/lib/multimethod/core_extensions.rb +38 -0
  37. data/lib/multimethod/method.rb +232 -0
  38. data/lib/multimethod/multimethod.rb +171 -0
  39. data/lib/multimethod/parameter.rb +64 -0
  40. data/lib/multimethod/table.rb +99 -0
  41. data/test/.svn/README.txt +2 -0
  42. data/test/.svn/empty-file +0 -0
  43. data/test/.svn/entries +53 -0
  44. data/test/.svn/format +1 -0
  45. data/test/.svn/text-base/method_test.rb.svn-base +89 -0
  46. data/test/.svn/text-base/multimethod_test.rb.svn-base +92 -0
  47. data/test/.svn/text-base/parameter_test.rb.svn-base +31 -0
  48. data/test/.svn/text-base/test_base.rb.svn-base +25 -0
  49. data/test/.svn/text-base/usage_test.rb.svn-base +146 -0
  50. data/test/method_test.rb +89 -0
  51. data/test/multimethod_test.rb +92 -0
  52. data/test/parameter_test.rb +31 -0
  53. data/test/test_base.rb +25 -0
  54. data/test/usage_test.rb +146 -0
  55. metadata +108 -0
@@ -0,0 +1,31 @@
1
+ require 'test_base'
2
+
3
+ module Multimethod
4
+
5
+ class ParameterTest < TestBase
6
+
7
+ class A < Object; end
8
+ class B < A; end
9
+ class C < Object; end
10
+ class D < B; end
11
+
12
+ def setup
13
+ super
14
+ end
15
+
16
+ def test_score
17
+ pA = Parameter.new(:a, A)
18
+ assert_equal 0, pA.score(A)
19
+ assert_equal 1, pA.score(B)
20
+ assert_equal nil, pA.score(C)
21
+ assert_equal 2, pA.score(D)
22
+
23
+ pB = Parameter.new(:b, B)
24
+ assert_equal nil, pB.score(A)
25
+ assert_equal 0, pB.score(B)
26
+ assert_equal nil, pB.score(C)
27
+ assert_equal 1, pB.score(D)
28
+ end
29
+ end # class
30
+
31
+ end # module
@@ -0,0 +1,25 @@
1
+ require 'test/unit'
2
+ require 'multimethod'
3
+
4
+ module Multimethod
5
+
6
+ class TestBase < Test::Unit::TestCase
7
+ def setup
8
+ super
9
+ end
10
+
11
+ # Avoid "No test were specified" error.
12
+ def test_foo
13
+ assert true
14
+ end
15
+
16
+ # Helpers.
17
+ def assert_equal_float(x, y, eps = 1.0e-8)
18
+ d = (x * eps).abs
19
+ assert (x - d) <= y
20
+ assert y <= (x + d)
21
+ end
22
+
23
+ end # class
24
+
25
+ end # module
@@ -0,0 +1,146 @@
1
+ require 'test_base'
2
+
3
+
4
+ class A < Object
5
+ multimethod %q{
6
+ def foo(x)
7
+ x = "A#foo(x) : (#{x.class.name})"
8
+ x
9
+ end
10
+ }
11
+
12
+ multimethod %q{
13
+ def foo(A x)
14
+ x = "A#foo(A x) : (#{x.class.name})"
15
+ x
16
+ end
17
+ }
18
+
19
+ multimethod %q{
20
+ def foo(B x)
21
+ x = "A#foo(B x) : (#{x.class.name})"
22
+ x
23
+ end
24
+ }
25
+
26
+ end
27
+
28
+ class B < A
29
+ multimethod %q{
30
+ def foo(B x)
31
+ x = "B#foo(B x) : (#{x.class.name})"
32
+ x
33
+ end
34
+ }
35
+
36
+ multimethod %q{
37
+ def foo(Comparable x)
38
+ x = "B#foo(Comparable x) : (#{x.class.name})"
39
+ x
40
+ end
41
+ }
42
+
43
+
44
+ end
45
+
46
+ class C < Object
47
+ include Comparable
48
+ end
49
+
50
+ class D < B
51
+ # Variadic
52
+ multimethod %q{
53
+ def bar(x)
54
+ x = "D#bar(x) : (#{x.class.name})"
55
+ x
56
+ end
57
+ }
58
+
59
+ multimethod %q{
60
+ def bar(*rest)
61
+ x = "D#bar(*rest) : (#{rest.inspect})"
62
+ x
63
+ end
64
+ }
65
+
66
+ multimethod %q{
67
+ def bar(x, y)
68
+ x = "D#bar(x, y) : (#{x.class.name}, #{y.class.name})"
69
+ x
70
+ end
71
+ }
72
+
73
+ multimethod %q{
74
+ def bar(x, y, A a)
75
+ x = "D#bar(x, y, A a) : (#{x.class.name}, #{y.class.name}, #{a.class.name})"
76
+ x
77
+ end
78
+ }
79
+
80
+ multimethod %q{
81
+ def bar(x, y, *rest)
82
+ x = "D#bar(x, y, *rest) : (#{x.class.name}, #{y.class.name}, #{rest.inspect})"
83
+ x
84
+ end
85
+ }
86
+
87
+ end # class D
88
+
89
+ class E < A
90
+ end
91
+
92
+
93
+ module Multimethod
94
+
95
+ class UsageTest < TestBase
96
+
97
+ def setup
98
+ super
99
+ end
100
+
101
+ def test_call
102
+ a = A.new
103
+ b = B.new
104
+ c = C.new
105
+ d = D.new
106
+ e = E.new
107
+
108
+ assert_equal 'A#foo(x) : (Fixnum)' , a.foo(1)
109
+ assert_equal 'A#foo(A x) : (A)' , a.foo(a)
110
+ assert_equal 'A#foo(B x) : (B)' , a.foo(b)
111
+ assert_equal 'A#foo(x) : (C)' , a.foo(c)
112
+ assert_equal 'A#foo(B x) : (D)' , a.foo(d)
113
+ assert_equal 'A#foo(A x) : (E)' , a.foo(e)
114
+
115
+ assert_equal 'A#foo(x) : (Symbol)' , b.foo(:x)
116
+ assert_equal 'B#foo(Comparable x) : (Fixnum)' , b.foo(1)
117
+ assert_equal 'A#foo(A x) : (A)' , b.foo(a)
118
+ assert_equal 'B#foo(B x) : (B)' , b.foo(b)
119
+ assert_equal 'B#foo(Comparable x) : (C)' , b.foo(c)
120
+ assert_equal 'B#foo(B x) : (D)' , b.foo(d)
121
+ assert_equal 'A#foo(A x) : (E)' , b.foo(e)
122
+ end
123
+
124
+ def test_variadic
125
+ a = A.new
126
+ d = D.new
127
+
128
+ assert_equal 'D#bar(*rest) : ([])',
129
+ d.bar()
130
+
131
+ assert_equal 'D#bar(x) : (Fixnum)',
132
+ d.bar(1)
133
+
134
+ assert_equal 'D#bar(x, y) : (Fixnum, String)' ,
135
+ d.bar(1, 'a')
136
+
137
+ assert_equal 'D#bar(x, y, A a) : (Fixnum, String, A)' ,
138
+ d.bar(1, 'a', a)
139
+
140
+ assert_equal 'D#bar(x, y, *rest) : (Fixnum, String, [3])' ,
141
+ d.bar(1, 'a', 3)
142
+ end
143
+
144
+ end # class
145
+
146
+ end # module
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.0
3
+ specification_version: 1
4
+ name: multimethod
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.0.1
7
+ date: 2006-11-21 00:00:00 -05:00
8
+ summary: "Supports Multimethod dispatching. For more details, see: http://multimethod.rubyforge.org/files/lib/multimethod_rb.html http://multimethod.rubyforge.org/files/README.txt http://multimethod.rubyforge.org/"
9
+ require_paths:
10
+ - lib
11
+ - test
12
+ email: ruby-multimethod@umleta.com
13
+ homepage: http://rubyforge.org/projects/multimethod
14
+ rubyforge_project: multimethod
15
+ description: "Supports Multimethod dispatching. For more details, see: http://multimethod.rubyforge.org/files/lib/multimethod_rb.html http://multimethod.rubyforge.org/files/README.txt http://multimethod.rubyforge.org/"
16
+ autorequire:
17
+ default_executable:
18
+ bindir: bin
19
+ has_rdoc: true
20
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
21
+ requirements:
22
+ - - ">"
23
+ - !ruby/object:Gem::Version
24
+ version: 0.0.0
25
+ version:
26
+ platform: ruby
27
+ signing_key:
28
+ cert_chain:
29
+ post_install_message:
30
+ authors:
31
+ - Kurt Stephens
32
+ files:
33
+ - ./.svn/README.txt
34
+ - ./.svn/empty-file
35
+ - ./.svn/entries
36
+ - ./.svn/format
37
+ - ./.svn/text-base/ChangeLog.svn-base
38
+ - ./.svn/text-base/Manifest.txt.svn-base
39
+ - ./.svn/text-base/README.txt.svn-base
40
+ - ./.svn/text-base/Rakefile.svn-base
41
+ - ./.svn/text-base/Releases.txt.svn-base
42
+ - ./ChangeLog
43
+ - ./Manifest.txt
44
+ - ./README.txt
45
+ - ./Rakefile
46
+ - ./Releases.txt
47
+ - ./examples/.svn/README.txt
48
+ - ./examples/.svn/empty-file
49
+ - ./examples/.svn/entries
50
+ - ./examples/.svn/format
51
+ - ./examples/.svn/props/ex1.rb.svn-work
52
+ - ./examples/ex1.rb
53
+ - ./lib/.svn/README.txt
54
+ - ./lib/.svn/empty-file
55
+ - ./lib/.svn/entries
56
+ - ./lib/.svn/format
57
+ - ./lib/.svn/text-base/multimethod.rb.svn-base
58
+ - ./lib/multimethod.rb
59
+ - ./lib/multimethod/.svn/README.txt
60
+ - ./lib/multimethod/.svn/empty-file
61
+ - ./lib/multimethod/.svn/entries
62
+ - ./lib/multimethod/.svn/format
63
+ - ./lib/multimethod/.svn/text-base/core_extensions.rb.svn-base
64
+ - ./lib/multimethod/.svn/text-base/method.rb.svn-base
65
+ - ./lib/multimethod/.svn/text-base/multimethod.rb.svn-base
66
+ - ./lib/multimethod/.svn/text-base/parameter.rb.svn-base
67
+ - ./lib/multimethod/.svn/text-base/table.rb.svn-base
68
+ - ./lib/multimethod/core_extensions.rb
69
+ - ./lib/multimethod/method.rb
70
+ - ./lib/multimethod/multimethod.rb
71
+ - ./lib/multimethod/parameter.rb
72
+ - ./lib/multimethod/table.rb
73
+ - ./test/.svn/README.txt
74
+ - ./test/.svn/empty-file
75
+ - ./test/.svn/entries
76
+ - ./test/.svn/format
77
+ - ./test/.svn/text-base/method_test.rb.svn-base
78
+ - ./test/.svn/text-base/multimethod_test.rb.svn-base
79
+ - ./test/.svn/text-base/parameter_test.rb.svn-base
80
+ - ./test/.svn/text-base/test_base.rb.svn-base
81
+ - ./test/.svn/text-base/usage_test.rb.svn-base
82
+ - ./test/method_test.rb
83
+ - ./test/multimethod_test.rb
84
+ - ./test/parameter_test.rb
85
+ - ./test/test_base.rb
86
+ - ./test/usage_test.rb
87
+ test_files: []
88
+
89
+ rdoc_options: []
90
+
91
+ extra_rdoc_files: []
92
+
93
+ executables: []
94
+
95
+ extensions: []
96
+
97
+ requirements: []
98
+
99
+ dependencies:
100
+ - !ruby/object:Gem::Dependency
101
+ name: hoe
102
+ version_requirement:
103
+ version_requirements: !ruby/object:Gem::Version::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: 1.1.2
108
+ version: