rubygame 2.3.0-x86-linux
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.
- data/CREDITS +60 -0
- data/LICENSE +504 -0
- data/NEWS +252 -0
- data/README +123 -0
- data/ROADMAP +109 -0
- data/Rakefile +438 -0
- data/doc/extended_readme.rdoc +49 -0
- data/doc/getting_started.rdoc +47 -0
- data/doc/macosx_install.rdoc +70 -0
- data/doc/windows_install.rdoc +123 -0
- data/ext/rubygame/rubygame_core.so +0 -0
- data/ext/rubygame/rubygame_event.c +644 -0
- data/ext/rubygame/rubygame_event.h +48 -0
- data/ext/rubygame/rubygame_event.o +0 -0
- data/ext/rubygame/rubygame_gfx.c +942 -0
- data/ext/rubygame/rubygame_gfx.h +101 -0
- data/ext/rubygame/rubygame_gfx.o +0 -0
- data/ext/rubygame/rubygame_gfx.so +0 -0
- data/ext/rubygame/rubygame_gl.c +154 -0
- data/ext/rubygame/rubygame_gl.h +32 -0
- data/ext/rubygame/rubygame_gl.o +0 -0
- data/ext/rubygame/rubygame_image.c +252 -0
- data/ext/rubygame/rubygame_image.h +41 -0
- data/ext/rubygame/rubygame_image.o +0 -0
- data/ext/rubygame/rubygame_image.so +0 -0
- data/ext/rubygame/rubygame_joystick.c +247 -0
- data/ext/rubygame/rubygame_joystick.h +41 -0
- data/ext/rubygame/rubygame_joystick.o +0 -0
- data/ext/rubygame/rubygame_main.c +155 -0
- data/ext/rubygame/rubygame_main.h +36 -0
- data/ext/rubygame/rubygame_main.o +0 -0
- data/ext/rubygame/rubygame_mixer.c +1024 -0
- data/ext/rubygame/rubygame_mixer.h +36 -0
- data/ext/rubygame/rubygame_mixer.o +0 -0
- data/ext/rubygame/rubygame_mixer.so +0 -0
- data/ext/rubygame/rubygame_music.c +1017 -0
- data/ext/rubygame/rubygame_music.h +29 -0
- data/ext/rubygame/rubygame_music.o +0 -0
- data/ext/rubygame/rubygame_screen.c +448 -0
- data/ext/rubygame/rubygame_screen.h +43 -0
- data/ext/rubygame/rubygame_screen.o +0 -0
- data/ext/rubygame/rubygame_shared.c +272 -0
- data/ext/rubygame/rubygame_shared.h +68 -0
- data/ext/rubygame/rubygame_shared.o +0 -0
- data/ext/rubygame/rubygame_sound.c +863 -0
- data/ext/rubygame/rubygame_sound.h +29 -0
- data/ext/rubygame/rubygame_sound.o +0 -0
- data/ext/rubygame/rubygame_surface.c +1151 -0
- data/ext/rubygame/rubygame_surface.h +62 -0
- data/ext/rubygame/rubygame_surface.o +0 -0
- data/ext/rubygame/rubygame_time.c +183 -0
- data/ext/rubygame/rubygame_time.h +32 -0
- data/ext/rubygame/rubygame_time.o +0 -0
- data/ext/rubygame/rubygame_ttf.c +599 -0
- data/ext/rubygame/rubygame_ttf.h +69 -0
- data/ext/rubygame/rubygame_ttf.o +0 -0
- data/ext/rubygame/rubygame_ttf.so +0 -0
- data/lib/rubygame.rb +41 -0
- data/lib/rubygame/clock.rb +128 -0
- data/lib/rubygame/color.rb +79 -0
- data/lib/rubygame/color/models/base.rb +111 -0
- data/lib/rubygame/color/models/hsl.rb +153 -0
- data/lib/rubygame/color/models/hsv.rb +149 -0
- data/lib/rubygame/color/models/rgb.rb +78 -0
- data/lib/rubygame/color/palettes/css.rb +49 -0
- data/lib/rubygame/color/palettes/palette.rb +100 -0
- data/lib/rubygame/color/palettes/x11.rb +177 -0
- data/lib/rubygame/constants.rb +238 -0
- data/lib/rubygame/event.rb +313 -0
- data/lib/rubygame/ftor.rb +370 -0
- data/lib/rubygame/hotspot.rb +265 -0
- data/lib/rubygame/keyconstants.rb +237 -0
- data/lib/rubygame/mediabag.rb +94 -0
- data/lib/rubygame/named_resource.rb +254 -0
- data/lib/rubygame/queue.rb +288 -0
- data/lib/rubygame/rect.rb +612 -0
- data/lib/rubygame/sfont.rb +223 -0
- data/lib/rubygame/sprite.rb +511 -0
- data/samples/FreeSans.ttf +0 -0
- data/samples/GPL.txt +340 -0
- data/samples/README +40 -0
- data/samples/chimp.bmp +0 -0
- data/samples/chimp.rb +302 -0
- data/samples/demo_gl.rb +151 -0
- data/samples/demo_gl_tex.rb +197 -0
- data/samples/demo_music.rb +77 -0
- data/samples/demo_rubygame.rb +296 -0
- data/samples/demo_sfont.rb +52 -0
- data/samples/demo_ttf.rb +193 -0
- data/samples/demo_utf8.rb +53 -0
- data/samples/fist.bmp +0 -0
- data/samples/load_and_blit.rb +22 -0
- data/samples/panda.png +0 -0
- data/samples/punch.wav +0 -0
- data/samples/ruby.png +0 -0
- data/samples/song.ogg +0 -0
- data/samples/term16.png +0 -0
- data/samples/whiff.wav +0 -0
- data/test/audio_spec.rb +236 -0
- data/test/color_spec.rb +544 -0
- data/test/image.png +0 -0
- data/test/music_spec.rb +727 -0
- data/test/named_resource_spec.rb +211 -0
- data/test/short.ogg +0 -0
- data/test/sound_spec.rb +564 -0
- data/test/surface_spec.rb +219 -0
- data/test/test_crop.rb +45 -0
- data/test/test_rect.rb +841 -0
- metadata +174 -0
@@ -0,0 +1,219 @@
|
|
1
|
+
# This is mostly for regression testing and bugfix confirmation at the moment.
|
2
|
+
|
3
|
+
require 'rubygame'
|
4
|
+
include Rubygame
|
5
|
+
|
6
|
+
samples_dir = File.join( File.dirname(__FILE__), "..", "samples", "")
|
7
|
+
test_dir = File.join( File.dirname(__FILE__), "" )
|
8
|
+
|
9
|
+
test_image = test_dir + "image.png"
|
10
|
+
not_image = test_dir + "short.ogg"
|
11
|
+
panda = samples_dir + "panda.png"
|
12
|
+
dne = test_dir + "does_not_exist.png"
|
13
|
+
|
14
|
+
|
15
|
+
describe Surface, "(creation)" do
|
16
|
+
before(:each) do
|
17
|
+
Rubygame.init()
|
18
|
+
@screen = Screen.new([100,100])
|
19
|
+
end
|
20
|
+
|
21
|
+
after(:each) do
|
22
|
+
Rubygame.quit()
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should raise TypeError when #new size is not an Array" do
|
26
|
+
lambda {
|
27
|
+
Surface.new("not an array")
|
28
|
+
}.should raise_error(TypeError)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should raise ArgumentError when #new size is an Array of non-Numerics" do
|
32
|
+
lambda {
|
33
|
+
Surface.new(["not", "numeric", "members"])
|
34
|
+
}.should raise_error(TypeError)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should raise ArgumentError when #new size is too short" do
|
38
|
+
lambda {
|
39
|
+
Surface.new([1])
|
40
|
+
}.should raise_error(ArgumentError)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
describe Surface, "(loading)" do
|
47
|
+
before :each do
|
48
|
+
unless( Rubygame::VERSIONS[:sdl_image] )
|
49
|
+
raise "Can't test image loading, no SDL_image installed."
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should load image to a new Surface" do
|
54
|
+
surface = Surface.load( test_image )
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should raise an error if file is not an image" do
|
58
|
+
lambda{ Surface.load( not_image ) }.should raise_error( SDLError )
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should raise an error if file doesn't exist" do
|
62
|
+
lambda{ Surface.load( dne ) }.should raise_error( SDLError )
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
describe Surface, "(loading from string)" do
|
68
|
+
before :each do
|
69
|
+
unless( Rubygame::VERSIONS[:sdl_image] )
|
70
|
+
raise "Can't test image loading, no SDL_image installed."
|
71
|
+
end
|
72
|
+
|
73
|
+
@data = "\x42\x4d\x3a\x00\x00\x00\x00\x00"+
|
74
|
+
"\x00\x00\x36\x00\x00\x00\x28\x00"+
|
75
|
+
"\x00\x00\x01\x00\x00\x00\x01\x00"+
|
76
|
+
"\x00\x00\x01\x00\x18\x00\x00\x00"+
|
77
|
+
"\x00\x00\x04\x00\x00\x00\x13\x0b"+
|
78
|
+
"\x00\x00\x13\x0b\x00\x00\x00\x00"+
|
79
|
+
"\x00\x00\x00\x00\x00\x00\x00\x00"+
|
80
|
+
"\xff\x00"
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should be able to load from string" do
|
84
|
+
surf = Surface.load_from_string(@data)
|
85
|
+
surf.get_at(0,0).should == [255,0,0,255]
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should be able to load from string (typed)" do
|
89
|
+
surf = Surface.load_from_string(@data,"BMP")
|
90
|
+
surf.get_at(0,0).should == [255,0,0,255]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
describe Surface, "(named resource)" do
|
96
|
+
before :each do
|
97
|
+
Surface.autoload_dirs = [samples_dir]
|
98
|
+
end
|
99
|
+
|
100
|
+
after :each do
|
101
|
+
Surface.autoload_dirs = []
|
102
|
+
Surface.instance_eval { @resources = {} }
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should include NamedResource" do
|
106
|
+
Surface.included_modules.should include(NamedResource)
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should respond to :[]" do
|
110
|
+
Surface.should respond_to(:[])
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should respond to :[]=" do
|
114
|
+
Surface.should respond_to(:[]=)
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should allow setting resources" do
|
118
|
+
s = Surface.load(panda)
|
119
|
+
Surface["panda"] = s
|
120
|
+
Surface["panda"].should == s
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should reject non-Surface resources" do
|
124
|
+
lambda { Surface["foo"] = "bar" }.should raise_error(TypeError)
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should autoload images as Surface instances" do
|
128
|
+
unless( Rubygame::VERSIONS[:sdl_image] )
|
129
|
+
raise "Can't test image loading, no SDL_image installed."
|
130
|
+
end
|
131
|
+
|
132
|
+
Surface["panda.png"].should be_instance_of(Surface)
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should return nil for nonexisting files" do
|
136
|
+
unless( Rubygame::VERSIONS[:sdl_image] )
|
137
|
+
raise "Can't test image loading, no SDL_image installed."
|
138
|
+
end
|
139
|
+
|
140
|
+
Surface["foobar.png"].should be_nil
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should set names of autoload Surfaces" do
|
144
|
+
unless( Rubygame::VERSIONS[:sdl_image] )
|
145
|
+
raise "Can't test image loading, no SDL_image installed."
|
146
|
+
end
|
147
|
+
|
148
|
+
Surface["panda.png"].name.should == "panda.png"
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
|
153
|
+
|
154
|
+
describe Surface, "(blit)" do
|
155
|
+
before(:each) do
|
156
|
+
Rubygame.init()
|
157
|
+
@screen = Screen.new([100,100])
|
158
|
+
@surface = Surface.new([100,100])
|
159
|
+
end
|
160
|
+
|
161
|
+
after(:each) do
|
162
|
+
Rubygame.quit
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should raise TypeError when #blit target is not a Surface" do
|
166
|
+
lambda {
|
167
|
+
@surface.blit("not a surface", [0,0])
|
168
|
+
}.should raise_error(TypeError)
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should raise TypeError when #blit dest is not an Array" do
|
172
|
+
lambda {
|
173
|
+
@surface.blit(@screen, "foo")
|
174
|
+
}.should raise_error(TypeError)
|
175
|
+
end
|
176
|
+
|
177
|
+
it "should raise TypeError when #blit src is not an Array" do
|
178
|
+
lambda {
|
179
|
+
@surface.blit(@screen, [0,0], "foo")
|
180
|
+
}.should raise_error(TypeError)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
|
185
|
+
|
186
|
+
describe Surface, "(fill)" do
|
187
|
+
before(:each) do
|
188
|
+
Rubygame.init()
|
189
|
+
@surface = Surface.new([100,100])
|
190
|
+
end
|
191
|
+
|
192
|
+
after(:each) do
|
193
|
+
Rubygame.quit
|
194
|
+
end
|
195
|
+
|
196
|
+
it "should raise TypeError when #fill color is not an Array" do
|
197
|
+
lambda {
|
198
|
+
@surface.fill(nil)
|
199
|
+
}.should raise_error(TypeError)
|
200
|
+
end
|
201
|
+
|
202
|
+
it "should raise TypeError when #fill color is an Array of non-Numerics" do
|
203
|
+
lambda {
|
204
|
+
@surface.fill(["non", "numeric", "members"])
|
205
|
+
}.should raise_error(TypeError)
|
206
|
+
end
|
207
|
+
|
208
|
+
it "should raise ArgumentError when #fill color is too short" do
|
209
|
+
lambda {
|
210
|
+
@surface.fill([0xff, 0xff])
|
211
|
+
}.should raise_error(TypeError)
|
212
|
+
end
|
213
|
+
|
214
|
+
it "should raise TypeError when #fill rect is not an Array" do
|
215
|
+
lambda {
|
216
|
+
@surface.fill([0xff, 0xff, 0xff], "not_an_array")
|
217
|
+
}.should raise_error(TypeError)
|
218
|
+
end
|
219
|
+
end
|
data/test/test_crop.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
puts \
|
4
|
+
"This test is almost certainly not correct, and needs a lot of improvement.
|
5
|
+
Don't trust the results too much.
|
6
|
+
~~~~~~~~~~"
|
7
|
+
|
8
|
+
require "rubygame"
|
9
|
+
|
10
|
+
screen = Rubygame::Screen.set_mode([200,200])
|
11
|
+
surf = Rubygame::Surface.new([100,100]).fill([0,0,255])
|
12
|
+
widesurf = Rubygame::Surface.new([250,100]).fill([0,0,255])
|
13
|
+
tallsurf = Rubygame::Surface.new([100,250]).fill([0,0,255])
|
14
|
+
bigsurf = Rubygame::Surface.new([250,250]).fill([0,0,255])
|
15
|
+
|
16
|
+
tests = [
|
17
|
+
[surf,[
|
18
|
+
[50,50], # fully inside
|
19
|
+
[-50,0], # off left
|
20
|
+
[0,-50], # off top
|
21
|
+
[150,0], # off right
|
22
|
+
[0,150], # off bottom
|
23
|
+
[-50,-50], # off top-left
|
24
|
+
[150,-50], # off top-right
|
25
|
+
[150,150], # off bottom-right
|
26
|
+
[-50,150], # off bottom-left
|
27
|
+
]],
|
28
|
+
[widesurf,[[-25,50]],], # off left and right
|
29
|
+
[tallsurf,[[50,-25]],], # off top and bottom
|
30
|
+
[bigsurf,[[-25,-25]],], # off left, top, right, bottom
|
31
|
+
]
|
32
|
+
|
33
|
+
tests.each{ |test|
|
34
|
+
test[1].each{ |pos|
|
35
|
+
x = [0,pos[0]].max
|
36
|
+
y = [0,pos[1]].max
|
37
|
+
w = [pos[0]+test[0].w,200].min - x
|
38
|
+
h = [pos[1]+test[0].h,200].min - y
|
39
|
+
if (rect = test[0].blit(screen,pos)) == [x,y,w,h]
|
40
|
+
puts "Correct! %s"%rect
|
41
|
+
else
|
42
|
+
puts "Incorrect! %s should have been [%d,%d,%d,%d]"%[rect,x,y,w,h]
|
43
|
+
end
|
44
|
+
}
|
45
|
+
}
|
data/test/test_rect.rb
ADDED
@@ -0,0 +1,841 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# This program is PUBLIC DOMAIN.
|
4
|
+
# It is distributed in the hope that it will be useful,
|
5
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
6
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
7
|
+
|
8
|
+
|
9
|
+
# This is a unit test suite for Rubygame Rects.
|
10
|
+
# However. it is BY NO MEANS COMPREHENSIVE.
|
11
|
+
#
|
12
|
+
# If you have the time and motivation, please consider contributing
|
13
|
+
# a few more tests to improve this suite.
|
14
|
+
#
|
15
|
+
# The following methods (of Rect if unspecified) have NO TESTS AT ALL:
|
16
|
+
# new_from_object
|
17
|
+
# collide_hash
|
18
|
+
# collide_hash_all
|
19
|
+
# collide_array
|
20
|
+
# collide_array_all
|
21
|
+
# collide_point?
|
22
|
+
# collide_rect?
|
23
|
+
# contain?
|
24
|
+
# inflate!
|
25
|
+
# move
|
26
|
+
# move!
|
27
|
+
# normalize
|
28
|
+
# normalize!
|
29
|
+
# union_all
|
30
|
+
# union_all!
|
31
|
+
# Surface#make_rect
|
32
|
+
#
|
33
|
+
# The following methods (of Rect if unspecified) have NOT ENOUGH TESTS:
|
34
|
+
# union
|
35
|
+
# union!
|
36
|
+
#
|
37
|
+
# The following methods (of Rect if unspecified) have ENOUGH TESTS:
|
38
|
+
# initialize
|
39
|
+
# to_s
|
40
|
+
# inspect
|
41
|
+
# []
|
42
|
+
# []=
|
43
|
+
# x
|
44
|
+
# y
|
45
|
+
# w
|
46
|
+
# h
|
47
|
+
# width
|
48
|
+
# height
|
49
|
+
# size
|
50
|
+
# left
|
51
|
+
# top
|
52
|
+
# right
|
53
|
+
# bottom
|
54
|
+
# center
|
55
|
+
# centerx
|
56
|
+
# centery
|
57
|
+
# topleft
|
58
|
+
# topright
|
59
|
+
# bottomleft
|
60
|
+
# bottomright
|
61
|
+
# midleft
|
62
|
+
# midtop
|
63
|
+
# midright
|
64
|
+
# midbottomX
|
65
|
+
# clip
|
66
|
+
# clip!
|
67
|
+
#
|
68
|
+
|
69
|
+
# --
|
70
|
+
# Table of Contents:
|
71
|
+
# INITIALIZATION
|
72
|
+
# CONVERSION
|
73
|
+
# PRIMARY ATTRIBUTES
|
74
|
+
# SIDES
|
75
|
+
# CENTERS
|
76
|
+
# CORNERS
|
77
|
+
# MIDPOINTS
|
78
|
+
# CLAMP
|
79
|
+
# INFLATE
|
80
|
+
# CLIP
|
81
|
+
# ++
|
82
|
+
|
83
|
+
|
84
|
+
require "test/unit"
|
85
|
+
require "rubygame"
|
86
|
+
Rect = Rubygame::Rect
|
87
|
+
|
88
|
+
# A class to test Rect.new_from_object()'s ability to extract a Rect from
|
89
|
+
# an object which responds to :rect
|
90
|
+
class RectParent
|
91
|
+
attr_reader :rect
|
92
|
+
def initialize(r)
|
93
|
+
@rect = r
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
class TC_Rect < Test::Unit::TestCase
|
99
|
+
|
100
|
+
# --
|
101
|
+
# INITALIZATION
|
102
|
+
# ++
|
103
|
+
|
104
|
+
# Test init'n from 1 Array with 4 entries
|
105
|
+
def test_new1_arr
|
106
|
+
rect = Rect.new([3,5,20,40])
|
107
|
+
assert_equal([3,5,20,40],rect)
|
108
|
+
end
|
109
|
+
|
110
|
+
# Test init'n from 1 Rect
|
111
|
+
def test_new1_rect
|
112
|
+
base = Rect.new([3,5,20,40])
|
113
|
+
rect = Rect.new(base)
|
114
|
+
assert_equal([3,5,20,40],rect)
|
115
|
+
end
|
116
|
+
|
117
|
+
# Test init'n from 2 Arrays with 2 entries each
|
118
|
+
def test_new2
|
119
|
+
rect = Rect.new([3,5],[20,40])
|
120
|
+
assert_equal([3,5,20,40],rect)
|
121
|
+
end
|
122
|
+
|
123
|
+
# Test init'n from 4 Numerics
|
124
|
+
def test_new4
|
125
|
+
rect = Rect.new(3,5,20,40)
|
126
|
+
assert_equal([3,5,20,40],rect)
|
127
|
+
end
|
128
|
+
|
129
|
+
# Test #new_from_object with a Rect
|
130
|
+
def test_nfo_rect
|
131
|
+
rect = Rect.new_from_object(Rect.new(3,5,20,40))
|
132
|
+
assert_equal([3,5,20,40],rect)
|
133
|
+
assert_kind_of(Rect,rect)
|
134
|
+
end
|
135
|
+
|
136
|
+
# Test #new_from_object with an Array
|
137
|
+
def test_nfo_rect
|
138
|
+
rect = Rect.new_from_object([3,5,20,40])
|
139
|
+
assert_equal([3,5,20,40],rect)
|
140
|
+
assert_kind_of(Rect,rect)
|
141
|
+
end
|
142
|
+
|
143
|
+
# Test #new_from_object with a .rect attribute which is a Rect
|
144
|
+
def test_nfo_rect_attr_rect
|
145
|
+
|
146
|
+
rect = Rect.new_from_object(RectParent.new(Rect.new(3,5,20,40)))
|
147
|
+
assert_equal([3,5,20,40],rect)
|
148
|
+
assert_kind_of(Rect,rect)
|
149
|
+
end
|
150
|
+
|
151
|
+
# Test #new_from_object with a .rect attribute which is an Array
|
152
|
+
def test_nfo_rect_attr_rect
|
153
|
+
rect = Rect.new_from_object(RectParent.new([3,5,20,40]))
|
154
|
+
assert_equal([3,5,20,40],rect)
|
155
|
+
assert_kind_of(Rect,rect)
|
156
|
+
end
|
157
|
+
|
158
|
+
# --
|
159
|
+
# CONVERSION
|
160
|
+
# ++
|
161
|
+
|
162
|
+
# Test that output from #to_s is proper with a Rect of Integers
|
163
|
+
def test_to_s_int
|
164
|
+
rect = Rect.new(3,5,20,40)
|
165
|
+
assert_equal("#<Rect [3,5,20,40]>",rect.to_s)
|
166
|
+
end
|
167
|
+
|
168
|
+
# Test that output from #to_s is proper with a Rect of Floats
|
169
|
+
def test_to_s_float
|
170
|
+
rect = Rect.new(3.15,5.2,20.3,40.5)
|
171
|
+
assert_equal("#<Rect [3.15,5.2,20.3,40.5]>",rect.to_s)
|
172
|
+
end
|
173
|
+
|
174
|
+
# Test that output from #inspect is proper with a Rect of Integers
|
175
|
+
def test_inspect_int
|
176
|
+
rect = Rect.new(3,5,20,40)
|
177
|
+
assert_equal("#<Rect:#{rect.object_id} [3,5,20,40]>",rect.inspect)
|
178
|
+
end
|
179
|
+
|
180
|
+
# Test that output from #inspect is proper with a Rect of Floats
|
181
|
+
def test_inspect_float
|
182
|
+
rect = Rect.new(3.15,5.2,20.3,40.5)
|
183
|
+
assert_equal("#<Rect:#{rect.object_id} [3.15,5.2,20.3,40.5]>",rect.inspect)
|
184
|
+
end
|
185
|
+
|
186
|
+
# --
|
187
|
+
# PRIMARY ATTRIBUTES
|
188
|
+
# ++
|
189
|
+
|
190
|
+
def test_x
|
191
|
+
rect = Rect.new(3,5,20,40)
|
192
|
+
assert_equal(3,rect.x)
|
193
|
+
end
|
194
|
+
|
195
|
+
def test_set_x
|
196
|
+
rect = Rect.new(3,5,20,40)
|
197
|
+
rect.x=9
|
198
|
+
assert_equal([9,5,20,40],rect)
|
199
|
+
end
|
200
|
+
|
201
|
+
def test_index_0
|
202
|
+
rect = Rect.new(3,5,20,40)
|
203
|
+
assert_equal(3,rect[0])
|
204
|
+
end
|
205
|
+
|
206
|
+
def test_set_index_0
|
207
|
+
rect = Rect.new(3,5,20,40)
|
208
|
+
rect[0]=9
|
209
|
+
assert_equal([9,5,20,40],rect)
|
210
|
+
end
|
211
|
+
|
212
|
+
|
213
|
+
def test_y
|
214
|
+
rect = Rect.new(3,5,20,40)
|
215
|
+
assert_equal(5,rect.y)
|
216
|
+
end
|
217
|
+
|
218
|
+
def test_set_y
|
219
|
+
rect = Rect.new(3,5,20,40)
|
220
|
+
rect.y=23
|
221
|
+
assert_equal([3,23,20,40],rect)
|
222
|
+
end
|
223
|
+
|
224
|
+
def test_index_1
|
225
|
+
rect = Rect.new(3,5,20,40)
|
226
|
+
assert_equal(5,rect[1])
|
227
|
+
end
|
228
|
+
|
229
|
+
def test_set_index_1
|
230
|
+
rect = Rect.new(3,5,20,40)
|
231
|
+
rect[1]=9
|
232
|
+
assert_equal([3,9,20,40],rect)
|
233
|
+
end
|
234
|
+
|
235
|
+
|
236
|
+
def test_w
|
237
|
+
rect = Rect.new(3,5,20,40)
|
238
|
+
assert_equal(20,rect.w)
|
239
|
+
end
|
240
|
+
|
241
|
+
def test_set_w
|
242
|
+
rect = Rect.new(3,5,20,40)
|
243
|
+
rect.w=9
|
244
|
+
assert_equal([3,5,9,40],rect)
|
245
|
+
end
|
246
|
+
|
247
|
+
def test_width
|
248
|
+
rect = Rect.new(3,5,20,40)
|
249
|
+
assert_equal(20,rect.width)
|
250
|
+
end
|
251
|
+
|
252
|
+
def test_set_width
|
253
|
+
rect = Rect.new(3,5,20,40)
|
254
|
+
rect.width=9
|
255
|
+
assert_equal([3,5,9,40],rect)
|
256
|
+
end
|
257
|
+
|
258
|
+
def test_index_2
|
259
|
+
rect = Rect.new(3,5,20,40)
|
260
|
+
assert_equal(20,rect[2])
|
261
|
+
end
|
262
|
+
|
263
|
+
def test_set_index_2
|
264
|
+
rect = Rect.new(3,5,20,40)
|
265
|
+
rect[2]=9
|
266
|
+
assert_equal([3,5,9,40],rect)
|
267
|
+
end
|
268
|
+
|
269
|
+
|
270
|
+
def test_h
|
271
|
+
rect = Rect.new(3,5,20,40)
|
272
|
+
assert_equal(40,rect.h)
|
273
|
+
end
|
274
|
+
|
275
|
+
def test_set_h
|
276
|
+
rect = Rect.new(3,5,20,40)
|
277
|
+
rect.h=11
|
278
|
+
assert_equal([3,5,20,11],rect)
|
279
|
+
end
|
280
|
+
|
281
|
+
def test_height
|
282
|
+
rect = Rect.new(3,5,20,40)
|
283
|
+
assert_equal(40,rect.height)
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_set_height
|
287
|
+
rect = Rect.new(3,5,20,40)
|
288
|
+
rect.height=9
|
289
|
+
assert_equal([3,5,20,9],rect)
|
290
|
+
end
|
291
|
+
|
292
|
+
|
293
|
+
def test_size
|
294
|
+
rect = Rect.new(3,5,20,40)
|
295
|
+
assert_equal([20,40],rect.size)
|
296
|
+
end
|
297
|
+
|
298
|
+
def test_set_size
|
299
|
+
rect = Rect.new(3,5,20,40)
|
300
|
+
rect.size = [9,5]
|
301
|
+
assert_equal([3,5,9,5],rect)
|
302
|
+
end
|
303
|
+
|
304
|
+
# --
|
305
|
+
# SIDES
|
306
|
+
# ++
|
307
|
+
|
308
|
+
def test_left
|
309
|
+
rect = Rect.new(3,5,20,40)
|
310
|
+
assert_equal(3,rect.left)
|
311
|
+
end
|
312
|
+
|
313
|
+
def test_set_left
|
314
|
+
rect = Rect.new(3,5,20,40)
|
315
|
+
rect.left=9
|
316
|
+
assert_equal([9,5,20,40],rect)
|
317
|
+
end
|
318
|
+
|
319
|
+
|
320
|
+
def test_top
|
321
|
+
rect = Rect.new(3,5,20,40)
|
322
|
+
assert_equal(5,rect.top)
|
323
|
+
end
|
324
|
+
|
325
|
+
def test_set_top
|
326
|
+
rect = Rect.new(3,5,20,40)
|
327
|
+
rect.top=9
|
328
|
+
assert_equal([3,9,20,40],rect)
|
329
|
+
end
|
330
|
+
|
331
|
+
|
332
|
+
def test_right
|
333
|
+
rect = Rect.new(3,5,20,40)
|
334
|
+
assert_equal(23,rect.right)
|
335
|
+
end
|
336
|
+
|
337
|
+
def test_set_right
|
338
|
+
rect = Rect.new(3,5,20,40)
|
339
|
+
rect.right = 42
|
340
|
+
assert_equal([22,5,20,40],rect)
|
341
|
+
end
|
342
|
+
|
343
|
+
|
344
|
+
def test_bottom
|
345
|
+
rect = Rect.new(3,5,20,40)
|
346
|
+
assert_equal(45,rect.bottom)
|
347
|
+
end
|
348
|
+
|
349
|
+
def test_set_bottom
|
350
|
+
rect = Rect.new(3,5,20,40)
|
351
|
+
rect.bottom = 42
|
352
|
+
assert_equal([3,2,20,40],rect)
|
353
|
+
end
|
354
|
+
|
355
|
+
# --
|
356
|
+
# CENTERS
|
357
|
+
# ++
|
358
|
+
|
359
|
+
def test_center
|
360
|
+
rect = Rect.new(3,5,20,40)
|
361
|
+
assert_equal([13,25],rect.center)
|
362
|
+
end
|
363
|
+
|
364
|
+
def test_set_center
|
365
|
+
rect = Rect.new(3,5,20,40)
|
366
|
+
rect.center = [16,42]
|
367
|
+
assert_equal([6,22,20,40],rect)
|
368
|
+
end
|
369
|
+
|
370
|
+
def test_centerx
|
371
|
+
rect = Rect.new(3,5,20,40)
|
372
|
+
assert_equal(13,rect.centerx)
|
373
|
+
end
|
374
|
+
|
375
|
+
def test_set_centerx
|
376
|
+
rect = Rect.new(3,5,20,40)
|
377
|
+
rect.centerx = 16
|
378
|
+
assert_equal([6,5,20,40],rect)
|
379
|
+
end
|
380
|
+
|
381
|
+
def test_centery
|
382
|
+
rect = Rect.new(3,5,20,40)
|
383
|
+
assert_equal(13,rect.centerx)
|
384
|
+
end
|
385
|
+
|
386
|
+
def test_set_centery
|
387
|
+
rect = Rect.new(3,5,20,40)
|
388
|
+
rect.centery = 43
|
389
|
+
assert_equal([3,23,20,40],rect)
|
390
|
+
end
|
391
|
+
|
392
|
+
# --
|
393
|
+
# CORNERS
|
394
|
+
# ++
|
395
|
+
|
396
|
+
def test_topleft
|
397
|
+
rect = Rect.new(3,5,20,40)
|
398
|
+
assert_equal([3,5],rect.topleft)
|
399
|
+
end
|
400
|
+
|
401
|
+
def test_set_topleft
|
402
|
+
rect = Rect.new(3,5,20,40)
|
403
|
+
rect.topleft = [6,2]
|
404
|
+
assert_equal([6,2,20,40],rect)
|
405
|
+
end
|
406
|
+
|
407
|
+
def test_tl
|
408
|
+
rect = Rect.new(3,5,20,40)
|
409
|
+
assert_equal([3,5],rect.tl)
|
410
|
+
end
|
411
|
+
|
412
|
+
def test_set_tl
|
413
|
+
rect = Rect.new(3,5,20,40)
|
414
|
+
rect.tl = [6,2]
|
415
|
+
assert_equal([6,2,20,40],rect)
|
416
|
+
end
|
417
|
+
|
418
|
+
|
419
|
+
def test_topright
|
420
|
+
rect = Rect.new(3,5,20,40)
|
421
|
+
assert_equal([23,5],rect.topright)
|
422
|
+
end
|
423
|
+
|
424
|
+
def test_set_topright
|
425
|
+
rect = Rect.new(3,5,20,40)
|
426
|
+
rect.topright = [26,2]
|
427
|
+
assert_equal([6,2,20,40],rect)
|
428
|
+
end
|
429
|
+
|
430
|
+
def test_tr
|
431
|
+
rect = Rect.new(3,5,20,40)
|
432
|
+
assert_equal([23,5],rect.tr)
|
433
|
+
end
|
434
|
+
|
435
|
+
def test_set_tr
|
436
|
+
rect = Rect.new(3,5,20,40)
|
437
|
+
rect.tr = [26,2]
|
438
|
+
assert_equal([6,2,20,40],rect)
|
439
|
+
end
|
440
|
+
|
441
|
+
|
442
|
+
def test_bottomright
|
443
|
+
rect = Rect.new(3,5,20,40)
|
444
|
+
assert_equal([23,45],rect.bottomright)
|
445
|
+
end
|
446
|
+
|
447
|
+
def test_set_bottomright
|
448
|
+
rect = Rect.new(3,5,20,40)
|
449
|
+
rect.bottomright = [26,42]
|
450
|
+
assert_equal([6,2,20,40],rect)
|
451
|
+
end
|
452
|
+
|
453
|
+
def test_br
|
454
|
+
rect = Rect.new(3,5,20,40)
|
455
|
+
assert_equal([23,45],rect.br)
|
456
|
+
end
|
457
|
+
|
458
|
+
def test_set_br
|
459
|
+
rect = Rect.new(3,5,20,40)
|
460
|
+
rect.br = [26,42]
|
461
|
+
assert_equal([6,2,20,40],rect)
|
462
|
+
end
|
463
|
+
|
464
|
+
|
465
|
+
def test_bottomleft
|
466
|
+
rect = Rect.new(3,5,20,40)
|
467
|
+
assert_equal([3,45],rect.bottomleft)
|
468
|
+
end
|
469
|
+
|
470
|
+
def test_set_bottomleft
|
471
|
+
rect = Rect.new(3,5,20,40)
|
472
|
+
rect.bottomleft = [6,42]
|
473
|
+
assert_equal([6,2,20,40],rect)
|
474
|
+
end
|
475
|
+
|
476
|
+
def test_bl
|
477
|
+
rect = Rect.new(3,5,20,40)
|
478
|
+
assert_equal([3,45],rect.bl)
|
479
|
+
end
|
480
|
+
|
481
|
+
def test_set_bl
|
482
|
+
rect = Rect.new(3,5,20,40)
|
483
|
+
rect.bl = [6,42]
|
484
|
+
assert_equal([6,2,20,40],rect)
|
485
|
+
end
|
486
|
+
|
487
|
+
# --
|
488
|
+
# MIDPOINTS
|
489
|
+
# ++
|
490
|
+
|
491
|
+
def test_midleft
|
492
|
+
rect = Rect.new(3,5,20,40)
|
493
|
+
assert_equal([3,25],rect.midleft)
|
494
|
+
end
|
495
|
+
|
496
|
+
def test_set_midleft
|
497
|
+
rect = Rect.new(3,5,20,40)
|
498
|
+
rect.midleft = [6,22]
|
499
|
+
assert_equal([6,2,20,40],rect)
|
500
|
+
end
|
501
|
+
|
502
|
+
def test_ml
|
503
|
+
rect = Rect.new(3,5,20,40)
|
504
|
+
assert_equal([3,25],rect.ml)
|
505
|
+
end
|
506
|
+
|
507
|
+
def test_set_ml
|
508
|
+
rect = Rect.new(3,5,20,40)
|
509
|
+
rect.ml = [6,22]
|
510
|
+
assert_equal([6,2,20,40],rect)
|
511
|
+
end
|
512
|
+
|
513
|
+
|
514
|
+
def test_midtop
|
515
|
+
rect = Rect.new(3,5,20,40)
|
516
|
+
assert_equal([13,5],rect.midtop)
|
517
|
+
end
|
518
|
+
|
519
|
+
def test_set_midtop
|
520
|
+
rect = Rect.new(3,5,20,40)
|
521
|
+
rect.midtop = [16,2]
|
522
|
+
assert_equal([6,2,20,40],rect)
|
523
|
+
end
|
524
|
+
|
525
|
+
def test_mt
|
526
|
+
rect = Rect.new(3,5,20,40)
|
527
|
+
assert_equal([13,5],rect.mt)
|
528
|
+
end
|
529
|
+
|
530
|
+
def test_set_mt
|
531
|
+
rect = Rect.new(3,5,20,40)
|
532
|
+
rect.mt = [16,2]
|
533
|
+
assert_equal([6,2,20,40],rect)
|
534
|
+
end
|
535
|
+
|
536
|
+
|
537
|
+
def test_midright
|
538
|
+
rect = Rect.new(3,5,20,40)
|
539
|
+
assert_equal([23,25],rect.midright)
|
540
|
+
end
|
541
|
+
|
542
|
+
def test_set_midright
|
543
|
+
rect = Rect.new(3,5,20,40)
|
544
|
+
rect.midright = [26,22]
|
545
|
+
assert_equal([6,2,20,40],rect)
|
546
|
+
end
|
547
|
+
|
548
|
+
def test_mr
|
549
|
+
rect = Rect.new(3,5,20,40)
|
550
|
+
assert_equal([23,25],rect.mr)
|
551
|
+
end
|
552
|
+
|
553
|
+
def test_set_mr
|
554
|
+
rect = Rect.new(3,5,20,40)
|
555
|
+
rect.mr = [26,22]
|
556
|
+
assert_equal([6,2,20,40],rect)
|
557
|
+
end
|
558
|
+
|
559
|
+
|
560
|
+
def test_midbottom
|
561
|
+
rect = Rect.new(3,5,20,40)
|
562
|
+
assert_equal([13,45],rect.midbottom)
|
563
|
+
end
|
564
|
+
|
565
|
+
def test_set_midbottom
|
566
|
+
rect = Rect.new(3,5,20,40)
|
567
|
+
rect.midbottom = [16,42]
|
568
|
+
assert_equal([6,2,20,40],rect)
|
569
|
+
end
|
570
|
+
|
571
|
+
def test_mb
|
572
|
+
rect = Rect.new(3,5,20,40)
|
573
|
+
assert_equal([13,45],rect.mb)
|
574
|
+
end
|
575
|
+
|
576
|
+
def test_set_mb
|
577
|
+
rect = Rect.new(3,5,20,40)
|
578
|
+
rect.mb = [16,42]
|
579
|
+
assert_equal([6,2,20,40],rect)
|
580
|
+
end
|
581
|
+
|
582
|
+
|
583
|
+
# --
|
584
|
+
# CLAMP
|
585
|
+
# ++
|
586
|
+
|
587
|
+
# Clamp a rect that fits.
|
588
|
+
def test_clamp_fits
|
589
|
+
rect_a = Rect.new(0,0,20,20)
|
590
|
+
rect_b = Rect.new(40,10,6,6)
|
591
|
+
assert_equal([14,10,6,6],rect_b.clamp(rect_a))
|
592
|
+
end
|
593
|
+
|
594
|
+
# Clamp a rect that fits, but is already contained (no effect)
|
595
|
+
def test_clamp_contained
|
596
|
+
rect_a = Rect.new(0,0,20,20)
|
597
|
+
rect_b = Rect.new(10,10,6,6)
|
598
|
+
assert_equal([10,10,6,6],rect_b.clamp(rect_a))
|
599
|
+
end
|
600
|
+
|
601
|
+
# Clamp a rect that is too wide.
|
602
|
+
def test_clamp_wide
|
603
|
+
rect_a = Rect.new(0,0,20,20)
|
604
|
+
rect_b = Rect.new(40,10,30,6)
|
605
|
+
assert_equal([-5,10,30,6],rect_b.clamp(rect_a))
|
606
|
+
end
|
607
|
+
|
608
|
+
# Clamp a rect that is too tall.
|
609
|
+
def test_clamp_tall
|
610
|
+
rect_a = Rect.new(0,0,20,20)
|
611
|
+
rect_b = Rect.new(10,40,6,30)
|
612
|
+
assert_equal([10,-5,6,30],rect_b.clamp(rect_a))
|
613
|
+
end
|
614
|
+
|
615
|
+
# Clamp a rect that is both too wide and too tall.
|
616
|
+
def test_clamp_nofit
|
617
|
+
rect_a = Rect.new(0,0,20,20)
|
618
|
+
rect_b = Rect.new(10,40,30,30)
|
619
|
+
assert_equal([-5,-5,30,30],rect_b.clamp(rect_a))
|
620
|
+
end
|
621
|
+
|
622
|
+
|
623
|
+
# --
|
624
|
+
# INFLATE
|
625
|
+
# ++
|
626
|
+
|
627
|
+
# Inflate a rect by zero on x and y
|
628
|
+
def test_inflate_zero_x_zero_y
|
629
|
+
assert_equal([0,0,20,20],
|
630
|
+
Rect.new(0,0,20,20).inflate(0,0))
|
631
|
+
end
|
632
|
+
|
633
|
+
# Inflate a rect by an even positive integer on x and y
|
634
|
+
def test_inflate_evenposint_x_evenposint_y
|
635
|
+
assert_equal([-2,-3,24,26],
|
636
|
+
Rect.new(0,0,20,20).inflate(4,6))
|
637
|
+
end
|
638
|
+
|
639
|
+
# Inflate a rect by an odd negative integer on x and y
|
640
|
+
# NOTE: Pygame would give a result of [-1,-3,23,25].
|
641
|
+
def test_inflate_oddposint_x_oddposint_y
|
642
|
+
assert_equal([-1,-2,23,25],
|
643
|
+
Rect.new(0,0,20,20).inflate(3,5))
|
644
|
+
end
|
645
|
+
|
646
|
+
# Inflate a rect by an even negative integer on x and y
|
647
|
+
def test_inflate_evennegint_x_evennegint_y
|
648
|
+
assert_equal([2,3,16,14],
|
649
|
+
Rect.new(0,0,20,20).inflate(-4,-6))
|
650
|
+
end
|
651
|
+
|
652
|
+
# Inflate a rect by an odd negative integer on x and y
|
653
|
+
# NOTE: Pygame would give a result of [1,2,17,15].
|
654
|
+
def test_inflate_oddnegint_x_oddnegint_y
|
655
|
+
assert_equal([2,3,17,15],
|
656
|
+
Rect.new(0,0,20,20).inflate(-3,-5))
|
657
|
+
end
|
658
|
+
|
659
|
+
# --
|
660
|
+
# COLLIDE_RECT
|
661
|
+
# ++
|
662
|
+
|
663
|
+
# Test collision between rects which do not collide on either axis.
|
664
|
+
def test_collide_rect_nox_noy
|
665
|
+
r1 = Rect.new(0,0,10,10)
|
666
|
+
r2 = Rect.new(20,20,10,10)
|
667
|
+
assert(!(r1.collide_rect?(r2)), "r1 should not collide with r2")
|
668
|
+
assert(!(r2.collide_rect?(r1)), "r2 should not collide with r1")
|
669
|
+
end
|
670
|
+
|
671
|
+
# Test collision between rects which overlap on the X axis only
|
672
|
+
# (i.e. they would intersect if they were at the same vertical position).
|
673
|
+
def test_collide_rect_overlapx_noy
|
674
|
+
r1 = Rect.new(0,0,10,10)
|
675
|
+
r2 = Rect.new(5,30,10,10)
|
676
|
+
assert(!(r1.collide_rect?(r2)), "r1 should not collide with r2")
|
677
|
+
assert(!(r2.collide_rect?(r1)), "r2 should not collide with r1")
|
678
|
+
end
|
679
|
+
|
680
|
+
# Test collision between rects which overlap on the Y axis only
|
681
|
+
# (i.e. they would intersect if they were at the same horizontal position).
|
682
|
+
def test_collide_rect_nox_overlapy
|
683
|
+
r1 = Rect.new(0,0,10,10)
|
684
|
+
r2 = Rect.new(20,5,10,10)
|
685
|
+
assert(!(r1.collide_rect?(r2)), "r1 should not collide with r2")
|
686
|
+
assert(!(r2.collide_rect?(r1)), "r2 should not collide with r1")
|
687
|
+
end
|
688
|
+
|
689
|
+
# Test collision between rects which overlap on both axes.
|
690
|
+
def test_collide_rect_overlapx_overlapy
|
691
|
+
r1 = Rect.new(0,0,10,10)
|
692
|
+
r2 = Rect.new(5,5,10,10)
|
693
|
+
assert(r1.collide_rect?(r2), "r1 should collide with r2")
|
694
|
+
assert(r2.collide_rect?(r1), "r2 should collide with r1")
|
695
|
+
end
|
696
|
+
|
697
|
+
# Test collision between rects, one containing the other on both axes.
|
698
|
+
def test_collide_rect_conx_cony
|
699
|
+
r1 = Rect.new(0,0,10,10)
|
700
|
+
r2 = Rect.new(5,5,4,4)
|
701
|
+
assert(r1.collide_rect?(r2), "r1 should collide with r2")
|
702
|
+
assert(r2.collide_rect?(r1), "r2 should collide with r1")
|
703
|
+
end
|
704
|
+
|
705
|
+
# Test collision between rects touching but not overlapping on X axis only.
|
706
|
+
def test_collide_rect_touchx_noy
|
707
|
+
r1 = Rect.new(0,0,10,10)
|
708
|
+
r2 = Rect.new(10,0,10,10)
|
709
|
+
assert(r1.collide_rect?(r2), "r1 should collide with r2")
|
710
|
+
assert(r2.collide_rect?(r1), "r2 should collide with r1")
|
711
|
+
end
|
712
|
+
|
713
|
+
# Test collision between rects touching but not overlapping on Y axis only.
|
714
|
+
def test_collide_rect_nox_touchy
|
715
|
+
r1 = Rect.new(0,0,10,10)
|
716
|
+
r2 = Rect.new(0,10,10,10)
|
717
|
+
assert(r1.collide_rect?(r2), "r1 should collide with r2")
|
718
|
+
assert(r2.collide_rect?(r1), "r2 should collide with r1")
|
719
|
+
end
|
720
|
+
|
721
|
+
# Test collision between rects touching but not overlapping on both axes.
|
722
|
+
# (i.e. corners are touching)
|
723
|
+
def test_collide_rect_touchx_touchy
|
724
|
+
r1 = Rect.new(0,0,10,10)
|
725
|
+
r2 = Rect.new(10,10,10,10)
|
726
|
+
assert(r1.collide_rect?(r2), "r1 should collide with r2")
|
727
|
+
assert(r2.collide_rect?(r1), "r2 should collide with r1")
|
728
|
+
end
|
729
|
+
|
730
|
+
# --
|
731
|
+
# UNION
|
732
|
+
# ++
|
733
|
+
|
734
|
+
# Test union between two non-overlapping rects.
|
735
|
+
def test_union_separate
|
736
|
+
r1 = Rect.new([0,0,10,10])
|
737
|
+
r2 = Rect.new([20,20,10,10])
|
738
|
+
assert_equal([0,0,30,30], r1.union(r2))
|
739
|
+
assert_equal([0,0,30,30], r2.union(r1))
|
740
|
+
assert_equal(r1.union(r2), r2.union(r1))
|
741
|
+
end
|
742
|
+
|
743
|
+
# Test union between two overlapping rects.
|
744
|
+
def test_union_overlap
|
745
|
+
r1 = Rect.new([0,0,10,10])
|
746
|
+
r2 = Rect.new([5,5,10,10])
|
747
|
+
assert_equal([0,0,15,15], r1.union(r2))
|
748
|
+
assert_equal([0,0,15,15], r2.union(r1))
|
749
|
+
end
|
750
|
+
|
751
|
+
# Test union between a rect and another rect which it contains.
|
752
|
+
def test_union_contained
|
753
|
+
r1 = Rect.new([0,0,20,20])
|
754
|
+
r2 = Rect.new([5,5,10,10])
|
755
|
+
assert_equal([0,0,20,20], r1.union(r2))
|
756
|
+
assert_equal([0,0,20,20], r2.union(r1))
|
757
|
+
end
|
758
|
+
|
759
|
+
# Test union between two identical rects.
|
760
|
+
def test_union_identical
|
761
|
+
r1 = Rect.new([0,0,20,20])
|
762
|
+
r2 = Rect.new([0,0,20,20])
|
763
|
+
assert_equal([0,0,20,20], r1.union(r2))
|
764
|
+
assert_equal([0,0,20,20], r2.union(r1))
|
765
|
+
end
|
766
|
+
|
767
|
+
# --
|
768
|
+
# CLIP
|
769
|
+
# ++
|
770
|
+
|
771
|
+
def test_clip_offleft
|
772
|
+
r1 = Rect.new([2,5,10,10])
|
773
|
+
r2 = Rect.new([4,1,20,20])
|
774
|
+
should_be = Rect.new([4,5,8,10])
|
775
|
+
assert_equal(should_be, r1.clip(r2))
|
776
|
+
assert_equal(should_be, r2.clip(r1))
|
777
|
+
end
|
778
|
+
|
779
|
+
def test_clip_offright
|
780
|
+
r1 = Rect.new([15,5,10,10])
|
781
|
+
r2 = Rect.new([4,1,20,20])
|
782
|
+
should_be = Rect.new([15,5,9,10])
|
783
|
+
assert_equal(should_be, r1.clip(r2))
|
784
|
+
assert_equal(should_be, r2.clip(r1))
|
785
|
+
end
|
786
|
+
|
787
|
+
def test_clip_offtop
|
788
|
+
r1 = Rect.new([5,2,10,10])
|
789
|
+
r2 = Rect.new([1,4,20,20])
|
790
|
+
should_be = Rect.new([5,4,10,8])
|
791
|
+
assert_equal(should_be, r1.clip(r2))
|
792
|
+
assert_equal(should_be, r2.clip(r1))
|
793
|
+
end
|
794
|
+
|
795
|
+
def test_clip_offbottom
|
796
|
+
r1 = Rect.new([5,15,10,10])
|
797
|
+
r2 = Rect.new([1,4,20,20])
|
798
|
+
should_be = Rect.new([5,15,10,9])
|
799
|
+
assert_equal(should_be, r1.clip(r2))
|
800
|
+
assert_equal(should_be, r2.clip(r1))
|
801
|
+
end
|
802
|
+
|
803
|
+
def test_clip_offleftandright
|
804
|
+
r1 = Rect.new([2,5,30,10])
|
805
|
+
r2 = Rect.new([4,1,20,20])
|
806
|
+
should_be = Rect.new([4,5,20,10])
|
807
|
+
assert_equal(should_be, r1.clip(r2))
|
808
|
+
assert_equal(should_be, r2.clip(r1))
|
809
|
+
end
|
810
|
+
|
811
|
+
def test_clip_offtopandbottom
|
812
|
+
r1 = Rect.new([2,5,10,30])
|
813
|
+
r2 = Rect.new([4,1,20,20])
|
814
|
+
should_be = Rect.new([4,5,8,16])
|
815
|
+
assert_equal(should_be, r1.clip(r2))
|
816
|
+
assert_equal(should_be, r2.clip(r1))
|
817
|
+
end
|
818
|
+
|
819
|
+
def test_clip_offallsides
|
820
|
+
r1 = Rect.new([2,5,30,30])
|
821
|
+
r2 = Rect.new([4,1,20,20])
|
822
|
+
should_be = Rect.new([4,5,20,16])
|
823
|
+
assert_equal(should_be, r1.clip(r2))
|
824
|
+
assert_equal(should_be, r2.clip(r1))
|
825
|
+
end
|
826
|
+
|
827
|
+
def test_clip_contained
|
828
|
+
r1 = Rect.new([6,3,5,5])
|
829
|
+
r2 = Rect.new([4,1,20,20])
|
830
|
+
should_be = r1
|
831
|
+
assert_equal(should_be, r1.clip(r2))
|
832
|
+
assert_equal(should_be, r2.clip(r1))
|
833
|
+
end
|
834
|
+
|
835
|
+
def test_clip_nooverlap
|
836
|
+
r1 = Rect.new([6,3,5,5])
|
837
|
+
r2 = Rect.new([20,1,20,20])
|
838
|
+
assert_equal(Rect.new([6,3,0,0]), r1.clip(r2))
|
839
|
+
assert_equal(Rect.new([20,1,0,0]), r2.clip(r1))
|
840
|
+
end
|
841
|
+
end
|