gene 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/Manifest +46 -0
  2. data/Rakefile +12 -9
  3. data/TODO +7 -0
  4. data/gene.gemspec +34 -0
  5. data/initializers/functional_extensions.rb +44 -0
  6. data/initializers/module_extensions.rb +14 -0
  7. data/initializers/object_extensions.rb +25 -0
  8. data/initializers/range_extensions.rb +9 -0
  9. data/initializers/runner.rb +15 -0
  10. data/initializers/symbol_extensions.rb +11 -0
  11. data/initializers/unbound_method_extensions.rb +3 -0
  12. data/lib/aligner.rb +34 -0
  13. data/lib/calculator.rb +42 -0
  14. data/lib/cell.rb +41 -0
  15. data/lib/color.rb +9 -0
  16. data/lib/dsl.rb +16 -0
  17. data/lib/gene.rb +67 -3
  18. data/lib/generator.rb +83 -0
  19. data/lib/geometry.rb +64 -0
  20. data/lib/hungarian.rb +205 -0
  21. data/lib/imagine.rb +22 -0
  22. data/lib/petri.rb +85 -0
  23. data/lib/point.rb +1 -0
  24. data/lib/trait.rb +60 -0
  25. data/tasks/test.rake +23 -0
  26. data/test/assets/Nova.jpg +0 -0
  27. data/test/assets/Rex.jpg +0 -0
  28. data/test/assets/Squares.jpg +0 -0
  29. data/test/test_helper.rb +6 -0
  30. data/test/unit/aligner_test.rb +91 -0
  31. data/test/unit/calculator_test.rb +100 -0
  32. data/test/unit/cell_test.rb +64 -0
  33. data/test/unit/color_test.rb +23 -0
  34. data/test/unit/dsl_test.rb +45 -0
  35. data/test/unit/functionals_extensions_test.rb +51 -0
  36. data/test/unit/gene_test.rb +76 -0
  37. data/test/unit/generator_test.rb +76 -0
  38. data/test/unit/geometry_test.rb +57 -0
  39. data/test/unit/hungarian_test.rb +196 -0
  40. data/test/unit/imagine_test.rb +54 -0
  41. data/test/unit/module_extensions_test.rb +40 -0
  42. data/test/unit/object_extensions_test.rb +34 -0
  43. data/test/unit/petri_test.rb +87 -0
  44. data/test/unit/range_extensions_test.rb +29 -0
  45. data/test/unit/symbol_extensions_test.rb +18 -0
  46. data/test/unit/trait_test.rb +97 -0
  47. data/test/unit/unbound_method_extensions_test.rb +11 -0
  48. metadata +118 -30
  49. data/History.txt +0 -6
  50. data/Manifest.txt +0 -7
  51. data/README.txt +0 -48
  52. data/bin/gene +0 -3
  53. data/test/test_gene.rb +0 -8
