vamp 0.1.3 → 0.1.4
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/.gitignore +1 -0
- data/README.md +20 -3
- data/lib/vamp/art.rb +189 -0
- data/lib/vamp/graphic/context.rb +142 -0
- data/lib/vamp/graphic/dotter.rb +53 -0
- data/lib/vamp/graphic/text_dotter.rb +35 -0
- data/lib/vamp/graphic/transfer.rb +170 -0
- data/lib/vamp/graphic/transfer5.rb +217 -0
- data/lib/vamp/graphic.rb +17 -0
- data/lib/vamp/version.rb +1 -1
- data/lib/vamp.rb +5 -12
- data/sample/gui.rb +98 -0
- data/spec/art_spec.rb +56 -0
- data/spec/graphic/context_spec.rb +364 -0
- data/spec/graphic/transfer5_spec.rb +179 -0
- data/spec/graphic/transfer_spec.rb +221 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/vamp_spec.rb +1 -0
- metadata +18 -2
@@ -0,0 +1,364 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "vamp/graphic"
|
3
|
+
|
4
|
+
describe Vamp::Graphic::Context do
|
5
|
+
describe "screen 2x2" do
|
6
|
+
subject { described_class.new(Vamp::Graphic::TextDotter.new(2, 2)) }
|
7
|
+
describe "#new" do
|
8
|
+
it "has empty screen" do
|
9
|
+
expect(subject.screen).to eq <<-'END'
|
10
|
+
+--+
|
11
|
+
| |
|
12
|
+
| |
|
13
|
+
+--+
|
14
|
+
END
|
15
|
+
end
|
16
|
+
end
|
17
|
+
describe "#draw_line_direct" do
|
18
|
+
it "can draw top left to right down" do
|
19
|
+
subject.draw_line_direct 0, 0, 1, 1
|
20
|
+
expect(subject.screen).to eq <<-'END'
|
21
|
+
+--+
|
22
|
+
|X |
|
23
|
+
| X|
|
24
|
+
+--+
|
25
|
+
END
|
26
|
+
end
|
27
|
+
|
28
|
+
it "can draw down left to right top" do
|
29
|
+
subject.draw_line_direct 0, 1, 1, 0
|
30
|
+
expect(subject.screen).to eq <<-'END'
|
31
|
+
+--+
|
32
|
+
| X|
|
33
|
+
|X |
|
34
|
+
+--+
|
35
|
+
END
|
36
|
+
end
|
37
|
+
|
38
|
+
it "can draw top left to right top" do
|
39
|
+
subject.draw_line_direct 0, 0, 1, 0
|
40
|
+
expect(subject.screen).to eq <<-'END'
|
41
|
+
+--+
|
42
|
+
|XX|
|
43
|
+
| |
|
44
|
+
+--+
|
45
|
+
END
|
46
|
+
end
|
47
|
+
|
48
|
+
it "can draw top left to right down" do
|
49
|
+
subject.draw_line_direct 0, 0, 1, 1
|
50
|
+
expect(subject.screen).to eq <<-'END'
|
51
|
+
+--+
|
52
|
+
|X |
|
53
|
+
| X|
|
54
|
+
+--+
|
55
|
+
END
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "#line" do
|
60
|
+
describe "only integers, without clipping" do
|
61
|
+
it "can draw down left to right top" do
|
62
|
+
subject.line 0, 1, 1, 0
|
63
|
+
expect(subject.screen).to eq <<-'END'
|
64
|
+
+--+
|
65
|
+
| X|
|
66
|
+
|X |
|
67
|
+
+--+
|
68
|
+
END
|
69
|
+
end
|
70
|
+
|
71
|
+
it "can draw top left to right top" do
|
72
|
+
subject.line 0, 0, 1, 0
|
73
|
+
expect(subject.screen).to eq <<-'END'
|
74
|
+
+--+
|
75
|
+
|XX|
|
76
|
+
| |
|
77
|
+
+--+
|
78
|
+
END
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "also double, no clipping" do
|
83
|
+
it "can draw top left to right down" do
|
84
|
+
subject.line 0.1, 0.1, 1.9, 1.4
|
85
|
+
expect(subject.screen).to eq <<-'END'
|
86
|
+
+--+
|
87
|
+
|X |
|
88
|
+
| X|
|
89
|
+
+--+
|
90
|
+
END
|
91
|
+
end
|
92
|
+
|
93
|
+
it "can draw top left to right top" do
|
94
|
+
subject.line 0.0001, 0, 1.99999, 0.9
|
95
|
+
expect(subject.screen).to eq <<-'END'
|
96
|
+
+--+
|
97
|
+
|XX|
|
98
|
+
| |
|
99
|
+
+--+
|
100
|
+
END
|
101
|
+
end
|
102
|
+
|
103
|
+
it "can draw top left to right down" do
|
104
|
+
subject.line 0.0001, 0, 1.99999, 1
|
105
|
+
expect(subject.screen).to eq <<-'END'
|
106
|
+
+--+
|
107
|
+
|XX|
|
108
|
+
| |
|
109
|
+
+--+
|
110
|
+
END
|
111
|
+
end
|
112
|
+
|
113
|
+
it "can draw top left to right top" do
|
114
|
+
subject.line 0.1, 0.1, 1, 0
|
115
|
+
expect(subject.screen).to eq <<-'END'
|
116
|
+
+--+
|
117
|
+
|XX|
|
118
|
+
| |
|
119
|
+
+--+
|
120
|
+
END
|
121
|
+
end
|
122
|
+
|
123
|
+
it "can draw top left to right down" do
|
124
|
+
subject.line 0.9999, 0.1, 1.9999, 1.9999999
|
125
|
+
expect(subject.screen).to eq <<-'END'
|
126
|
+
+--+
|
127
|
+
| X|
|
128
|
+
| |
|
129
|
+
+--+
|
130
|
+
END
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe "only integers, with clipping" do
|
135
|
+
it "can draw down left to right top" do
|
136
|
+
subject.line -1, -1, 2, 2
|
137
|
+
expect(subject.screen).to eq <<-'END'
|
138
|
+
+--+
|
139
|
+
|X |
|
140
|
+
| X|
|
141
|
+
+--+
|
142
|
+
END
|
143
|
+
end
|
144
|
+
|
145
|
+
it "can draw top left to right down" do
|
146
|
+
subject.line -10, -11, 21, 22
|
147
|
+
expect(subject.screen).to eq <<-'END'
|
148
|
+
+--+
|
149
|
+
|X |
|
150
|
+
| X|
|
151
|
+
+--+
|
152
|
+
END
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
describe "#clear" do
|
158
|
+
it "can clear the scren" do
|
159
|
+
subject.line 0, 1, 1, 0
|
160
|
+
expect(subject.clear.screen).to eq <<-'END'
|
161
|
+
+--+
|
162
|
+
| |
|
163
|
+
| |
|
164
|
+
+--+
|
165
|
+
END
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
describe "screen 9x4" do
|
171
|
+
subject { described_class.new(Vamp::Graphic::TextDotter.new(9, 4)) }
|
172
|
+
describe "#new" do
|
173
|
+
it "has empty screen" do
|
174
|
+
expect(subject.screen).to eq <<-'END'
|
175
|
+
+---------+
|
176
|
+
| |
|
177
|
+
| |
|
178
|
+
| |
|
179
|
+
| |
|
180
|
+
+---------+
|
181
|
+
END
|
182
|
+
end
|
183
|
+
end
|
184
|
+
describe "#draw_line_direct" do
|
185
|
+
it "can draw top left to right down" do
|
186
|
+
subject.draw_line_direct 0, 0, 8, 3
|
187
|
+
expect(subject.screen).to eq <<-'END'
|
188
|
+
+---------+
|
189
|
+
|XX |
|
190
|
+
| XXX |
|
191
|
+
| XX |
|
192
|
+
| XX|
|
193
|
+
+---------+
|
194
|
+
END
|
195
|
+
end
|
196
|
+
|
197
|
+
it "can draw down left to right top" do
|
198
|
+
subject.draw_line_direct 0, 3, 8, 0
|
199
|
+
expect(subject.screen).to eq <<-'END'
|
200
|
+
+---------+
|
201
|
+
| XX|
|
202
|
+
| XX |
|
203
|
+
| XXX |
|
204
|
+
|XX |
|
205
|
+
+---------+
|
206
|
+
END
|
207
|
+
end
|
208
|
+
|
209
|
+
it "can draw top left to right top" do
|
210
|
+
subject.draw_line_direct 0, 0, 8, 0
|
211
|
+
expect(subject.screen).to eq <<-'END'
|
212
|
+
+---------+
|
213
|
+
|XXXXXXXXX|
|
214
|
+
| |
|
215
|
+
| |
|
216
|
+
| |
|
217
|
+
+---------+
|
218
|
+
END
|
219
|
+
end
|
220
|
+
|
221
|
+
it "can draw down right to left down" do
|
222
|
+
subject.draw_line_direct 8, 3, 0, 3
|
223
|
+
expect(subject.screen).to eq <<-'END'
|
224
|
+
+---------+
|
225
|
+
| |
|
226
|
+
| |
|
227
|
+
| |
|
228
|
+
|XXXXXXXXX|
|
229
|
+
+---------+
|
230
|
+
END
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
describe "#line" do
|
235
|
+
describe "only integers, without clipping" do
|
236
|
+
it "can draw down left to right top" do
|
237
|
+
subject.line 0, 3, 8, 0
|
238
|
+
expect(subject.screen).to eq <<-'END'
|
239
|
+
+---------+
|
240
|
+
| XX|
|
241
|
+
| XX |
|
242
|
+
| XXX |
|
243
|
+
|XX |
|
244
|
+
+---------+
|
245
|
+
END
|
246
|
+
end
|
247
|
+
|
248
|
+
it "can draw top left to right top" do
|
249
|
+
subject.line 0, 0, 8, 0
|
250
|
+
expect(subject.screen).to eq <<-'END'
|
251
|
+
+---------+
|
252
|
+
|XXXXXXXXX|
|
253
|
+
| |
|
254
|
+
| |
|
255
|
+
| |
|
256
|
+
+---------+
|
257
|
+
END
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
describe "also double, no clipping" do
|
262
|
+
it "can draw top left to right down" do
|
263
|
+
subject.line 0.1, 0.1, 8.9, 3.4
|
264
|
+
expect(subject.screen).to eq <<-'END'
|
265
|
+
+---------+
|
266
|
+
|XX |
|
267
|
+
| XXX |
|
268
|
+
| XX |
|
269
|
+
| XX|
|
270
|
+
+---------+
|
271
|
+
END
|
272
|
+
end
|
273
|
+
|
274
|
+
it "can draw top left to right top" do
|
275
|
+
subject.line 0.0001, 0, 8.99999, 0.56
|
276
|
+
expect(subject.screen).to eq <<-'END'
|
277
|
+
+---------+
|
278
|
+
|XXXXXXXXX|
|
279
|
+
| |
|
280
|
+
| |
|
281
|
+
| |
|
282
|
+
+---------+
|
283
|
+
END
|
284
|
+
end
|
285
|
+
|
286
|
+
it "can draw top left to right down" do
|
287
|
+
subject.line 0.0001, 0, 8.99999, 3
|
288
|
+
expect(subject.screen).to eq <<-'END'
|
289
|
+
+---------+
|
290
|
+
|XX |
|
291
|
+
| XXX |
|
292
|
+
| XX |
|
293
|
+
| XX|
|
294
|
+
+---------+
|
295
|
+
END
|
296
|
+
end
|
297
|
+
|
298
|
+
it "can draw top left to right top" do
|
299
|
+
subject.line 0.1, 0.1, 8, 0
|
300
|
+
expect(subject.screen).to eq <<-'END'
|
301
|
+
+---------+
|
302
|
+
|XXXXXXXXX|
|
303
|
+
| |
|
304
|
+
| |
|
305
|
+
| |
|
306
|
+
+---------+
|
307
|
+
END
|
308
|
+
end
|
309
|
+
|
310
|
+
it "can draw top left to right down" do
|
311
|
+
subject.line 0.9999, 0.1, 8.9999, 3.9999999
|
312
|
+
expect(subject.screen).to eq <<-'END'
|
313
|
+
+---------+
|
314
|
+
| XX |
|
315
|
+
| XX |
|
316
|
+
| XX |
|
317
|
+
| X |
|
318
|
+
+---------+
|
319
|
+
END
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
describe "only integers, with clipping" do
|
324
|
+
it "can draw down left to right top" do
|
325
|
+
subject.line -1, -1, 9, 4
|
326
|
+
expect(subject.screen).to eq <<-'END'
|
327
|
+
+---------+
|
328
|
+
| XX |
|
329
|
+
| XX |
|
330
|
+
| XX |
|
331
|
+
| X |
|
332
|
+
+---------+
|
333
|
+
END
|
334
|
+
end
|
335
|
+
|
336
|
+
it "can draw down left to right top" do
|
337
|
+
subject.line -11, -5, 41, 20
|
338
|
+
expect(subject.screen).to eq <<-'END'
|
339
|
+
+---------+
|
340
|
+
|XX |
|
341
|
+
| XX |
|
342
|
+
| XX |
|
343
|
+
| X |
|
344
|
+
+---------+
|
345
|
+
END
|
346
|
+
end
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
describe "#clear" do
|
351
|
+
it "can clear the scren" do
|
352
|
+
subject.line 0, 1, 8, 3
|
353
|
+
expect(subject.clear.screen).to eq <<-'END'
|
354
|
+
+---------+
|
355
|
+
| |
|
356
|
+
| |
|
357
|
+
| |
|
358
|
+
| |
|
359
|
+
+---------+
|
360
|
+
END
|
361
|
+
end
|
362
|
+
end
|
363
|
+
end
|
364
|
+
end
|
@@ -0,0 +1,179 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Vamp::Graphic::Transfer5 do
|
4
|
+
describe "#mappping" do
|
5
|
+
subject do
|
6
|
+
s = described_class.new(Vamp::Graphic::Context.new(Vamp::Graphic::TextDotter.new(5, 5)))
|
7
|
+
end
|
8
|
+
it "has correct minus pattern" do
|
9
|
+
expect(subject.mapping["-"].screen).to eq <<-'END'
|
10
|
+
+-----+
|
11
|
+
| |
|
12
|
+
| |
|
13
|
+
|XXXX |
|
14
|
+
| |
|
15
|
+
| |
|
16
|
+
+-----+
|
17
|
+
END
|
18
|
+
end
|
19
|
+
end
|
20
|
+
describe "screen 145x85" do
|
21
|
+
subject do
|
22
|
+
s = described_class.new(Vamp::Graphic::Context.new(Vamp::Graphic::TextDotter.new(145, 85)))
|
23
|
+
s.context.line 0, 0, 72, 42
|
24
|
+
s.context.line 72, 42, 144, 0
|
25
|
+
s.context.line 72, 42, 144, 84
|
26
|
+
s.context.line 0, 84, 72, 42
|
27
|
+
s.context.line 72, 42, 144, 42
|
28
|
+
s.context.line 72, 42, 0, 42
|
29
|
+
s.context.line 72, 42, 72, 0
|
30
|
+
s.context.line 72, 42, 72, 84
|
31
|
+
s.context.line 36, 0, 72, 42
|
32
|
+
s.context.line 108, 0, 72, 42
|
33
|
+
s.context.line 36, 84, 72, 42
|
34
|
+
s.context.line 108, 84, 72, 42
|
35
|
+
s.context.line 0, 21, 72, 42
|
36
|
+
s.context.line 144, 21, 72, 42
|
37
|
+
s.context.line 0, 63, 72, 42
|
38
|
+
s.context.line 144, 63, 72, 42
|
39
|
+
s
|
40
|
+
end
|
41
|
+
it "has correct starting picture" do
|
42
|
+
expect(subject.context.screen).to eq <<-'END'
|
43
|
+
+-------------------------------------------------------------------------------------------------------------------------------------------------+
|
44
|
+
|X X X X X|
|
45
|
+
| XX X X X XX |
|
46
|
+
| XX X X X XX |
|
47
|
+
| XX X X X X |
|
48
|
+
| X X X X XX |
|
49
|
+
| XX X X X XX |
|
50
|
+
| XX X X X XX |
|
51
|
+
| X X X X X |
|
52
|
+
| XX X X X XX |
|
53
|
+
| XX X X X XX |
|
54
|
+
| XX X X X X |
|
55
|
+
| X X X X XX |
|
56
|
+
| XX X X X XX |
|
57
|
+
| XX X X X XX |
|
58
|
+
| X X X X X |
|
59
|
+
| XX X X X XX |
|
60
|
+
| XX X X X XX |
|
61
|
+
| XX X X X X |
|
62
|
+
| X X X X XX |
|
63
|
+
| XX X X X XX |
|
64
|
+
| XX X X X XX |
|
65
|
+
|XX X X X X X XX|
|
66
|
+
| XXXX XX X X X XX XXXX |
|
67
|
+
| XXX XX X X X XX XXX |
|
68
|
+
| XXXX XX X X X X XXXX |
|
69
|
+
| XXX X X X X XX XXX |
|
70
|
+
| XXX XX X X X XX XXX |
|
71
|
+
| XXXX XX X X X XX XXXX |
|
72
|
+
| XXX X X X X X XXX |
|
73
|
+
| XXXX XX X X X XX XXXX |
|
74
|
+
| XXX XX X X X XX XXX |
|
75
|
+
| XXXX XX X X X X XXXX |
|
76
|
+
| XXX X X X X XX XXX |
|
77
|
+
| XXX XX X X X XX XXX |
|
78
|
+
| XXXX XX X X X XX XXXX |
|
79
|
+
| XXX X X X X X XXX |
|
80
|
+
| XXXX XX X X X XX XXXX |
|
81
|
+
| XXX XX X X X XX XXX |
|
82
|
+
| XXXX XX X X X X XXXX |
|
83
|
+
| XXX X X X X XX XXX |
|
84
|
+
| XXX XXX X XXX XXX |
|
85
|
+
| XXXXXXXXXXX |
|
86
|
+
|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|
|
87
|
+
| XXXXXXXXXXX |
|
88
|
+
| XXX XXX X XXX XXX |
|
89
|
+
| XXX X X X X XX XXX |
|
90
|
+
| XXXX XX X X X X XXXX |
|
91
|
+
| XXX XX X X X XX XXX |
|
92
|
+
| XXXX XX X X X XX XXXX |
|
93
|
+
| XXX X X X X X XXX |
|
94
|
+
| XXXX XX X X X XX XXXX |
|
95
|
+
| XXX XX X X X XX XXX |
|
96
|
+
| XXX X X X X XX XXX |
|
97
|
+
| XXXX XX X X X X XXXX |
|
98
|
+
| XXX XX X X X XX XXX |
|
99
|
+
| XXXX XX X X X XX XXXX |
|
100
|
+
| XXX X X X X X XXX |
|
101
|
+
| XXXX XX X X X XX XXXX |
|
102
|
+
| XXX XX X X X XX XXX |
|
103
|
+
| XXX X X X X XX XXX |
|
104
|
+
| XXXX XX X X X X XXXX |
|
105
|
+
| XXX XX X X X XX XXX |
|
106
|
+
| XXXX XX X X X XX XXXX |
|
107
|
+
|XX X X X X X XX|
|
108
|
+
| XX X X X XX |
|
109
|
+
| XX X X X XX |
|
110
|
+
| X X X X XX |
|
111
|
+
| XX X X X X |
|
112
|
+
| XX X X X XX |
|
113
|
+
| XX X X X XX |
|
114
|
+
| X X X X X |
|
115
|
+
| XX X X X XX |
|
116
|
+
| XX X X X XX |
|
117
|
+
| X X X X XX |
|
118
|
+
| XX X X X X |
|
119
|
+
| XX X X X XX |
|
120
|
+
| XX X X X XX |
|
121
|
+
| X X X X X |
|
122
|
+
| XX X X X XX |
|
123
|
+
| XX X X X XX |
|
124
|
+
| X X X X XX |
|
125
|
+
| XX X X X X |
|
126
|
+
| XX X X X XX |
|
127
|
+
| XX X X X XX |
|
128
|
+
|X X X X X|
|
129
|
+
+-------------------------------------------------------------------------------------------------------------------------------------------------+
|
130
|
+
END
|
131
|
+
end
|
132
|
+
it "gets correct ascii" do
|
133
|
+
expect(subject.ascii.split("\n").map(&:rstrip).join("\n")).to eq (<<-'END'
|
134
|
+
` \ | / '
|
135
|
+
\ \ | / /
|
136
|
+
. \ | .`
|
137
|
+
' | `
|
138
|
+
-- \ | ` / --
|
139
|
+
"-_ . ' | / /` _-"
|
140
|
+
"-_ ' ' | ' ` _-`
|
141
|
+
-- \|/ -"
|
142
|
+
-------------###-------------
|
143
|
+
-- "|\ -_
|
144
|
+
-`` ` | \' '-
|
145
|
+
-- / ` | \ --
|
146
|
+
-" /` / | ' . "-
|
147
|
+
` ` | ' '
|
148
|
+
' / | \ `
|
149
|
+
/ / | \ \
|
150
|
+
.` | \ .
|
151
|
+
END
|
152
|
+
).chomp
|
153
|
+
end
|
154
|
+
|
155
|
+
# here is the 3 x 3 result
|
156
|
+
pending "gets correct ascii" do
|
157
|
+
expect(subject.ascii.split("\n").map(&:rstrip).join("\n")).to eq (<<-'END'
|
158
|
+
\_ \ | / _/
|
159
|
+
\ \ | / /`
|
160
|
+
'_ . | .` _`
|
161
|
+
`. . | .` .'
|
162
|
+
\_ \ | ` /` _/
|
163
|
+
"-__ '\ ' | ' /` __-"
|
164
|
+
`-_ '_' | '_' _-'`
|
165
|
+
"\\/\|////"
|
166
|
+
-------------###-------------
|
167
|
+
_////|\/\\_
|
168
|
+
_-" .'.`| .`. "-_
|
169
|
+
_-'` _/`.` | . \_ '`-_
|
170
|
+
/" /` ` | \ "\
|
171
|
+
_' ' | ' '_
|
172
|
+
_' ' | ' `_
|
173
|
+
/` / | \ \
|
174
|
+
/` / | \ '\
|
175
|
+
END
|
176
|
+
).chomp
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|