raheui 1.0.0

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.
@@ -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