@@ -0,0 +1,40 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper.rb")
2
+
3
+ class ModuleExtensionsTest < Test::Unit::TestCase
4
+ def test_true
5
+ assert true
6
+ end
7
+
8
+ def test_module__array_get
9
+ assert_equal "#<UnboundMethod: String#reverse>", String[:reverse].inspect
10
+ end
11
+
12
+ def test_module__array_set
13
+ String[:backwards] = lambda { reverse }
14
+ assert_equal "syawedis", "sideways".backwards
15
+ end
16
+
17
+ def test_alias_method_chain
18
+ def method; :old_method; end
19
+ def method_with_chain; :chained_method; end
20
+
21
+ class << self
22
+ alias_method_chain :method, :chain
23
+ end
24
+
25
+ assert_equal :chained_method, method
26
+ assert_equal :old_method, method_without_chain
27
+ end
28
+
29
+ def test_alias_method_chain__bang!
30
+ def method!; :old_method; end
31
+ def method_with_chain!; :chained_method; end
32
+
33
+ class << self
34
+ alias_method_chain :method!, :chain
35
+ end
36
+
37
+ assert_equal :chained_method, method!
38
+ assert_equal :old_method, method_without_chain!
39
+ end
40
+ end
@@ -0,0 +1,34 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper.rb")
2
+
3
+ class SymbolExtensionsTest < Test::Unit::TestCase
4
+ def test_true
5
+ assert true
6
+ end
7
+
8
+ def test_returning
9
+ return_value = returning(1) { nil }
10
+ assert_equal 1, return_value
11
+ end
12
+
13
+ def test_object__send_if
14
+ assert_equal 3, [1, 2, 3].send_if(true, :length)
15
+ assert_equal [1, 2, 3], [1, 2, 3].send_if(false, :length)
16
+
17
+ assert_equal 1, [1, 2, 3].send_if(true, :[], 0)
18
+ assert_equal [1, 2, 3], [1, 2, 3].send_if(false, :[], 0)
19
+
20
+ assert_equal [2, 3, 4], [1, 2, 3].send_if(true, :map, proc { |element| element.succ })
21
+ assert_equal [1, 2, 3], [1, 2, 3].send_if(false, :map, proc { |element| element.succ })
22
+ end
23
+
24
+ def test_assert_at_least__raises_error
25
+ assert_raise ArgumentError do
26
+ assert_at_least 3, 2
27
+ end
28
+
29
+ assert_nothing_raised do
30
+ assert_at_least 3, 3
31
+ assert_at_least 3, 4
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,87 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper.rb")
2
+
3
+ class PetriTest < Test::Unit::TestCase
4
+ def setup
5
+ # Don't make a petri here.
6
+ end
7
+
8
+ def test_true
9
+ assert true
10
+ end
11
+
12
+ def test_prepare_image
13
+ petri = setup_petri
14
+ assert_equal Magick::Image, petri.target_image.class
15
+ assert_equal Point.new(600, 800), Petri.image_dimensions
16
+ end
17
+
18
+ def test_initialize__with_block
19
+ Petri.new(test_image_path) do
20
+ set_num_cells 1
21
+ set_num_genes 2
22
+ set_num_points 3
23
+ end
24
+
25
+ assert_equal 3, Petri.num_cells
26
+ assert_equal 2, Petri.num_genes
27
+ assert_equal 3, Petri.num_points
28
+
29
+ assert_raise NoMethodError do
30
+ Petri.rawr!
31
+ end
32
+
33
+ assert_raise NoMethodError do
34
+ Petri.new(test_image_path) { set_num_cells 1 }.rawr!
35
+ end
36
+ end
37
+
38
+ def test_initialize
39
+ petri = Petri.new(test_image_path)
40
+
41
+ assert_equal 30, Petri.num_cells
42
+ assert_equal 50, Petri.num_genes
43
+ assert_equal 3, Petri.num_points
44
+
45
+ assert_equal 30, petri.dish.size
46
+ assert petri.dish.all? { |cell| cell.is_a?(Cell) }
47
+ end
48
+
49
+ def test_initialize__num_cells_divisible_by_three
50
+ [1, 2, 3].each do |i|
51
+ assert_equal 3, Petri.new(test_image_path) { set_num_cells i }.num_cells
52
+ end
53
+
54
+ assert_equal 6, Petri.new(test_image_path) { set_num_cells 4 }.num_cells
55
+ end
56
+
57
+ def test_sort_by_fitness!
58
+ cells = [stub(:fitness => 0.5), stub(:fitness => 0.75), stub(:fitness => 0.25)]
59
+
60
+ petri = setup_petri
61
+ petri.instance_variable_set(:@dish, cells)
62
+ petri.send(:sort_by_fitness!)
63
+
64
+ assert_equal [0.75, 0.5, 0.25], petri.dish.map(&:fitness)
65
+ end
66
+
67
+ def test_round
68
+ petri = setup_petri
69
+ assert_equal 0, petri.round
70
+
71
+ petri.send(:next_round)
72
+ assert_equal 1, petri.round
73
+
74
+ petri.send(:next_round)
75
+ assert_equal 2, petri.round
76
+ end
77
+
78
+ private
79
+
80
+ def setup_petri
81
+ Petri.new(test_image_path) { set_num_cells 1 }
82
+ end
83
+
84
+ def test_image_path
85
+ File.join(File.dirname(__FILE__), "..", "assets", "Nova.jpg")
86
+ end
87
+ end
@@ -0,0 +1,29 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper.rb")
2
+
3
+ class RangeExtensionsTest < Test::Unit::TestCase
4
+ def test_true
5
+ assert true
6
+ end
7
+
8
+ def test_add_bounding_methods_to__integer_range__max_and_min
9
+ inclusive_range = 0..10
10
+ exclusive_range = 0...10
11
+
12
+ assert_equal 0, inclusive_range.min
13
+ assert_equal 10, inclusive_range.max
14
+
15
+ assert_equal 0, exclusive_range.min
16
+ assert_equal 9, exclusive_range.max
17
+ end
18
+
19
+ def test_add_bounding_methods_to__float_range__max_and_min
20
+ inclusive_range = 0.0..1.0
21
+ exclusive_range = 0.0...1.0
22
+
23
+ assert_equal 0.0, inclusive_range.min
24
+ assert_equal 1.0, inclusive_range.max
25
+
26
+ assert_equal 0.0, exclusive_range.min
27
+ assert_equal 1.0, exclusive_range.max
28
+ end
29
+ end
@@ -0,0 +1,18 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper.rb")
2
+
3
+ class SymbolExtensionsTest < Test::Unit::TestCase
4
+ def test_true
5
+ assert true
6
+ end
7
+
8
+ def test_symbol__array_get
9
+ dashes = :*["-"]
10
+ assert_equal "----------", dashes[10]
11
+ end
12
+
13
+ def test_symbol__array_set
14
+ string = "Hello world."
15
+ :singleton[string] = lambda { "You have found my singleton method." }
16
+ assert_equal "You have found my singleton method.", string.singleton
17
+ end
18
+ end
@@ -0,0 +1,97 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper.rb")
2
+
3
+ class TraitTest < Test::Unit::TestCase
4
+ def test_true
5
+ assert true
6
+ end
7
+
8
+ def test_initialize
9
+ x = Trait.new(0...100) { set_value 10 }
10
+ y = Trait.new(0...100) { set_value 20 }
11
+
12
+ assert_equal 10, x.value
13
+ assert_equal 20, y.value
14
+ end
15
+
16
+ def test_standard_deviation__default
17
+ assert_equal 1.0, Trait.new(0..10).standard_deviation
18
+ assert_equal 0.9, Trait.new(0...10).standard_deviation
19
+ end
20
+
21
+ def test_standard_deviation__provided
22
+ assert_equal 5.0, Trait.new(0..10) { deviation 0.5 }.standard_deviation
23
+ assert_equal 4.5, Trait.new(0...10) { deviation 0.5 }.standard_deviation
24
+ end
25
+
26
+ def test_setup_standard_deviation_with__provided
27
+ trait = Trait.new(0..10) { deviation 1 }
28
+ assert_equal trait.range.max, trait.standard_deviation
29
+ end
30
+
31
+ def test_setup_standard_deviation_with__default
32
+ trait = Trait.new(0..10)
33
+ assert_equal Trait::STANDARD_DEVIATION[:default] * trait.range.max, trait.standard_deviation
34
+ end
35
+
36
+ def test_setup_value_with
37
+ trait = Trait.new(0..10) { set_value :value }
38
+
39
+ assert_equal :value, trait.value
40
+ end
41
+
42
+ def test_setup_value_with__no_value
43
+ Trait.expects(:generate_value).returns(:value)
44
+
45
+ trait = Trait.new(0..10)
46
+
47
+ assert_equal :value, trait.value
48
+ end
49
+
50
+ def test_setup_value_with__raises_error_if_out_of_range
51
+ assert_raise ArgumentError do
52
+ Trait.new(0..10, :default => 100)
53
+ end
54
+
55
+ assert_raise ArgumentError do
56
+ Trait.new(0..10, :default => -100)
57
+ end
58
+ end
59
+
60
+ def test_mutated_value__inclusive
61
+ trait = Trait.new(0..100)
62
+ Trait.stubs(:get_normal_random_variable).returns(1)
63
+
64
+ trait.instance_variable_set(:@standard_deviation, 1000)
65
+ assert_equal 100, trait.mutated_value
66
+
67
+ trait.instance_variable_set(:@standard_deviation, -1000)
68
+ assert_equal 0, trait.mutated_value
69
+
70
+ trait.instance_variable_set(:@standard_deviation, 0)
71
+ assert_equal trait.value, trait.mutated_value
72
+ end
73
+
74
+ def test_mutated_value__exclusive
75
+ trait = Trait.new(0...100)
76
+ Trait.stubs(:get_normal_random_variable).returns(1)
77
+
78
+ trait.instance_variable_set(:@standard_deviation, 1000)
79
+ assert_equal 99, trait.mutated_value
80
+ end
81
+
82
+ def test_percentify
83
+ trait = Trait.new(0..100) { set_value 12 }
84
+ assert_equal "12.0%", trait.percentify
85
+
86
+ trait = Trait.new(0.0..1.0) { set_value 0.5 }
87
+ assert_equal "50.0%", trait.percentify
88
+ end
89
+
90
+ def test_new_standard_deviation_from
91
+ trait = Trait.new(0...100)
92
+
93
+ # The float.to_s is to ensure comparison works.
94
+ assert_equal Trait::STANDARD_DEVIATION[:range].max.to_s, trait.send(:new_standard_deviation_from, 0).to_s
95
+ assert_equal Trait::STANDARD_DEVIATION[:range].min.to_s, trait.send(:new_standard_deviation_from, 1).to_s
96
+ end
97
+ end
@@ -0,0 +1,11 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper.rb")
2
+
3
+ class UnboundMethodExtensionsTest < Test::Unit::TestCase
4
+ def test_true
5
+ assert true
6
+ end
7
+
8
+ def test_unbound_method__array_get
9
+ assert_equal "syawedis", String[:reverse]["sideways"][]
10
+ end
11
+ end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gene
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - Evan Senter
@@ -9,66 +15,148 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-05-27 00:00:00 -07:00
18
+ date: 2010-07-20 00:00:00 -04:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
- name: hoe
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ name: rmagick
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
23
- version: 1.12.2
24
- version:
25
- description: A genetic algorithm to create art.
26
- email:
27
- - evansenter@gmail.com
28
- executables:
29
- - gene
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ description: Sample genetic program in Ruby
36
+ email: evansenter@gmail.com
37
+ executables: []
38
+
30
39
  extensions: []
