gene 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 +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