raheui 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,148 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Raheui::Queue do
5
+ it_behaves_like 'a store'
6
+
7
+ describe '#push' do
8
+ context 'with no elements' do
9
+ let(:element) { rand(10) }
10
+
11
+ it 'returns an array with the pushed element' do
12
+ expect(subject.push(element)).to match_array([element])
13
+ end
14
+ end
15
+
16
+ context 'with one element' do
17
+ let(:element) { rand(10) }
18
+
19
+ before(:example) { subject.push(42) }
20
+
21
+ it 'returns an array with the pushed element at first' do
22
+ expect(subject.push(element)).to match_array([element, 42])
23
+ end
24
+ end
25
+ end
26
+
27
+ describe '#pop' do
28
+ context 'with no elements' do
29
+ it 'returns first pushed element' do
30
+ subject.push(42)
31
+ expect(subject.pop).to be(42)
32
+ end
33
+ end
34
+
35
+ context 'with one element' do
36
+ let(:element) { rand(10) }
37
+
38
+ before(:example) { subject.push(element) }
39
+
40
+ it 'returns the element' do
41
+ expect(subject.pop).to be(element)
42
+ end
43
+
44
+ it 'returns first pushed element' do
45
+ subject.push(42)
46
+ expect(subject.pop).to be(element)
47
+ expect(subject.pop).to be(42)
48
+ end
49
+
50
+ it 'returns nil after a pop call' do
51
+ subject.pop
52
+ expect(subject.pop).to be(nil)
53
+ end
54
+ end
55
+
56
+ context 'with more than one element' do
57
+ let(:one) { rand(10) }
58
+ let(:two) { rand(10...20) }
59
+
60
+ before(:example) do
61
+ subject.push(one)
62
+ subject.push(two)
63
+ end
64
+
65
+ it 'returns the elements in pushed order' do
66
+ expect(subject.pop).to be(one)
67
+ expect(subject.pop).to be(two)
68
+ end
69
+
70
+ it 'returns first pushed element' do
71
+ subject.push(42)
72
+ expect(subject.pop).to be(one)
73
+ expect(subject.pop).to be(two)
74
+ expect(subject.pop).to be(42)
75
+ end
76
+ end
77
+ end
78
+
79
+ describe '#push_dup' do
80
+ context 'with one element' do
81
+ let(:element) { rand(10) }
82
+
83
+ before(:example) { subject.push(element) }
84
+
85
+ it 'pushes the last element' do
86
+ subject.push_dup
87
+ expect(subject.pop).to be(element)
88
+ expect(subject.pop).to be(element)
89
+ end
90
+
91
+ it 'pushes last pushed element' do
92
+ subject.push(42)
93
+ subject.push_dup
94
+ expect(subject.pop).to be(element)
95
+ expect(subject.pop).to be(42)
96
+ expect(subject.pop).to be(42)
97
+ end
98
+ end
99
+ end
100
+
101
+ describe '#swap' do
102
+ context 'with one element' do
103
+ let(:element) { rand(10) }
104
+
105
+ before(:example) { subject.push(element) }
106
+
107
+ it "doesn't modify store" do
108
+ subject.swap
109
+ expect(subject.pop).to be(element)
110
+ end
111
+ end
112
+
113
+ context 'with two elements' do
114
+ let(:one) { rand(10) }
115
+ let(:two) { rand(10...20) }
116
+
117
+ before(:example) do
118
+ subject.push(one)
119
+ subject.push(two)
120
+ end
121
+
122
+ it 'swaps the first two elements' do
123
+ subject.swap
124
+ expect(subject.pop).to be(two)
125
+ expect(subject.pop).to be(one)
126
+ end
127
+ end
128
+
129
+ context 'with more than two elements' do
130
+ let(:one) { rand(10) }
131
+ let(:two) { rand(10...20) }
132
+ let(:three) { rand(20...30) }
133
+
134
+ before(:example) do
135
+ subject.push(one)
136
+ subject.push(two)
137
+ subject.push(three)
138
+ end
139
+
140
+ it 'swaps the first two elements' do
141
+ subject.swap
142
+ expect(subject.pop).to be(two)
143
+ expect(subject.pop).to be(one)
144
+ expect(subject.pop).to be(three)
145
+ end
146
+ end
147
+ end
148
+ end
@@ -0,0 +1,516 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ shared_examples 'a runner' do
5
+ subject(:runner) { Raheui::Runner.new(code) }
6
+ let(:code) { Raheui::Code.new(source) }
7
+ let(:output) { $stdout.string }
8
+
9
+ before(:example) do
10
+ $stdin = StringIO.new
11
+ $stdout = StringIO.new
12
+ end
13
+
14
+ after(:example) do
15
+ $stdin = STDIN
16
+ $stdout = STDOUT
17
+ end
18
+
19
+ it 'accepts input, prints expected output and returns exit code' do
20
+ if defined?(inputs)
21
+ inputs.each do |line|
22
+ $stdin.puts line
23
+ end
24
+ $stdin.rewind
25
+ end
26
+ expect(runner.run).to be(exit_code)
27
+ expect(output).to eq(result)
28
+ end
29
+ end
30
+
31
+ describe Raheui::Runner, 'with bieup.aheui' do
32
+ # rubocop:disable Metrics/LineLength
33
+ let(:source) { <<-END }
34
+
35
+ 박반받발밤밥밧밪밫밬밭붚
36
+ 뭉멍멍멍멍멍멍멍멍멍멍멍
37
+ 밖밗밙밚밝밞밟밠밡밢밣밦붔
38
+ 뭉멍멍멍멍멍멍멍멍멍멍멍멍
39
+ 방붛
40
+ 뭉멍
41
+
42
+
43
+ ㅂ에 ㅇ받침이 있으면 입력받은 숫자를, ㅎ받침이 있으면 입력받은 문자의 유니코드 코드값을 저장공간에 집어넣습니다. 단, ㅂ의 경우 나머지 받침이 있으면 그 받침을 구성하는 선의 수에 따른 값을 집어넣습니다. 받침이 없으면 0을 집어넣습니다.
44
+ END
45
+ # rubocop:enable Metrics/LineLength
46
+
47
+ let(:inputs) { %w(3 밯) }
48
+ let(:result) { '2235442343444455799799864348175' }
49
+ let(:exit_code) { 0 }
50
+
51
+ it_behaves_like 'a runner'
52
+ end
53
+
54
+ describe Raheui::Runner, 'with border.aheui' do
55
+ # rubocop:disable Metrics/LineLength
56
+ let(:source) { <<-END }
57
+ 볻 망볿
58
+ ㅇ ㅇ희
59
+ 멍 붒
60
+ ㅇ ㅇ몽
61
+
62
+
63
+ 표준: 코드 공간의 한 쪽 끝에 다다르면 커서는 반대편 끝으로 이동합니다. 이는 Funge-98의 wrapping algorithm과 동일합니다.
64
+ END
65
+ # rubocop:enable Metrics/LineLength
66
+
67
+ let(:result) { '369' }
68
+ let(:exit_code) { 0 }
69
+
70
+ it_behaves_like 'a runner'
71
+ end
72
+
73
+ describe Raheui::Runner, 'with chieut.aheui' do
74
+ # rubocop:disable Metrics/LineLength
75
+ let(:source) { <<-END }
76
+ 아ㅇㅇ부
77
+ 희멍번처붇
78
+ ㅇㅇㅇ분멍
79
+ 희멍번차붇
80
+ ㅇㅇㅇ희멍
81
+ ㅊ은 조건 명령으로 저장공간에서 값 하나를 뽑아내서 그 값이 0이 아니면 홀소리의 방향대로, 0이면 그 반대 방향대로 갑니다.
82
+ END
83
+ # rubocop:enable Metrics/LineLength
84
+
85
+ let(:result) { '33' }
86
+ let(:exit_code) { 0 }
87
+
88
+ it_behaves_like 'a runner'
89
+ end
90
+
91
+ describe Raheui::Runner, 'with default-storage.aheui' do
92
+ # rubocop:disable Metrics/LineLength
93
+ let(:source) { <<-END }
94
+ 밞산바삳바사망희
95
+
96
+ 처음에 선택되어 있는 스택은 (받침 없음) 스택입니다. (“사” 와 같은 명령으로 선택할 수 있습니다.)
97
+ END
98
+ # rubocop:enable Metrics/LineLength
99
+
100
+ let(:result) { '9' }
101
+ let(:exit_code) { 0 }
102
+
103
+ it_behaves_like 'a runner'
104
+ end
105
+
106
+ describe Raheui::Runner, 'with digeut.aheui' do
107
+ # rubocop:disable Metrics/LineLength
108
+ let(:source) { <<-END }
109
+ 반받다망희
110
+
111
+ ㄷ은 덧셈 명령으로 저장공간에서 두 값을 뽑아낸 다음 둘을 더한 값을 저장공간에 집어넣습니다.
112
+ END
113
+ # rubocop:enable Metrics/LineLength
114
+
115
+ let(:result) { '5' }
116
+ let(:exit_code) { 0 }
117
+
118
+ it_behaves_like 'a runner'
119
+ end
120
+
121
+ describe Raheui::Runner, 'with exhausted-storage.aheui' do
122
+ # rubocop:disable Metrics/LineLength
123
+ let(:source) { <<-END }
124
+ 아ㅇㅇ우
125
+ 희멍벋망반망희
126
+ 중복 명령을 포함한 모든 뽑아내기를 쓰는 명령에서 저장 공간에 값이 모자랄 경우, 커서는 그 명령을 실행하지 않고 커서가 있는 글자의 홀소리의 반대방향으로 움직입니다.
127
+ END
128
+ # rubocop:enable Metrics/LineLength
129
+
130
+ let(:result) { '3' }
131
+ let(:exit_code) { 0 }
132
+
133
+ it_behaves_like 'a runner'
134
+ end
135
+
136
+ describe Raheui::Runner, 'with exitcode.aheui' do
137
+ # rubocop:disable Metrics/LineLength
138
+ let(:source) { <<-END }
139
+ 반월회
140
+
141
+ ㅎ은 끝냄 명령으로 커서의 실행을 끝냅니다. 이 때 스택에서 맨 위 값을 뽑아서 운영체제에 돌려 줍니다.
142
+ END
143
+ # rubocop:enable Metrics/LineLength
144
+
145
+ let(:result) { '' }
146
+ let(:exit_code) { 2 }
147
+
148
+ it_behaves_like 'a runner'
149
+ end
150
+
151
+ describe Raheui::Runner, 'with ieunghiheuit.aheui' do
152
+ # rubocop:disable Metrics/LineLength
153
+ let(:source) { <<-END }
154
+ 아악안앋압알앗았앜앇헐
155
+
156
+ ㅇ은 없음 명령으로 아무 일도 하지 않습니다. * ㅎ은 끝냄 명령으로 커서의 실행을 끝냅니다.
157
+ 사용되지 않는 받침은 모두 무시됩니다.
158
+ END
159
+ # rubocop:enable Metrics/LineLength
160
+
161
+ let(:result) { '' }
162
+ let(:exit_code) { 0 }
163
+
164
+ it_behaves_like 'a runner'
165
+ end
166
+
167
+ describe Raheui::Runner, 'with jieut.aheui' do
168
+ # rubocop:disable Metrics/LineLength
169
+ let(:source) { <<-END }
170
+ 반반자망받반자망반받자망희
171
+
172
+ ㅈ은 비교 명령으로 저장공간에서 값 두 개를 뽑아 내서 비교합니다. 나중에 뽑아낸 값이 더 크거나 같으면 1을, 아니면 0을 지금 저장공간에 집어넣습니다.
173
+ END
174
+ # rubocop:enable Metrics/LineLength
175
+
176
+ let(:result) { '110' }
177
+ let(:exit_code) { 0 }
178
+
179
+ it_behaves_like 'a runner'
180
+ end
181
+
182
+ describe Raheui::Runner, 'with mieum.aheui' do
183
+ # rubocop:disable Metrics/LineLength
184
+ let(:source) { <<-END }
185
+ 바반받밤발밦밠밣밞망만맘말망맋맠맟망희
186
+
187
+ ㅁ에 ㅇ받침이 있으면 저장공간에서 뽑아낸 값을 숫자로, ㅎ받침이 있으면 그 값에 해당하는 유니코드 문자로 출력합니다. 나머지 받침은 뽑아낸 값을 그냥 버립니다.
188
+ END
189
+ # rubocop:enable Metrics/LineLength
190
+
191
+ let(:result) { '950' }
192
+ let(:exit_code) { 0 }
193
+
194
+ it_behaves_like 'a runner'
195
+ end
196
+
197
+ describe Raheui::Runner, 'with nieun.aheui' do
198
+ # rubocop:disable Metrics/LineLength
199
+ let(:source) { <<-END }
200
+ 밟받나망희
201
+
202
+ ㄴ은 나눗셈 명령으로 저장공간에서 두 값을 뽑아낸 다음 나중 값에서 먼저 값을 나눈 값을 저장공간에 집어넣습니다.
203
+ END
204
+ # rubocop:enable Metrics/LineLength
205
+
206
+ let(:result) { '3' }
207
+ let(:exit_code) { 0 }
208
+
209
+ it_behaves_like 'a runner'
210
+ end
211
+
212
+ describe Raheui::Runner, 'with pieup.aheui' do
213
+ # rubocop:disable Metrics/LineLength
214
+ let(:source) { <<-END }
215
+ 바밟밟땅밝밝땅팡망망우
216
+ 숭ㅇㅇㅇㅇㅇㅇㅇㅇㅇ어
217
+ 밟밟밝밝땅땅바팡망망희
218
+
219
+ ㅍ은 바꿔치기 명령입니다. 지금 저장공간이 스택이라면 맨 위 값과 그 바로 아래 값을, 큐라면 맨 앞의 값과 그 바로 뒤 값을 바꿉니다.
220
+ END
221
+ # rubocop:enable Metrics/LineLength
222
+
223
+ let(:result) { '81494981' }
224
+ let(:exit_code) { 0 }
225
+
226
+ it_behaves_like 'a runner'
227
+ end
228
+
229
+ describe Raheui::Runner, 'with print.aheui' do
230
+ # rubocop:disable Metrics/LineLength
231
+ let(:source) { <<-END }
232
+ 밞밞반다따반타뭉
233
+ ㅇㅇㅇㅇㅇㅇㅇ밞밞반다따반타맣희
234
+
235
+ ㅁ에 ㅇ받침이 있으면 저장공간에서 뽑아낸 값을 숫자로, ㅎ받침이 있으면 그 값에 해당하는 유니코드 문자로 출력합니다.
236
+ END
237
+ # rubocop:enable Metrics/LineLength
238
+
239
+ let(:result) { '97a' }
240
+ let(:exit_code) { 0 }
241
+
242
+ it_behaves_like 'a runner'
243
+ end
244
+
245
+ describe Raheui::Runner, 'with rieul.aheui' do
246
+ # rubocop:disable Metrics/LineLength
247
+ let(:source) { <<-END }
248
+ 밟발라망희
249
+
250
+ ㄹ은 나머지 명령으로 저장공간에서 두 값을 뽑아낸 다음 나중 값에서 먼저 값을 나눈 나머지를 저장공간에 집어넣습니다.
251
+ END
252
+ # rubocop:enable Metrics/LineLength
253
+
254
+ let(:result) { '4' }
255
+ let(:exit_code) { 0 }
256
+
257
+ it_behaves_like 'a runner'
258
+ end
259
+
260
+ describe Raheui::Runner, 'with shebang.aheui' do
261
+ # rubocop:disable Metrics/LineLength
262
+ let(:source) { <<-END }
263
+ #!/usr/bin/env aheui
264
+ 반망희
265
+
266
+ 표준: 커서는 코드 공간의 맨 첫 줄 맨 첫번째 칸에서 시작합니다. 맨 처음에 홀소리가 없을 경우 커서는 기본값으로 아랫쪽으로 이동하는데, 이는 #!과 호환시키기 위한 것으로, 기본 방향이 오른쪽인 funge와는 다른 점입니다.
267
+ END
268
+ # rubocop:enable Metrics/LineLength
269
+
270
+ let(:result) { '2' }
271
+ let(:exit_code) { 0 }
272
+
273
+ it_behaves_like 'a runner'
274
+ end
275
+
276
+ describe Raheui::Runner, 'with ssangbieup.aheui' do
277
+ # rubocop:disable Metrics/LineLength
278
+ let(:source) { <<-END }
279
+ 밟밟땅빵망망희
280
+
281
+ ㅃ은 중복 명령입니다. 지금 저장공간이 스택이라면 맨 위의 값을 그 값 위에 하나 더 집어넣고, 큐라면 맨 앞의 값을 앞에 하나 더 덧붙입니다.
282
+ END
283
+ # rubocop:enable Metrics/LineLength
284
+
285
+ let(:result) { '8181' }
286
+ let(:exit_code) { 0 }
287
+
288
+ it_behaves_like 'a runner'
289
+ end
290
+
291
+ describe Raheui::Runner, 'with ssangdigeut.aheui' do
292
+ # rubocop:disable Metrics/LineLength
293
+ let(:source) { <<-END }
294
+ 발밞따망희
295
+
296
+ ㄸ은 곱셈 명령으로 저장공간에서 두 값을 뽑아낸 다음 둘을 곱한 값을 저장공간에 집어넣습니다.
297
+ END
298
+ # rubocop:enable Metrics/LineLength
299
+
300
+ let(:result) { '45' }
301
+ let(:exit_code) { 0 }
302
+
303
+ it_behaves_like 'a runner'
304
+ end
305
+
306
+ describe Raheui::Runner, 'with ssangsiot.aheui' do
307
+ # rubocop:disable Metrics/LineLength
308
+ let(:source) { <<-END }
309
+ 아바싹반싼받싿우
310
+ 우멍석멍선멍섣어
311
+ 아바쌀반쌈받쌉우
312
+ 우멍설멍섬멍섭어
313
+ 아바쌋반쌍받쌎우
314
+ 우멍섯멍성멍섲어
315
+ 아바쌏반쌐받쌑우
316
+ 우멍섳멍섴멍섵어
317
+ 아바쌒반싺받싻우
318
+ 우멍섶멍섞멍섟어
319
+ 아바싽반싾받쌁우
320
+ 우멍섡멍섢멍섥어
321
+ 아바쌂반쌃받쌄우
322
+ 우멍섦멍섧멍섨어
323
+ 아바쌅반쌆받쌇우
324
+ 우멍섩멍섪멍섫어
325
+ 아바쌊반쌌받싸우
326
+ 희멍섮멍섰멍서어
327
+
328
+ ㅆ은 이동 명령으로 저장공간에서 값 하나를 뽑아내서 받침이 나타내는 저장공간에 그 값을 집어 넣습니다.
329
+ END
330
+ # rubocop:enable Metrics/LineLength
331
+
332
+ let(:result) { '320320320320320320320320320' }
333
+ let(:exit_code) { 0 }
334
+
335
+ it_behaves_like 'a runner'
336
+ end
337
+
338
+ describe Raheui::Runner, 'with storage.aheui' do
339
+ # rubocop:disable Metrics/LineLength
340
+ let(:source) { <<-END }
341
+ 바반받뭉
342
+ 우석멍멍
343
+ 바반받뭉
344
+ 우선멍멍
345
+ 바반받뭉
346
+ 우섣멍멍
347
+ 바반받뭉
348
+ 우설멍멍
349
+ 바반받뭉
350
+ 우섬멍멍
351
+ 바반받뭉
352
+ 우섭멍멍
353
+ 바반받뭉
354
+ 우섯멍멍
355
+ 바반받뭉
356
+ 우성멍멍
357
+ 바반받뭉
358
+ 우섲멍멍
359
+ 바반받뭉
360
+ 우섳멍멍
361
+ 바반받뭉
362
+ 우섴멍멍
363
+ 바반받뭉
364
+ 우섵멍멍
365
+ 바반받뭉
366
+ 우섶멍멍
367
+ 바반받뭉
368
+ 끝희멍멍
369
+
370
+ 아희에서 쓰이는 저장 공간은 여러 개가 있습니다. 대부분이 스택이고, 큐가 하나 있습니다.
371
+ ㅁ은 뽑기 명령입니다. 지금 저장공간이 스택이라면 맨 위의 값, 큐라면 맨 앞의 값을 뽑아냅니다.(pop) 통로라면 거기서 값을 하나 뽑아옵니다. ㅁ 명령에는 받침이 올 수 있는데, 이에 대한 설명은 아래에 있습니다.
372
+ ㅁ에 ㅇ받침이 있으면 저장공간에서 뽑아낸 값을 숫자로, ㅎ받침이 있으면 그 값에 해당하는 유니코드 문자로 출력합니다.
373
+ END
374
+ # rubocop:enable Metrics/LineLength
375
+
376
+ let(:result) { '320320320320320320320320023320320320320320' }
377
+ let(:exit_code) { 0 }
378
+
379
+ it_behaves_like 'a runner'
380
+ end
381
+
382
+ describe Raheui::Runner, 'with syllable.aheui' do
383
+ # rubocop:disable Metrics/LineLength
384
+ let(:source) { <<-END }
385
+ ㅏ희ㅣㅊㅓ
386
+ 뱓ㅗㅈㅊ몽
387
+ ㅂㅁㅎㅣ헥
388
+
389
+ 코드는 한글로만 이루어지는데, 여기서 한글은 유니코드 U+AC00에서 U+D7A3까지의 범위에 있는 글자(hangul syllable 영역)를 말합니다. 그 밖의 글자나 코드에서 지정하지 않은 나머지 공간은 모두 빈 칸으로 처리되어 커서가 이동하는 방향에 아무 영향을 주지 않습니다.
390
+ END
391
+ # rubocop:enable Metrics/LineLength
392
+
393
+ let(:result) { '3' }
394
+ let(:exit_code) { 0 }
395
+
396
+ it_behaves_like 'a runner'
397
+ end
398
+
399
+ describe Raheui::Runner, 'with tieut.aheui' do
400
+ # rubocop:disable Metrics/LineLength
401
+ let(:source) { <<-END }
402
+ 받반타망희
403
+
404
+ ㅌ은 뺄셈 명령으로 저장공간에서 두 값을 뽑아낸 다음 나중 값에서 먼저 값을 뺀 값을 저장공간에 집어넣습니다.
405
+ END
406
+ # rubocop:enable Metrics/LineLength
407
+
408
+ let(:result) { '1' }
409
+ let(:exit_code) { 0 }
410
+
411
+ it_behaves_like 'a runner'
412
+ end
413
+
414
+ describe Raheui::Runner, 'with vowel-2step.aheui' do
415
+ let(:source) { <<-END }
416
+ 뷷우우우희우명
417
+ 아아아아아아아
418
+ 먕오뱞오먕오뵯
419
+
420
+ ㅑ, ㅕ, ㅛ, ㅠ - 커서를 각각 오른쪽, 왼쪽, 위, 아래로 두 칸 옮깁니다.
421
+ END
422
+
423
+ let(:result) { '369' }
424
+ let(:exit_code) { 0 }
425
+
426
+ it_behaves_like 'a runner'
427
+ end
428
+
429
+ describe Raheui::Runner, 'with vowel-advanced.aheui' do
430
+ let(:source) { <<-END }
431
+ 반븓븝불
432
+ 우멍벎망이밟망희
433
+
434
+ 빋밟망희
435
+ 붑으
436
+ 발몽
437
+ ㅇ밞망분
438
+ ㅇ불법벋
439
+ 의멍밞망희
440
+
441
+ ㅡ - 커서가 가로로 왔으면 그 방향대로, 세로로 왔으면 전에 있던 자리로 옮깁니다.
442
+ ㅣ - 커서가 세로로 왔으면 그 방향대로, 가로로 왔으면 전에 있던 자리로 옮깁니다.
443
+ ㅢ - 커서를 전에 있던 자리로 옮깁니다.
444
+ END
445
+
446
+ let(:result) { '543295432954329' }
447
+ let(:exit_code) { 0 }
448
+
449
+ it_behaves_like 'a runner'
450
+ end
451
+
452
+ describe Raheui::Runner, 'with vowel-basic.aheui' do
453
+ let(:source) { <<-END }
454
+ 붇희희멍
455
+ 망밦망볿
456
+
457
+ ㅏ, ㅓ, ㅗ, ㅜ - 커서를 각각 오른쪽, 왼쪽, 위, 아래로 한 칸 옮깁니다.
458
+ END
459
+
460
+ let(:result) { '369' }
461
+ let(:exit_code) { 0 }
462
+
463
+ it_behaves_like 'a runner'
464
+ end
465
+
466
+ describe Raheui::Runner, 'with vowel-useless.aheui' do
467
+ # rubocop:disable Metrics/LineLength
468
+ let(:source) { <<-END }
469
+ 우아앙배벤뱯볩뷜뫙뫵뮝뭥뮁우
470
+ 배맹희맹멩먱몡뮝봘봽붣붠붸어
471
+ 벤멩
472
+ 뱯먱
473
+ 볩몡
474
+ 뷜뮝
475
+ 뫙봘
476
+ 뫵봽
477
+ 묑뵏
478
+ 뭥붠
479
+ 뮁붸
480
+ 아오
481
+
482
+ 기능 없음: ㅐ ㅔ ㅒ ㅖ ㅘ ㅙ ㅚ ㅝ ㅞ ㅟ (커서가 이동하는 방향은 변하지 않습니다.)
483
+ END
484
+ # rubocop:enable Metrics/LineLength
485
+
486
+ let(:result) { '54320543205432054320' }
487
+ let(:exit_code) { 0 }
488
+
489
+ it_behaves_like 'a runner'
490
+ end
491
+
492
+ describe Raheui::Runner, 'with vowel-useless2.aheui' do
493
+ # rubocop:disable Metrics/LineLength
494
+ let(:source) { <<-END }
495
+ 와아앙배벤뱯볩뷜뫙뫵뮝뭥뮁우
496
+ 배맹희맹멩먱몡뮝봘봽붣붠붸어
497
+ 벤멩
498
+ 뱯먱
499
+ 볩몡
500
+ 뷜뮝
501
+ 뫙봘
502
+ 뫵봽
503
+ 묑뵏
504
+ 뭥붠
505
+ 뮁붸
506
+ 아오
507
+
508
+ 기능 없음: ㅐ ㅔ ㅒ ㅖ ㅘ ㅙ ㅚ ㅝ ㅞ ㅟ (커서가 이동하는 방향은 변하지 않습니다.)
509
+ END
510
+ # rubocop:enable Metrics/LineLength
511
+
512
+ let(:result) { '54320543205432054320' }
513
+ let(:exit_code) { 0 }
514
+
515
+ it_behaves_like 'a runner'
516
+ end