multimethod 0.0.1 → 0.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.
Files changed (53) hide show
  1. data/Manifest.txt +21 -54
  2. data/Rakefile +19 -2
  3. data/Releases.txt +7 -0
  4. data/lib/multimethod.rb +1 -0
  5. data/lib/multimethod/core_extensions.rb +6 -1
  6. data/lib/multimethod/method.rb +43 -185
  7. data/lib/multimethod/multimethod.rb +58 -3
  8. data/lib/multimethod/multimethod_version.rb +6 -0
  9. data/lib/multimethod/parameter.rb +124 -17
  10. data/lib/multimethod/signature.rb +322 -0
  11. data/lib/multimethod/table.rb +75 -30
  12. data/test/add_remove_test.rb +99 -0
  13. data/test/method_test.rb +2 -67
  14. data/test/multimethod_test.rb +18 -16
  15. data/test/signature_test.rb +190 -0
  16. metadata +23 -56
  17. data/.svn/README.txt +0 -2
  18. data/.svn/empty-file +0 -0
  19. data/.svn/entries +0 -68
  20. data/.svn/format +0 -1
  21. data/.svn/text-base/ChangeLog.svn-base +0 -3
  22. data/.svn/text-base/Manifest.txt.svn-base +0 -54
  23. data/.svn/text-base/README.txt.svn-base +0 -40
  24. data/.svn/text-base/Rakefile.svn-base +0 -132
  25. data/.svn/text-base/Releases.txt.svn-base +0 -7
  26. data/examples/.svn/README.txt +0 -2
  27. data/examples/.svn/empty-file +0 -0
  28. data/examples/.svn/entries +0 -22
  29. data/examples/.svn/format +0 -1
  30. data/examples/.svn/props/ex1.rb.svn-work +0 -5
  31. data/lib/.svn/README.txt +0 -2
  32. data/lib/.svn/empty-file +0 -0
  33. data/lib/.svn/entries +0 -24
  34. data/lib/.svn/format +0 -1
  35. data/lib/.svn/text-base/multimethod.rb.svn-base +0 -8
  36. data/lib/multimethod/.svn/README.txt +0 -2
  37. data/lib/multimethod/.svn/empty-file +0 -0
  38. data/lib/multimethod/.svn/entries +0 -53
  39. data/lib/multimethod/.svn/format +0 -1
  40. data/lib/multimethod/.svn/text-base/core_extensions.rb.svn-base +0 -38
  41. data/lib/multimethod/.svn/text-base/method.rb.svn-base +0 -232
  42. data/lib/multimethod/.svn/text-base/multimethod.rb.svn-base +0 -171
  43. data/lib/multimethod/.svn/text-base/parameter.rb.svn-base +0 -64
  44. data/lib/multimethod/.svn/text-base/table.rb.svn-base +0 -99
  45. data/test/.svn/README.txt +0 -2
  46. data/test/.svn/empty-file +0 -0
  47. data/test/.svn/entries +0 -53
  48. data/test/.svn/format +0 -1
  49. data/test/.svn/text-base/method_test.rb.svn-base +0 -89
  50. data/test/.svn/text-base/multimethod_test.rb.svn-base +0 -92
  51. data/test/.svn/text-base/parameter_test.rb.svn-base +0 -31
  52. data/test/.svn/text-base/test_base.rb.svn-base +0 -25
  53. data/test/.svn/text-base/usage_test.rb.svn-base +0 -146
@@ -1,146 +0,0 @@
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