ludy 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/test/tc_dice.rb ADDED
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Copyright (c) 2007, Lin Jen-Shin(a.k.a. godfat 真常)
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'test/unit'
18
+ require(File.join(File.dirname(__FILE__), '..', 'lib', 'ludy'))
19
+ require_ludy 'dice'
20
+ include Ludy
21
+ class TestDice < Test::Unit::TestCase
22
+ def test_dice
23
+ 50.times{ assert((1..20).include?(1.roll)) }
24
+ 50.times{ assert((2..40).include?(2.roll)) }
25
+ 50.times{ assert((3..18).include?(3.roll(6))) }
26
+
27
+ _4d20 = 4.dice
28
+ assert_equal 4, _4d20.min
29
+ assert_equal 4*20, _4d20.max
30
+ 50.times{ assert((4..80).include?(_4d20.roll)) }
31
+
32
+ _5d12 = 5.dice 12
33
+ assert_equal 5, _5d12.min
34
+ assert_equal 5*12, _5d12.max
35
+ 50.times{ assert((5..60).include?(_5d12.roll)) }
36
+
37
+ ds = DiceSet.new _4d20, _5d12
38
+ assert_equal _4d20.min+_5d12.min, ds.min
39
+ assert_equal _4d20.max+_5d12.max, ds.max
40
+ 50.times{ assert((ds.min..ds.max).include?(ds.roll)) }
41
+
42
+ du = DiceSet.new ds, 6.dice(6)
43
+ assert_equal ds.min+6, du.min
44
+ assert_equal ds.max+36, du.max
45
+ 50.times{ assert((du.min..du.max).include?(du.roll)) }
46
+ end
47
+ end
data/test/tc_lazy.rb ADDED
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Copyright (c) 2007, Lin Jen-Shin(a.k.a. godfat 真常)
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'test/unit'
18
+ require(File.join(File.dirname(__FILE__), '..', 'lib', 'ludy'))
19
+ require_ludy 'lazy'
20
+ include Ludy
21
+ class TestLazy < Test::Unit::TestCase
22
+ def setup; @data = 0; end
23
+ def get; @data += 1; end
24
+ def test_lazy
25
+ assert_equal 0, @data
26
+ v = lazy{get}
27
+ assert_equal 0, @data
28
+ assert_equal 1, v
29
+ assert_equal '1', v.to_s
30
+ assert_equal 1, v
31
+ assert_equal '1', v.to_s
32
+ end
33
+ end
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Copyright (c) 2007, Lin Jen-Shin(a.k.a. godfat 真常)
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'test/unit'
18
+ require(File.join(File.dirname(__FILE__), '..', 'lib', 'ludy'))
19
+ require_ludy 'ludy_ext'
20
+ class TestLudyExt < Test::Unit::TestCase
21
+ def test_tap
22
+ assert_equal '11', 10.tap{|i| assert_equal '10', i.to_s}.succ.to_s
23
+ end
24
+ def test_nil
25
+ assert_nil nil.XD.Orz.zzz
26
+ end
27
+ end
data/test/tc_rambda.rb ADDED
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Copyright (c) 2007, Lin Jen-Shin(a.k.a. godfat 真常)
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'test/unit'
18
+ require(File.join(File.dirname(__FILE__), '..', 'lib', 'ludy'))
19
+ require_ludy 'rambda'
20
+ include Ludy
21
+ class TestRambda < Test::Unit::TestCase
22
+ def test_rambda
23
+ assert_equal(3628800, rambda{|n| n==1 ? 1 : n*this[n-1]}[10])
24
+ assert_equal([1,1,2,3,5,8,13,21,34,55],
25
+ (0...10).map(&rambda{|n| n<=1 ? 1 : this[n-2]+this[n-1]}))
26
+
27
+ v = "can't refer v"
28
+ assert_raise(NameError){
29
+ rambda{v}.call
30
+ }
31
+ end
32
+ end
data/test/tc_this.rb ADDED
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Copyright (c) 2007, Lin Jen-Shin(a.k.a. godfat 真常)
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'test/unit'
18
+ require(File.join(File.dirname(__FILE__), '..', 'lib', 'ludy'))
19
+ require_ludy 'this'
20
+ include Ludy
21
+ class TestThis < Test::Unit::TestCase
22
+ def test_fact
23
+ assert_equal(120, fact(5))
24
+ assert_equal(3628800, fact(10))
25
+ assert_equal(5040, lambda{|n| n==1 ? 1 : n*this[n-1]}[7])
26
+
27
+ # can't play with yielded method! that's a problem
28
+ assert_raise(ArgumentError){
29
+ (0...10).map(&lambda{|n| n<=1 ? 1 : this[n-2]+this[n-1]})
30
+ }
31
+ end
32
+ def fact n
33
+ return n*this[n-1] if n > 0
34
+ 1
35
+ end
36
+ ##
37
+ def test_pass_around
38
+ assert_equal(method(:pass_around_forward), pass_around.call(lambda{|v| v}))
39
+ end
40
+ def pass_around mode = 'pass'
41
+ case mode
42
+ when 'pass'
43
+ pass_around_forward this
44
+ else
45
+ 'value'
46
+ end
47
+ end
48
+ def pass_around_forward func
49
+ assert_equal('value', func['value'])
50
+ this
51
+ end
52
+ ##
53
+ def test_with_block
54
+ with_block{|b| assert_equal('value', b['value'])}
55
+ end
56
+ def with_block mode = 'pass', &block
57
+ case mode
58
+ when 'pass'
59
+ block[this]
60
+ else
61
+ 'value'
62
+ end
63
+ end
64
+ ##
65
+ def test_more_args
66
+ more_args('get_this'){}.call('call', 1, 2, 3, 4, 5, &lambda{6})
67
+ more_args('get_this'){}.call('call', 1, 2, 3, 4, 5){6}
68
+ end
69
+ def more_args mode, a1=nil, a2=nil, a3=nil, *as, &block
70
+ case mode
71
+ when 'get_this'
72
+ this
73
+ else
74
+ assert_equal(1, a1)
75
+ assert_equal(2, a2)
76
+ assert_equal(3, a3)
77
+ assert_equal(4, as[0])
78
+ assert_equal(5, as[1])
79
+ assert_equal(nil, as[2])
80
+ assert_equal(6, yield)
81
+ assert_equal(6, block.call)
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Copyright (c) 2007, Lin Jen-Shin(a.k.a. godfat 真常)
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'test/unit'
18
+ require(File.join(File.dirname(__FILE__), '..', 'lib', 'ludy'))
19
+ require_ludy 'variable'
20
+ include Ludy
21
+ class TestVariable < Test::Unit::TestCase
22
+ class Qoo
23
+ def cool
24
+ 'cool ~~~~'
25
+ end
26
+ end
27
+
28
+ def test_variable
29
+ x = var Qoo.new
30
+ y = x
31
+
32
+ assert_equal x.__obj__, y.__obj__
33
+ assert_equal Qoo, x.__obj__.class
34
+ assert_equal Qoo, x.class
35
+
36
+ assert_equal 'cool ~~~~', x.cool
37
+ assert_equal 'cool ~~~~', y.cool
38
+
39
+ x.__obj__ = nil
40
+
41
+ assert x.nil?
42
+ assert y.nil?
43
+ end
44
+ end
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Copyright (c) 2007, Lin Jen-Shin(a.k.a. godfat 真常)
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'test/unit'
18
+ require(File.join(File.dirname(__FILE__), '..', 'lib', 'ludy'))
19
+ require_ludy 'y_combinator'
20
+ include Ludy
21
+ class TestYCombinator < Test::Unit::TestCase
22
+ def test_y_combinator
23
+ fact_ = lambda{|this|
24
+ lambda{|n| n==1 ? 1 : n*this[n-1]}
25
+ }
26
+ fact = Y[fact_]
27
+ assert_equal(3628800, fact[10])
28
+
29
+ fib_ = lambda{|this|
30
+ lambda{|n| n<=1 ? 1 : this[n-2]+this[n-1]}
31
+ }
32
+ fib = Y[fib_]
33
+ assert_equal([1,1,2,3,5,8,13,21,34,55], (0...10).map(&fib))
34
+ end
35
+ end
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Copyright (c) 2007, Lin Jen-Shin(a.k.a. godfat 真常)
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'test/unit'
18
+ require(File.join(File.dirname(__FILE__), '..', 'lib', 'ludy'))
19
+ require_ludy 'z_combinator'
20
+ include Ludy
21
+ class TestZCombinator < Test::Unit::TestCase
22
+ def test_z_combinator
23
+ fact_ = lambda{|this|
24
+ lambda{|n| n==1 ? 1 : n*this[n-1]}
25
+ }
26
+ fact = Z[fact_]
27
+ assert_equal(3628800, fact[10])
28
+
29
+ fib_ = lambda{|this|
30
+ lambda{|n| n<=1 ? 1 : this[n-2]+this[n-1]}
31
+ }
32
+ fib = Z[fib_]
33
+ assert_equal([1,1,2,3,5,8,13,21,34,55], (0...10).map(&fib))
34
+ end
35
+ end
data/test/ts_ludy.rb ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Copyright (c) 2007, Lin Jen-Shin(a.k.a. godfat 真常)
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require(File.join(File.dirname(__FILE__), '..', 'lib', 'ludy'))
18
+ require_all_in_dir __FILE__
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.0
3
+ specification_version: 1
4
+ name: ludy
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.0.1
7
+ date: 2007-04-30 00:00:00 +08:00
8
+ summary: Aims to extend Ruby standard library, providing some useful tools that's not existed in the standard library.
9
+ require_paths:
10
+ - lib
11
+ email: "strip number: 135godfat7911@246gmail.890com"
12
+ homepage: http://ludy.rubyforge.org/
13
+ rubyforge_project:
14
+ description:
15
+ autorequire: ludy
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: false
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Lin Jen-Shin(a.k.a. godfat)
31
+ files:
32
+ - lib/lib
33
+ - lib/ludy
34
+ - lib/ludy.rb
35
+ - lib/lib/amulti.rb
36
+ - lib/lib/multi.rb
37
+ - lib/lib/smulti.rb
38
+ - lib/ludy/callstack.rb
39
+ - lib/ludy/dice.rb
40
+ - lib/ludy/lazy.rb
41
+ - lib/ludy/ludy_ext.rb
42
+ - lib/ludy/rambda.rb
43
+ - lib/ludy/this.rb
44
+ - lib/ludy/variable.rb
45
+ - lib/ludy/y_combinator.rb
46
+ - lib/ludy/z_combinator.rb
47
+ - test/tc_callstack.rb
48
+ - test/tc_dice.rb
49
+ - test/tc_lazy.rb
50
+ - test/tc_ludy_ext.rb
51
+ - test/tc_rambda.rb
52
+ - test/tc_this.rb
53
+ - test/tc_variable.rb
54
+ - test/tc_y_combinator.rb
55
+ - test/tc_z_combinator.rb
56
+ - test/ts_ludy.rb
57
+ - lib
58
+ - LICENSE
59
+ - ludy.gemspec
60
+ - NOTICE
61
+ - README
62
+ - test
63
+ test_files:
64
+ - test/ts_ludy.rb
65
+ rdoc_options: []
66
+
67
+ extra_rdoc_files: []
68
+
69
+ executables: []
70
+
71
+ extensions: []
72
+
73
+ requirements: []
74
+
75
+ dependencies: []
76
+