conway_deathmatch 0.5.0.3 → 0.6.0.1
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.
- checksums.yaml +4 -4
- data/Rakefile +78 -34
- data/VERSION +1 -1
- data/bin/conway_deathmatch +25 -21
- data/bin/proving_ground +12 -13
- data/conway_deathmatch.gemspec +3 -3
- data/test/bench_grid.rb +7 -10
- data/test/spec_helper.rb +0 -1
- metadata +17 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e231c26991bcf255abd1bf05004d79183d025dc8
|
4
|
+
data.tar.gz: 5d96b4380756b46bd477e4e0baadeae27a9a36d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e11495b48f8611b99287e3a77c14d2fe4fdd966c97833d1af41983694642e81729ac3740b9fcf3be1c3b60742f3f922b2562fed8276cef7ef9be367dc24edb84
|
7
|
+
data.tar.gz: f4fb473dc800d24f7f82bd03af235007dd2f00db3c122e861277b8065f053cafa8852177e0167e0bc4597b582c804a92f8b2ccaffe3e39afab08c38c43bdf634
|
data/Rakefile
CHANGED
@@ -1,14 +1,3 @@
|
|
1
|
-
require 'buildar'
|
2
|
-
|
3
|
-
Buildar.new do |b|
|
4
|
-
b.gemspec_file = 'conway_deathmatch.gemspec'
|
5
|
-
b.version_file = 'VERSION'
|
6
|
-
b.use_git = true
|
7
|
-
end
|
8
|
-
|
9
|
-
task default: %w[test bench]
|
10
|
-
task travis: %w[test bench ruby-prof]
|
11
|
-
|
12
1
|
require 'rake/testtask'
|
13
2
|
desc "Run tests"
|
14
3
|
Rake::TestTask.new do |t|
|
@@ -24,45 +13,100 @@ Rake::TestTask.new do |t|
|
|
24
13
|
# t.warning = true
|
25
14
|
end
|
26
15
|
|
27
|
-
|
28
|
-
|
29
|
-
|
16
|
+
task default: %w[test bench]
|
17
|
+
|
18
|
+
|
19
|
+
#
|
20
|
+
# METRICS
|
21
|
+
#
|
30
22
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
23
|
+
metrics_tasks = []
|
24
|
+
|
25
|
+
begin
|
26
|
+
require 'flog_task'
|
27
|
+
FlogTask.new do |t|
|
28
|
+
t.threshold = 200
|
29
|
+
t.dirs = ['lib']
|
30
|
+
t.verbose = true
|
31
|
+
end
|
32
|
+
metrics_tasks << :flog
|
33
|
+
rescue LoadError
|
34
|
+
warn 'flog_task unavailable'
|
35
35
|
end
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
begin
|
38
|
+
require 'flay_task'
|
39
|
+
FlayTask.new do |t|
|
40
|
+
t.verbose = true
|
41
|
+
t.dirs = ['lib']
|
42
|
+
end
|
43
|
+
metrics_tasks << :flay
|
44
|
+
rescue LoadError
|
45
|
+
warn 'flay_task unavailable'
|
41
46
|
end
|
42
47
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
48
|
+
begin
|
49
|
+
require 'roodi_task'
|
50
|
+
RoodiTask.new config: '.roodi.yml', patterns: ['lib/**/*.rb']
|
51
|
+
metrics_tasks << :roodi
|
52
|
+
rescue LoadError
|
53
|
+
warn "roodi_task unavailable"
|
47
54
|
end
|
48
55
|
|
56
|
+
desc "Generate code metrics reports"
|
57
|
+
task code_metrics: metrics_tasks
|
58
|
+
|
59
|
+
|
60
|
+
#
|
61
|
+
# PROFILING TASKS
|
62
|
+
#
|
63
|
+
|
49
64
|
desc "Show current system load"
|
50
65
|
task "loadavg" do
|
51
66
|
puts File.read "/proc/loadavg"
|
52
67
|
end
|
53
68
|
|
54
|
-
|
69
|
+
rubylib = "RUBYLIB=lib"
|
70
|
+
rubyprof = "ruby-prof -m1"
|
71
|
+
scriptname = "bin/conway_deathmatch"
|
72
|
+
scriptargs = "-n 100 -s 0 --renderfinal"
|
73
|
+
|
55
74
|
desc "Run ruby-prof on bin/conway_deathmatch (100 ticks)"
|
56
75
|
task "ruby-prof" => "loadavg" do
|
57
|
-
sh [
|
58
|
-
"-- -n100 -s0 --renderfinal",
|
59
|
-
"| tee metrics/ruby-prof"].join(' ')
|
76
|
+
sh [rubylib, rubyprof, scriptname, '--', scriptargs].join(' ')
|
60
77
|
end
|
61
78
|
|
62
|
-
# this runs against the installed gem lib, not git / filesystem
|
63
79
|
desc "Run ruby-prof with --exclude-common-cycles"
|
64
80
|
task "ruby-prof-exclude" => "ruby-prof" do
|
65
|
-
sh [
|
66
|
-
|
67
|
-
|
81
|
+
sh [rubylib,
|
82
|
+
rubyprof, '--exclude-common-cycles', scriptname, '--',
|
83
|
+
scriptargs].join(' ')
|
84
|
+
end
|
85
|
+
|
86
|
+
task "no-prof" do
|
87
|
+
sh [rubylib, scriptname, scriptargs].join(' ')
|
88
|
+
end
|
89
|
+
|
90
|
+
#
|
91
|
+
# GEM BUILD / PUBLISH TASKS
|
92
|
+
#
|
93
|
+
|
94
|
+
begin
|
95
|
+
require 'buildar'
|
96
|
+
|
97
|
+
Buildar.new do |b|
|
98
|
+
b.gemspec_file = 'conway_deathmatch.gemspec'
|
99
|
+
b.version_file = 'VERSION'
|
100
|
+
b.use_git = true
|
101
|
+
end
|
102
|
+
rescue LoadError
|
103
|
+
# ok
|
68
104
|
end
|
105
|
+
|
106
|
+
|
107
|
+
#
|
108
|
+
# TRAVIS CI
|
109
|
+
#
|
110
|
+
|
111
|
+
desc "Rake tasks for travis to run"
|
112
|
+
task travis: %w[test bench no-prof]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.6.0.1
|
data/bin/conway_deathmatch
CHANGED
@@ -1,31 +1,35 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
gem 'slop', '~> 3'
|
4
3
|
require 'slop'
|
5
4
|
require 'conway_deathmatch'
|
6
5
|
require 'conway_deathmatch/shapes'
|
7
6
|
|
8
7
|
# process cmdline options
|
9
8
|
#
|
10
|
-
opts = Slop.parse
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
opts = Slop.parse do |o|
|
10
|
+
o.banner = "Usage: conway_deathmatch [options]"
|
11
|
+
o.int '-x', '--width', 'Grid width'
|
12
|
+
o.int '-y', '--height', 'Grid height'
|
13
|
+
o.int '-n', '--ticks', 'Max number of ticks to generate'
|
14
|
+
o.float '-s', '--sleep', 'Sleep duration'
|
15
|
+
o.string '-p', '--points', 'e.g. acorn 50 18 p 1 2 p 3 4'
|
16
|
+
o.bool '-g', '--step', 'Pause each tick for user input'
|
17
|
+
o.bool '-r', '--renderfinal', 'Only render the final state'
|
18
|
+
o.string '-d', '--deathmatch', 'single|aggressive|defensive|friendly'
|
19
|
+
o.string '--one', 'points for population "1"'
|
20
|
+
o.string '--two', 'points for population "2"'
|
21
|
+
o.string '--three', 'points for population "3"'
|
15
22
|
|
16
|
-
on '
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
on 'one=', '[str] points for population "1"', as: String
|
27
|
-
on 'two=', '[str] points for population "2"', as: String
|
28
|
-
on 'three=', '[str] points for population "3"', as: String
|
23
|
+
o.on '-h', '--help' do
|
24
|
+
puts o
|
25
|
+
exit
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def opts.error(msg = nil)
|
30
|
+
puts self
|
31
|
+
puts "ERROR: #{msg}" if msg
|
32
|
+
exit 1
|
29
33
|
end
|
30
34
|
|
31
35
|
width = opts[:width] || 70
|
@@ -40,7 +44,7 @@ deathmatch = case opts[:deathmatch].to_s.downcase
|
|
40
44
|
when 'd', 'defensive' then :defensive
|
41
45
|
when 'f', 'friendly' then :friendly
|
42
46
|
else
|
43
|
-
|
47
|
+
opts.error("unknown deathmatch option: #{opts[:deathmatch]}")
|
44
48
|
end
|
45
49
|
|
46
50
|
# create game
|
@@ -71,7 +75,7 @@ while n.nil? or count <= n
|
|
71
75
|
b.tick
|
72
76
|
|
73
77
|
if opts.step?
|
74
|
-
gets
|
78
|
+
$stdin.gets
|
75
79
|
else
|
76
80
|
sleep slp if slp > 0.0
|
77
81
|
end
|
data/bin/proving_ground
CHANGED
@@ -1,24 +1,23 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'set'
|
4
|
-
gem 'slop', '~> 3'
|
5
4
|
require 'slop'
|
6
5
|
require 'conway_deathmatch'
|
7
6
|
require 'conway_deathmatch/shapes'
|
8
7
|
|
9
8
|
# process cmdline options
|
10
9
|
#
|
11
|
-
opts = Slop.parse
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
on
|
19
|
-
|
20
|
-
|
21
|
-
|
10
|
+
opts = Slop.parse do |o|
|
11
|
+
o.banner = "Usage: proving_ground [options]"
|
12
|
+
o.int '-w', '--width', 'Grid width'
|
13
|
+
o.int '--height', 'Grid height'
|
14
|
+
o.int '-n', '--num_ticks', 'Max number of ticks to generate'
|
15
|
+
o.int '-p', '--num_points', 'Number of points to generate'
|
16
|
+
o.int '-m', '--max_collisions', 'Max number of generation collisions'
|
17
|
+
o.on '-h', '--help' do
|
18
|
+
puts o
|
19
|
+
exit
|
20
|
+
end
|
22
21
|
end
|
23
22
|
|
24
23
|
num_points = opts[:num_points] || 5
|
@@ -71,7 +70,7 @@ def conclude!(results, w, h)
|
|
71
70
|
exit 0
|
72
71
|
end
|
73
72
|
|
74
|
-
results = { final: [0], peak: [0], score: [0], }
|
73
|
+
results = { final: [0, []], peak: [0, []], score: [0, []], }
|
75
74
|
seen = Set.new
|
76
75
|
collisions = 0
|
77
76
|
|
data/conway_deathmatch.gemspec
CHANGED
@@ -23,13 +23,13 @@ Gem::Specification.new do |s|
|
|
23
23
|
'test/test_shapes.rb',
|
24
24
|
]
|
25
25
|
s.executables = ['conway_deathmatch']
|
26
|
-
s.add_runtime_dependency "slop", "~>
|
27
|
-
s.add_development_dependency "buildar", "~>
|
26
|
+
s.add_runtime_dependency "slop", "~> 4.0"
|
27
|
+
s.add_development_dependency "buildar", "~> 3"
|
28
28
|
s.add_development_dependency "minitest", "~> 5"
|
29
29
|
s.add_development_dependency "ruby-prof", "~> 0"
|
30
30
|
s.add_development_dependency "flog", "~> 4.0"
|
31
31
|
s.add_development_dependency "flay", "~> 2.0"
|
32
|
-
s.add_development_dependency "roodi", "
|
32
|
+
s.add_development_dependency "roodi", ">= 4", "< 6"
|
33
33
|
|
34
34
|
# uncomment and set ENV['CODE_COVERAGE']
|
35
35
|
# s.add_development_dependency "simplecov", "~> 0.9.0"
|
data/test/bench_grid.rb
CHANGED
@@ -3,8 +3,8 @@ require 'minitest/benchmark'
|
|
3
3
|
require 'conway_deathmatch'
|
4
4
|
require 'conway_deathmatch/shapes'
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
bnew = (ENV['BENCH_NEW_THRESH'] || 0.9).to_f
|
7
|
+
btick = (ENV['BENCH_TICK_THRESH'] || 0.9995).to_f
|
8
8
|
Shapes = ConwayDeathmatch::Shapes
|
9
9
|
|
10
10
|
describe "ConwayDeathmatch.new Benchmark" do
|
@@ -12,7 +12,7 @@ describe "ConwayDeathmatch.new Benchmark" do
|
|
12
12
|
bench_exp 9, 9999, 3
|
13
13
|
end
|
14
14
|
|
15
|
-
bench_performance_linear "width*height",
|
15
|
+
bench_performance_linear "width*height", bnew do |n|
|
16
16
|
ConwayDeathmatch.new(n, n)
|
17
17
|
end
|
18
18
|
end
|
@@ -22,14 +22,13 @@ describe "ConwayDeathmatch#tick Benchmark" do
|
|
22
22
|
bench_exp 1, 100, 3
|
23
23
|
end
|
24
24
|
|
25
|
-
bench_performance_linear "acorn demo",
|
25
|
+
bench_performance_linear "acorn demo", btick do |n|
|
26
26
|
b = ConwayDeathmatch.new(70, 40)
|
27
27
|
Shapes.add(b, "acorn 50 18")
|
28
28
|
n.times { b.tick }
|
29
29
|
end
|
30
30
|
|
31
|
-
bench_performance_linear "aggressive deathmatch demo",
|
32
|
-
BENCH_TICK_THRESH do |n|
|
31
|
+
bench_performance_linear "aggressive deathmatch demo", btick do |n|
|
33
32
|
b = ConwayDeathmatch.new(70, 40)
|
34
33
|
b.deathmatch = :aggressive
|
35
34
|
Shapes.add(b, "acorn 30 30", "1")
|
@@ -37,8 +36,7 @@ describe "ConwayDeathmatch#tick Benchmark" do
|
|
37
36
|
n.times { b.tick }
|
38
37
|
end
|
39
38
|
|
40
|
-
bench_performance_linear "defensive deathmatch demo",
|
41
|
-
BENCH_TICK_THRESH do |n|
|
39
|
+
bench_performance_linear "defensive deathmatch demo", btick do |n|
|
42
40
|
b = ConwayDeathmatch.new(70, 40)
|
43
41
|
b.deathmatch = :defensive
|
44
42
|
Shapes.add(b, "acorn 30 30", "1")
|
@@ -46,8 +44,7 @@ describe "ConwayDeathmatch#tick Benchmark" do
|
|
46
44
|
n.times { b.tick }
|
47
45
|
end
|
48
46
|
|
49
|
-
bench_performance_linear "friendly deathmatch demo",
|
50
|
-
BENCH_TICK_THRESH do |n|
|
47
|
+
bench_performance_linear "friendly deathmatch demo", btick do |n|
|
51
48
|
b = ConwayDeathmatch.new(70, 40)
|
52
49
|
b.deathmatch = :friendly
|
53
50
|
Shapes.add(b, "acorn 30 30", "1")
|
data/test/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: conway_deathmatch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rick Hull
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slop
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '4.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '4.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: buildar
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,16 +98,22 @@ dependencies:
|
|
98
98
|
name: roodi
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '4
|
103
|
+
version: '4'
|
104
|
+
- - "<"
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '6'
|
104
107
|
type: :development
|
105
108
|
prerelease: false
|
106
109
|
version_requirements: !ruby/object:Gem::Requirement
|
107
110
|
requirements:
|
108
|
-
- - "
|
111
|
+
- - ">="
|
109
112
|
- !ruby/object:Gem::Version
|
110
|
-
version: '4
|
113
|
+
version: '4'
|
114
|
+
- - "<"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '6'
|
111
117
|
description: Deathmatch
|
112
118
|
email:
|
113
119
|
executables:
|
@@ -149,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
155
|
version: '0'
|
150
156
|
requirements: []
|
151
157
|
rubyforge_project:
|
152
|
-
rubygems_version: 2.
|
158
|
+
rubygems_version: 2.6.8
|
153
159
|
signing_key:
|
154
160
|
specification_version: 4
|
155
161
|
summary: Conway's Game of Life
|