31
40
 
32
41
  extra_rdoc_files:
33
- - History.txt
34
- - Manifest.txt
35
- - README.txt
42
+ - TODO
43
+ - lib/aligner.rb
44
+ - lib/calculator.rb
45
+ - lib/cell.rb
46
+ - lib/color.rb
47
+ - lib/dsl.rb
48
+ - lib/gene.rb
49
+ - lib/generator.rb
50
+ - lib/geometry.rb
51
+ - lib/hungarian.rb
52
+ - lib/imagine.rb
53
+ - lib/petri.rb
54
+ - lib/point.rb
55
+ - lib/trait.rb
56
+ - tasks/test.rake
36
57
  files:
37
- - History.txt
38
- - Manifest.txt
39
- - README.txt
58
+ - Manifest
40
59
  - Rakefile
41
- - bin/gene
60
+ - TODO
61
+ - initializers/functional_extensions.rb
62
+ - initializers/module_extensions.rb
63
+ - initializers/object_extensions.rb
64
+ - initializers/range_extensions.rb
65
+ - initializers/runner.rb
66
+ - initializers/symbol_extensions.rb
67
+ - initializers/unbound_method_extensions.rb
68
+ - lib/aligner.rb
69
+ - lib/calculator.rb
70
+ - lib/cell.rb
71
+ - lib/color.rb
72
+ - lib/dsl.rb
42
73
  - lib/gene.rb
