graphics 1.0.0b5 → 1.0.0b6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,10 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  require "minitest/autorun"
4
-
5
- $: << File.expand_path("~/Work/p4/zss/src/minitest-focus/dev/lib")
6
- require "minitest/focus"
7
-
8
4
  require "graphics"
9
5
 
10
6
  class TestBody < Minitest::Test
@@ -105,16 +101,56 @@ class TestBody < Minitest::Test
105
101
  assert_in_delta 45, b.m_a[1]
106
102
  end
107
103
 
108
- def test_bounce
104
+ def test_bounce_east
109
105
  b.x = 99
110
106
  b.a = 45
111
107
 
112
- assert_body 99, 50, 10, 45, 0, b
108
+ assert_body 99, 50, 10, 45, 0, b
109
+
110
+ # dist_to_wall_x = w.w - b.x :: 1
111
+ # m_over_xy = b.m / Math.sqrt(2) :: 7.0710678
112
+ # bounce_x = m_over_xy - dist_to_wall_x :: 6.0710678
113
+
114
+ b.move
115
+ b.bounce
116
+
117
+ assert_body w.w-6.07106, 57.07106, 8, 135, 0, b
118
+ end
119
+
120
+ def test_bounce_west
121
+ b.x = 1
122
+ b.a = 135
123
+
124
+ assert_body 1, 50, 10, 135, 0, b
125
+
126
+ b.move
127
+ b.bounce
128
+
129
+ assert_body 6.07106, w.h-42.929, 8, 45, 0, b
130
+ end
131
+
132
+ def test_bounce_north
133
+ b.y = 99
134
+ b.a = 45
135
+
136
+ assert_body 50, 99, 10, 45, 0, b
137
+
138
+ b.move
139
+ b.bounce
140
+
141
+ assert_body 57.071, w.h-6.071, 8, 315, 0, b
142
+ end
143
+
144
+ def test_bounce_south
145
+ b.y = 1
146
+ b.a = 315
147
+
148
+ assert_body 50, 1, 10, 315, 0, b
113
149
 
114
150
  b.move
115
151
  b.bounce
116
152
 
117
- assert_body 100, w.h-42.929, 8, 135, 0, b
153
+ assert_body 57.071, 6.071, 8, 45, 0, b
118
154
  end
119
155
 
120
156
  def test_clip
@@ -125,7 +161,7 @@ class TestBody < Minitest::Test
125
161
  b.move
126
162
  b.clip
127
163
 
128
- assert_body 100, 50, 10, 0, 0, b
164
+ assert_body 91, 50, 10, 0, 0, b
129
165
  end
130
166
 
131
167
  def test_clip_off_wall
@@ -137,7 +173,7 @@ class TestBody < Minitest::Test
137
173
  b.move
138
174
  b.clip_off_wall
139
175
 
140
- assert_body 100, 50, 10, 0, 186, b
176
+ assert_body 91, 50, 10, 0, 186, b
141
177
  end
142
178
 
143
179
  def test_move