43
- - test/test_gene.rb
74
+ - lib/generator.rb
75
+ - lib/geometry.rb
76
+ - lib/hungarian.rb
77
+ - lib/imagine.rb
78
+ - lib/petri.rb
79
+ - lib/point.rb
80
+ - lib/trait.rb
81
+ - tasks/test.rake
82
+ - test/assets/Nova.jpg
83
+ - test/assets/Rex.jpg
84
+ - test/assets/Squares.jpg
85
+ - test/test_helper.rb
86
+ - test/unit/aligner_test.rb
87
+ - test/unit/calculator_test.rb
88
+ - test/unit/cell_test.rb
89
+ - test/unit/color_test.rb
90
+ - test/unit/dsl_test.rb
91
+ - test/unit/functionals_extensions_test.rb
92
+ - test/unit/gene_test.rb
93
+ - test/unit/generator_test.rb
94
+ - test/unit/geometry_test.rb
95
+ - test/unit/hungarian_test.rb
96
+ - test/unit/imagine_test.rb
97
+ - test/unit/module_extensions_test.rb
98
+ - test/unit/object_extensions_test.rb
99
+ - test/unit/petri_test.rb
100
+ - test/unit/range_extensions_test.rb
101
+ - test/unit/symbol_extensions_test.rb
102
+ - test/unit/trait_test.rb
103
+ - test/unit/unbound_method_extensions_test.rb
104
+ - gene.gemspec
44
105
  has_rdoc: true
45
- homepage: http://github.com/evansenter/gene/tree/master
106
+ homepage: http://github.com/evansenter/gene
46
107
  licenses: []
47
108
 
48
109
  post_install_message:
49
110
  rdoc_options:
50
- - --main
51
- - README.txt
111
+ - --line-numbers
112
+ - --inline-source
113
+ - --title
114
+ - Gene
52
115
  require_paths:
53
116
  - lib
54
117
  required_ruby_version: !ruby/object:Gem::Requirement
118
+ none: false
55
119
  requirements:
56
120
  - - ">="
57
121
  - !ruby/object:Gem::Version
122
+ hash: 3
123
+ segments:
124
+ - 0
58
125
  version: "0"
59
- version:
60
126
  required_rubygems_version: !ruby/object:Gem::Requirement
127
+ none: false
61
128
  requirements:
62
129
  - - ">="
63
130
  - !ruby/object:Gem::Version
64
- version: "0"
65
- version:
131
+ hash: 11
132
+ segments:
133
+ - 1
134
+ - 2
135
+ version: "1.2"
66
136
  requirements: []
67
137
 
68
138
  rubyforge_project: gene
69
- rubygems_version: 1.3.3
139
+ rubygems_version: 1.3.7
70
140
  signing_key:
71
141
  specification_version: 3
72
- summary: A genetic algorithm to create art.
142
+ summary: Sample genetic program in Ruby
73
143
  test_files:
74
- - test/test_gene.rb
144
+ - test/test_helper.rb
145
+ - test/unit/aligner_test.rb
146
+ - test/unit/calculator_test.rb
147
+ - test/unit/cell_test.rb
148
+ - test/unit/color_test.rb
149
+ - test/unit/dsl_test.rb
150
+ - test/unit/functionals_extensions_test.rb
151
+ - test/unit/gene_test.rb
152
+ - test/unit/generator_test.rb
153
+ - test/unit/geometry_test.rb
154
+ - test/unit/hungarian_test.rb
155
+ - test/unit/imagine_test.rb
156
+ - test/unit/module_extensions_test.rb
157
+ - test/unit/object_extensions_test.rb
158
+ - test/unit/petri_test.rb
159
+ - test/unit/range_extensions_test.rb
160
+ - test/unit/symbol_extensions_test.rb
161
+ - test/unit/trait_test.rb
162
+ - test/unit/unbound_method_extensions_test.rb