@@ -0,0 +1,95 @@
1
+ require 'minitest/autorun'
2
+ require 'graphics'
3
+ require 'graphics/rainbows'
4
+
5
+ class RainbowsTest < Minitest::Test
6
+
7
+ def setup
8
+ @greyscale = Graphics::Greyscale.new
9
+ @hue = Graphics::Hue.new
10
+ @cubehelix = Graphics::Cubehelix.new
11
+ end
12
+
13
+ def test_clamping
14
+ assert_equal 360, @hue.clamp(10000, 0, 360)
15
+ assert_equal 0, @hue.clamp(-20, 0, 360)
16
+ end
17
+
18
+ def test_scaling_clamps_values
19
+ assert_equal 360, @hue.scale(10000, 0, 360)
20
+ assert_equal 0, @hue.scale(-20, 0, 360)
21
+ end
22
+
23
+ def test_scaling
24
+ # (We use assert_same instead of _equal to make sure we're
25
+ # really getting integers back)
26
+ assert_same 0, @hue.scale(0, 0, 360)
27
+ assert_same 180, @hue.scale(180, 0, 360)
28
+ assert_same 360, @hue.scale(360, 0, 360)
29
+ assert_same 30, @hue.scale(30, 0, 360)
30
+ # From smaller ranges
31
+ assert_same 0, @hue.scale(0, 180, 360)
32
+ assert_same 180, @hue.scale(50, 0, 100)
33
+ # From larger ranges
34
+ assert_same 180, @hue.scale(400, 100, 900)
35
+ end
36
+
37
+ def test_greyscale
38
+ assert_equal [0, 0, 0], @greyscale.color(0)# Black
39
+ assert_equal [127, 127, 127], @greyscale.color(180) # Mid-grey
40
+ assert_equal [255, 255, 255], @greyscale.color(360) # White
41
+ end
42
+
43
+ def test_rainbow_start_and_end
44
+ # Half a greyscale spectrum
45
+ assert_equal [127, 127, 127], @greyscale.color(50, 0, 100)
46
+ assert_equal [255, 255, 255], @greyscale.color(1000, 0, 100)
47
+ end
48
+
49
+ def test_hue
50
+ assert_equal [255, 0, 0], @hue.color(0) # Red
51
+ assert_equal [255, 127, 0], @hue.color(30) # Orange
52
+ assert_equal [255, 255, 0], @hue.color(60) # Yellow
53
+ assert_equal [0, 255, 0], @hue.color(120) # Green
54
+ assert_equal [0, 255, 255], @hue.color(180) # Cyan
55
+ assert_equal [0, 0, 255], @hue.color(240) # Blue
56
+ assert_equal [255, 0, 255], @hue.color(300) # Magenta
57
+ assert_equal [255, 0, 0], @hue.color(360) # Red
58
+ end
59
+
60
+ def test_cubehelix
61
+ # Cubehelix reference values from James Davenport's Python implementation
62
+ # Using:
63
+ # start = 0.5
64
+ # rotations = -1.5
65
+ # saturation = 1.2
66
+ # gamma = 1.0
67
+ # NOTE(Lito): These values are slightly different from my Ruby
68
+ # implementation. This could be floating-point error, or because
69
+ # cubehelix uses a slightly different scale (1-256 vs 0-360).
70
+ reference_values = [[0.0, 0.0, 0.0], # 0
71
+ [0.052086060929534689, 0.34174526961141383, 0.30658807547214501], # 90
72
+ [0.65901854013946559, 0.46936557468373608, 0.24845035363356044], # 180
73
+ [0.78295958648052344, 0.69774239781785263, 0.96714049479106534], # 270
74
+ [1.0, 1.0, 1.0]] # 360
75
+ # Move the colors from 0-1 scale to a 0-255 scale
76
+ rgb_255_reference = reference_values.map do |rgb|
77
+ rgb.map do |color|
78
+ (color*255).round
79
+ end
80
+ end
81
+
82
+ def assert_arr_in_delta exp, act, delta
83
+ exp.zip(act) do |e, a|
84
+ assert_in_delta e, a, delta
85
+ end
86
+ end
87
+
88
+ assert_arr_in_delta rgb_255_reference[0], @cubehelix.color(0), 2
89
+ assert_arr_in_delta rgb_255_reference[1], @cubehelix.color(90), 2
90
+ assert_arr_in_delta rgb_255_reference[2], @cubehelix.color(180), 2
91
+ assert_arr_in_delta rgb_255_reference[3], @cubehelix.color(270), 2
92
+ assert_arr_in_delta rgb_255_reference[4], @cubehelix.color(360), 2
93
+
94
+ end
95
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphics
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0b5
4
+ version: 1.0.0b6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Davis
@@ -10,9 +10,9 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDPjCCAiagAwIBAgIBAzANBgkqhkiG9w0BAQUFADBFMRMwEQYDVQQDDApyeWFu
13
+ MIIDijCCAnKgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMRMwEQYDVQQDDApyeWFu
14
14
  ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
15
- GRYDY29tMB4XDTE1MDkxOTIwNTEyMloXDTE2MDkxODIwNTEyMlowRTETMBEGA1UE
15
+ GRYDY29tMB4XDTE2MDkyNjAxNTczNVoXDTE3MDkyNjAxNTczNVowRTETMBEGA1UE
16
16
  AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
17
17
  JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
18
18
  b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
@@ -20,16 +20,17 @@ cert_chain:
20
20
  oOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh
21
21
  GiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt
22
22
  qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
23
- gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
24
- HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBBQUAA4IB
25
- AQB+Hx8xUgrpZa4P8H8gR8zme5kISwQrG80MbpqJV6/G3/ZicRFhN5sjwu0uHGue
26
- bd9Cymf6oIRwHVarJux2M32T6bL07Hmi07w2QaPc3MnMKB/D46SRZ2JSSGPFRBTc
27
- SilobMRoGs/7B15uGFUEnNrCB/ltMqhwwSx1r++UQPfeySHEV9uqu03E5Vb7J37O
28
- 2Er6PLXHRiYsIycD1LkMi6YnixdITRHmrqJYE2rsjaIfpIehiusVAPHkNf7qbpHq
29
- qx3h45R1CAsObX0SQDIT+rRbQrtKz1GHIZTOFYvEJjUY1XmRTZupD3CJ8Q7sDqSy
30
- NLq5jm1fq6Y9Uolu3RJbmycf
23
+ gBEfoTEGr7Zii72cx+sCAwEAAaOBhDCBgTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE
24
+ sDAdBgNVHQ4EFgQUR8V72Z3+v+2P9abCnL4wjx32T+EwIwYDVR0RBBwwGoEYcnlh
25
+ bmQtcnVieUB6ZW5zcGlkZXIuY29tMCMGA1UdEgQcMBqBGHJ5YW5kLXJ1YnlAemVu
26
+ c3BpZGVyLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAIGzgp0aZ2W9+v96ujmBcQHoC
27
+ buy0iU68MVj2VlxMyfr1KPZIh1OyhU4UO4zrkREcH8ML70v9cYHNvOd9oynRHnvC
28
+ l2tj/fD3YJ0AEkJxGrYwRWQmvMfC4bJ02bC1+rVOUIXXKp3+cUmiN4sTniof8VFo
29
+ bo/YYP4c7erpERa+9hrqygg6WQbJlk2YRlH3JXPFjmu869i2dcbR5ZLOAeEy+axH
30
+ E4oJcnPkJAr0rw504JGtlZtONZQblwmRJOIdXzolaE3NRGUzGVOUSptZppAKiavY
31
+ fO6tdKQc/5RfA8oQEkg8hrxA5PQSz4TOFJGLpFvIapEk6tMruQ0bHgkhr9auXg==
31
32
  -----END CERTIFICATE-----
32
- date: 2015-11-17 00:00:00.000000000 Z
33
+ date: 2016-11-17 00:00:00.000000000 Z
33
34
  dependencies:
34
35
  - !ruby/object:Gem::Dependency
35
36
  name: rsdl
@@ -45,20 +46,6 @@ dependencies:
45
46
  - - ~>
46
47
  - !ruby/object:Gem::Version
47
48
  version: '0.1'
48
- - !ruby/object:Gem::Dependency
49
- name: minitest
50
- requirement: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ~>
53
- - !ruby/object:Gem::Version
54
- version: '5.8'
55
- type: :development
56
- prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '5.8'
62
49
  - !ruby/object:Gem::Dependency
63
50
  name: rdoc
64
51
  requirement: !ruby/object:Gem::Requirement
@@ -93,14 +80,14 @@ dependencies:
93
80
  requirements:
94
81
  - - ~>
95
82
  - !ruby/object:Gem::Version
96
- version: '3.14'
83
+ version: '3.15'
97
84
  type: :development
98
85
  prerelease: false
99
86
  version_requirements: !ruby/object:Gem::Requirement
100
87
  requirements:
101
88
  - - ~>
102
89
  - !ruby/object:Gem::Version
103
- version: '3.14'
90
+ version: '3.15'
104
91
  description: |-
105
92
  Graphics provides a simple framework to implement games and/or
106
93
  simulations and is designed to follow mathematical conventions, NOT
@@ -142,7 +129,9 @@ files:
142
129
  - examples/logo.rb
143
130
  - examples/math.rb
144
131
  - examples/maze.rb
132
+ - examples/pi_polygon.rb
145
133
  - examples/radar.rb
134
+ - examples/rainbow_fluid.rb
146
135
  - examples/tank.rb
147
136
  - examples/tank2.rb
148
137
  - examples/targeting.rb
@@ -185,13 +174,16 @@ files:
185
174
  - graphics_setup.sh
186
175
  - lib/graphics.rb
187
176
  - lib/graphics/body.rb
177
+ - lib/graphics/decorators.rb
188
178
  - lib/graphics/extensions.rb
179
+ - lib/graphics/rainbows.rb
189
180
  - lib/graphics/simulation.rb
190
181
  - lib/graphics/trail.rb
191
182
  - lib/graphics/v.rb
192
183
  - resources/images/body.png
193
184
  - resources/images/turret.png
194
185
  - test/test_graphics.rb
186
+ - test/test_rainbows.rb
195
187
  - test/test_sdl.rb
196
188
  homepage: https://github.com/zenspider/graphics
197
189
  licenses:
metadata.gz.sig CHANGED
Binary file