zenlish 0.1.23 → 0.1.24

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,473 @@
1
+ # frozen_string_literal: true
2
+ require_relative '../../spec_helper' # Use the RSpec framework
3
+ require_relative '../support/var2word'
4
+ require_relative '../../../lib/zenlish/parser/zparser' # Load the class under test
5
+
6
+ module Zenlish
7
+ module Parser
8
+ describe ZParser do
9
+ include Var2Word
10
+
11
+ subject { ZParser.new }
12
+
13
+ context 'Parsing lesson 3:' do
14
+ it 'should parse sample sentences from lesson 3-A' do
15
+ # Sentence 3-01a definiendum: 'J happens to something that does K.'
16
+ literals = [j_, happens, to, something, that, does, k_, dot]
17
+ expect { subject.to_pforest(literals) }.not_to raise_error
18
+
19
+ # Sentence 3-01b definiens: 'J happens to something.
20
+ # This same something does K.
21
+ # [Tony has something that Lisa wants.]'
22
+ literals = [j_, happens, to, something, dot,
23
+ this, same, thing, does, k_, dot,
24
+ tony, has, something, that, lisa, wants, dot
25
+ ]
26
+ expect { subject.to_pforest(literals) }.not_to raise_error
27
+
28
+ # Sentence 3-02a definiendum: 'J is true, and K is true.'
29
+ literals = [j_, is, true_, comma, and_, k_, is, true_, dot]
30
+ expect { subject.to_pforest(literals) }.not_to raise_error
31
+
32
+ # Sentence 3-02b definiens: 'These two things are true: J is true.
33
+ # K is true.'
34
+ # [Lisa sees Tony, and Tony sees Lisa.]'
35
+ literals = [these, two, things, are, true_, colon, j_, is, true_, dot,
36
+ k_, is, true_, dot,
37
+ lisa, sees, tony, comma, and_, tony, sees, lisa, dot
38
+ ]
39
+ expect { subject.to_pforest(literals) }.not_to raise_error
40
+
41
+ # Sentence 3-02c definiendum: 'J and K do X.'
42
+ literals = [j_, and_, k_, do_, x_as_noun, dot]
43
+ expect { subject.to_pforest(literals) }.not_to raise_error
44
+
45
+ # Sentence 3-02d definiens: 'These two things do X.
46
+ # J is one that does this.
47
+ # K is another that does this.'
48
+ # [Tony and Lisa want to see me.]
49
+ # [I see Tony and Lisa.]'
50
+ literals = [these, two, things, do_, x_as_noun, dot,
51
+ j_, is, one_as_adj, that, does, this_as_pronoun, dot,
52
+ k_, is, another, that, does, this_as_pronoun, dot,
53
+ tony, and_, lisa, want, to, see, me, dot,
54
+ i_pronoun, see, tony, and_, lisa, dot
55
+ ]
56
+ expect { subject.to_pforest(literals) }.not_to raise_error
57
+
58
+ # Sentence 3-03a definiendum: 'J is true, or K is true.'
59
+ literals = [j_, is, true_, comma, or_, k_, is, true_, dot]
60
+ expect { subject.to_pforest(literals) }.not_to raise_error
61
+
62
+ # Sentence 3-03b definiens: 'If J is not true, then K is true.
63
+ # [Tony saw me, or Lisa heard me.]
64
+ literals = [if_, j_, is, not_, true_, comma,
65
+ then_, k_, is, true_, dot,
66
+ tony, saw, me, comma, or_, lisa, heard, me, dot
67
+ ]
68
+ expect { subject.to_pforest(literals) }.not_to raise_error
69
+
70
+ # Sentence 3-03c definiendum: 'J or K does this.'
71
+ literals = [j_, or_, k_, does, this_as_pronoun, dot]
72
+ expect { subject.to_pforest(literals) }.not_to raise_error
73
+
74
+ # Sentence 3-03d definiendum: 'If J does not do this, then K does this.'
75
+ literals = [if_, j_, does_aux, not_, do_, this_as_pronoun, comma,
76
+ then_, k_, does, this_as_pronoun, dot]
77
+ expect { subject.to_pforest(literals) }.not_to raise_error
78
+
79
+ # Sentence 3-03e: '[Lisa or Tony said something.]
80
+ # [This belongs to Tony or Lisa.]'
81
+ literals = [lisa, or_, tony, said, something, dot,
82
+ this_as_pronoun, belongs, to, tony, or_, lisa, dot
83
+ ]
84
+ expect { subject.to_pforest(literals) }.not_to raise_error
85
+
86
+ # Sentence 3-04a definiendum: 'It does something.'
87
+ literals = [it_, does, something, dot]
88
+ expect { subject.to_pforest(literals) }.not_to raise_error
89
+
90
+ # Sentence 3-04b definiens: 'This thing does something.'
91
+ # [I touched this thing, and it moved.]
92
+ literals = [this, thing, does, something, dot,
93
+ i_pronoun, touched, this, thing, comma, and_, it_, moved, dot
94
+ ]
95
+ expect { subject.to_pforest(literals) }.not_to raise_error
96
+
97
+ # Sentence 3-04c definiendum: 'They do something.'
98
+ literals = [they, does, something, dot
99
+ ]
100
+ expect { subject.to_pforest(literals) }.not_to raise_error
101
+
102
+ # Sentence 3-04d definiens: 'These things or people do something.'
103
+ # [Something happens to them.] = Something happens to these things or people.
104
+ literals = [ these, things, or_, people, do_, something, dot,
105
+ something, happens, to, them, dot,
106
+ something, happens, to, these, things, or_, people, dot
107
+ ]
108
+ expect { subject.to_pforest(literals) }.not_to raise_error
109
+ end
110
+
111
+ it 'should parse sample sentences from lesson 3-B' do
112
+ # Sentence 3-05a definiendum: 'This is its X.'
113
+ literals = [this_as_pronoun, is, its, x_as_noun, dot
114
+ ]
115
+ expect { subject.to_pforest(literals) }.not_to raise_error
116
+
117
+ # Sentence 3-05b definiens: 'This X belongs to it.
118
+ # [I saw this thing and touched some of its parts.]
119
+ # [These things are their things.] = These things belong to them.
120
+ literals = [this, x_as_noun, belongs, to, it_, dot,
121
+ i_pronoun, saw, this, thing, and_, touched, some, of, its, parts, dot
122
+ ]
123
+ expect { subject.to_pforest(literals) }.not_to raise_error
124
+
125
+ # Sentence 3-05c definiendum: 'These things are their things.'
126
+ literals = [these, things, are, their, things, dot
127
+ ]
128
+ expect { subject.to_pforest(literals) }.not_to raise_error
129
+
130
+ # Sentence 3-05d definiens: 'These things belong to them.
131
+ literals = [these, things, belong, to, them, dot]
132
+ expect { subject.to_pforest(literals) }.not_to raise_error
133
+
134
+ # Sentence 3-06a definiendum: 'This is your X.'
135
+ literals = [this_as_pronoun, is, your, x_as_noun, dot]
136
+ expect { subject.to_pforest(literals) }.not_to raise_error
137
+
138
+ # Sentence 3-06b definien: 'This X belongs to you.
139
+ # [You feel something touching your body.]
140
+ literals = [this, x_as_noun, belongs, to, you, dot,
141
+ you, feel, something, touching, your, body, dot
142
+ ]
143
+ expect { subject.to_pforest(literals) }.not_to raise_error
144
+
145
+ # Sentence 3-07a definiendum: 'This is my X.'
146
+ literals = [this_as_pronoun, is, my, x_as_noun, dot,
147
+ ]
148
+ expect { subject.to_pforest(literals) }.not_to raise_error
149
+
150
+ # Sentence 3-07b definiens: 'This X belongs to me.
151
+ # [I do not want you to touch my body.]
152
+ literals = [this, x_as_noun, belongs, to, me, dot,
153
+ i_pronoun, do_aux, not_, want, to, touch, my, body, dot
154
+ ]
155
+ expect { subject.to_pforest(literals) }.not_to raise_error
156
+
157
+ # Sentence 3-08a definiendum: 'There is an X here.'
158
+ literals = [there, is, an, x_as_noun, here, dot]
159
+ expect { subject.to_pforest(literals) }.not_to raise_error
160
+
161
+ # Sentence 3-08b definiens: 'X is some kind of thing.
162
+ # There is one of this kind of thing here.
163
+ # This is not one that you said something about a short time before now.
164
+ # [I did not know there was a person in this place.]
165
+ literals = [x_as_noun, is, some, kind, of, thing, dot,
166
+ there, is, one, of, this, kind, of, thing, here, dot,
167
+ this_as_pronoun, is, not_, one_as_adj, that, you, said, something,
168
+ about, a_as_art, short, time, before_as_adj, now_as_noun, dot
169
+ ]
170
+ expect { subject.to_pforest(literals) }.not_to raise_error
171
+
172
+ # Sentence 3-Bxa 'Lisa sees a living thing that is very big.
173
+ # Lisa says: "I see one living thing. Its body is bigger than my body.", dot
174
+ literals = [
175
+ lisa, sees, a_as_art, living, thing, that, is, very, big, dot,
176
+ lisa, says, colon, quote, i_pronoun, see, one, living, thing, dot,
177
+ its, body, is, bigger, than, my, body, dot, quote, dot
178
+ ]
179
+ expect { subject.to_pforest(literals) }.not_to raise_error
180
+ end
181
+
182
+ it 'should parse sample sentences from lesson 3-C' do
183
+ # Sentence 3-09a definiendum: 'Something happens to the X.'
184
+ literals = [something, happens, to, the, x_as_noun, dot]
185
+ expect { subject.to_pforest(literals) }.not_to raise_error
186
+
187
+ # Sentence 3-09b definiens: Something happens to X.
188
+ # This is the same X that someone said something about a short time before,
189
+ # or there is not another thing that is the same kind as X.
190
+ # [I saw two people here before, and now I do not see the people.]
191
+ literals = [something, happens, to, x_as_noun, dot,
192
+ this_as_pronoun, is, the, same, x_as_noun, that, someone, said, something, about,
193
+ a_as_art, short, time, before_as_adj, comma,
194
+ or_, there, is, not_, another, thing, that, is, the, same, kind,
195
+ as, x_as_noun, dot,
196
+ i_pronoun, saw, two, people, here, before_adverb, comma,
197
+ and_, now, i_pronoun, do_aux, not_, see, the, people, dot
198
+ ]
199
+ expect { subject.to_pforest(literals) }.not_to raise_error
200
+
201
+ # Sentence 3-10a definiendum: 'X is an animal.'
202
+ literals = [x_as_noun, is, an, animal, dot]
203
+ expect { subject.to_pforest(literals) }.not_to raise_error
204
+
205
+ # Sentence 3-10b definiens: There are many kinds of living things
206
+ # that can feel and can move when they want. X is one of these.
207
+ # [The animal moved when someone touched its body.]
208
+ literals = [ there, are, many, kinds, of, living, things,
209
+ that, can, feel, and_, can, move, when_, they, want, dot,
210
+ x_as_noun, is, one, of, these_as_pronoun, dot,
211
+ the, animal, moved, when_, someone, touched, its, body, dot
212
+ ]
213
+ expect { subject.to_pforest(literals) }.not_to raise_error
214
+
215
+ # Sentence 3-11a definiendum: 'J causes K to happen.'
216
+ literals = [j_, causes, k_, to, happen, dot]
217
+ expect { subject.to_pforest(literals) }.not_to raise_error
218
+
219
+ # Sentence 3-11b definiens: K happens because J happens
220
+ # or because J does something.
221
+ # [Someone bad caused these people to die.]
222
+ literals = [ k_, happens, because, j_, happens,
223
+ or_, because, j_, does, something, dot,
224
+ something, bad, caused, these, people, to, die, dot
225
+ ]
226
+ expect { subject.to_pforest(literals) }.not_to raise_error
227
+
228
+ # Sentence 3-12a definiendum: 'J is true, but K is not true.'
229
+ literals = [j_, is, true_, comma, but, k_, is, not_, true_, dot]
230
+ expect { subject.to_pforest(literals) }.not_to raise_error
231
+
232
+ # Sentence 3-12b definiens: You say J is true.
233
+ # Maybe when some people hear J is true,
234
+ # they think K is true because of this.
235
+ # You want them to know K is not true, and you say this.
236
+ # [I hear Tony, but I do not see Tony.]
237
+ literals = [ maybe, when_, some, people, hear, j_, is, true_, comma,
238
+ they, think, k_, is, true_, because, of, this_as_pronoun, dot,
239
+ you, want, them, to, know, k_, is, not_, true_, comma,
240
+ and_, you, say, this_as_pronoun, dot,
241
+ i_pronoun, hear, tony, comma, but, i_pronoun, do_aux, not_, see, lisa, dot
242
+ ]
243
+ expect { subject.to_pforest(literals) }.not_to raise_error
244
+
245
+ # Sentence 3-C Xtra Lisa says: "I can hear an animal, but I do not see it."
246
+ # Tony says: "I can see the animal that you hear.".
247
+ literals = [ lisa, says, colon, quote, i_pronoun, can, hear, an,
248
+ animal, comma, but, i_pronoun, do_aux, not_, see, it_, dot, quote,
249
+ dot, tony, says, colon, quote, i_pronoun, can, see, the, animal,
250
+ that, you, hear, dot, quote, dot
251
+ ]
252
+ expect { subject.to_pforest(literals) }.not_to raise_error
253
+ end
254
+
255
+ it 'should parse sample sentences from lesson 3-D' do
256
+ # Sentence 3-13a definiendum: 'You use this thing.'
257
+ literals = [you, use, this, thing, dot]
258
+ expect { subject.to_pforest(literals) }.not_to raise_error
259
+
260
+ # Sentence 3-13b definiens: You do something with this thing
261
+ # because you think this can cause something to happen that you want.
262
+ # [I used something big to cause people far from here to see me.]
263
+ literals = [ you, do_, something, with, this, thing, because, you,
264
+ think, this_as_pronoun, can, cause, something, to, happen,
265
+ that, you, want, dot,
266
+ i_pronoun, used, something, big, to, cause, people, far, from,
267
+ here_as_noun, to, see, me, dot
268
+ ]
269
+ expect { subject.to_pforest(literals) }.not_to raise_error
270
+
271
+ # Sentence 3-14a definiendum: 'You know X about each of these things.'
272
+ literals = [you, know, x_as_noun, about, each_, of, these, things, dot]
273
+ expect { subject.to_pforest(literals) }.not_to raise_error
274
+
275
+ # Sentence 3-14b definiens: There are two or more things.
276
+ # You think about all these things like this:
277
+ # If something is one of these things, then you know X about it.
278
+ # [Each person here said something to me.]
279
+ # because you think this can cause something to happen that you want.
280
+ # [I used something big to cause people far from here to see me.]
281
+ literals = [ there, are, two, or_, more, things, dot,
282
+ you, think, about, all, these, things, like, this_as_pronoun, colon,
283
+ if_, something, is, one, of, these, things, comma,
284
+ then_, you, know, x_as_noun, about, it_, dot,
285
+ each_, person, here, said, something, to, me, dot
286
+ ]
287
+ expect { subject.to_pforest(literals) }.not_to raise_error
288
+
289
+ # Sentence 3-15a definiendum: 'Someplace an X exists.'
290
+ literals = [someplace, an, x_as_noun, exists, dot]
291
+ expect { subject.to_pforest(literals) }.not_to raise_error
292
+
293
+ # Sentence 3-15b definiens: Someplace there is an X,
294
+ # or someplace an X is alive.
295
+ # [This kind of thing did not exist before this time.]
296
+ literals = [ someplace, there, is, an, x_as_noun, comma,
297
+ or_, someplace, an, x_as_noun, is, alive, dot,
298
+ this, kind, of, thing, did, not_, exist, before, this, time, dot]
299
+ expect { subject.to_pforest(literals) }.not_to raise_error
300
+
301
+ # Sentence 3-16a definiendum: 'J became K.'
302
+ literals = [j_, became, k_, dot]
303
+ expect { subject.to_pforest(literals) }.not_to raise_error
304
+
305
+ # Sentence 3-16b definiens: Something happened to J for some time.
306
+ # After this happened, K is something true you can know about J.
307
+ # But before this happened, K was not true.
308
+ # [These two animals were small before, but they became big.]
309
+ literals = [ something, happened, to, j_, for_, some, time, dot,
310
+ after_, this_as_pronoun, happened, comma, k_, is, something, true_,
311
+ you, can, know, about, j_, dot,
312
+ these, two, animals, were, small, before_adverb, comma,
313
+ but, they, became, big, dot
314
+ ]
315
+ expect { subject.to_pforest(literals) }.not_to raise_error
316
+
317
+ # Sentence 3-Dx: There are some animals here.
318
+ # Each of these animals was small when it existed a short time.
319
+ # After a long time, each of these animals became big.
320
+ literals = [there, are, some, animal, here, dot,
321
+ each_, of, these, animals, was, small, when_, it_,
322
+ existed, a_as_art, short, time, dot,
323
+ after_, a_as_art, long, time, comma, each_, of, these, animals,
324
+ became, big, dot
325
+ ]
326
+ expect { subject.to_pforest(literals) }.not_to raise_error
327
+ end
328
+
329
+ it 'should parse sample sentences from lesson 3-E' do
330
+ # Sentence 3-17a definiendum: 'These things are different.'
331
+ literals = [things, are, different, dot]
332
+ expect { subject.to_pforest(literals) }.not_to raise_error
333
+
334
+ # Sentence 3-17b definiens: These things are not the same.
335
+ # [I want this kind of thing, but you want something different.]
336
+ literals = [ these, things, are, not_, the, same_as_pronoun, dot,
337
+ i_pronoun, want, this, kind, of, thing, comma,
338
+ but, you, want, something, different, dot
339
+ ]
340
+ expect { subject.to_pforest(literals) }.not_to raise_error
341
+
342
+ # Sentence 3-18a definiendum: 'J made K.'
343
+ literals = [j_, made, k_, dot]
344
+ expect { subject.to_pforest(literals) }.not_to raise_error
345
+
346
+ # Sentence 3-18b definiens: J did something to some things
347
+ # and caused them to become parts of one different
348
+ # kind of thing that was not here before.
349
+ # K is this thing that now exists because of this.
350
+ # [I used many small things to make this big thing.]
351
+ # [J made K happen.] = J caused K to happen.
352
+ literals = [ j_, did, something, to, some, things, and_,
353
+ caused, them, to, become, parts, of, one, different, kind, of,
354
+ thing, that, was, not_, here, before_adverb, dot,
355
+ k_, is, this, thing, that, now, exists, because, of, this_as_pronoun, dot,
356
+ i_pronoun, used, many, small, things, to, make, this, big, thing, dot,
357
+ j_, made, k_, happen, dot,
358
+ j_, caused, k_, to, happen, dot
359
+ ]
360
+ expect { subject.to_pforest(literals) }.not_to raise_error
361
+
362
+ # Sentence 3-19a definiendum: 'J contains K.'
363
+ literals = [j_, contains, k_, dot]
364
+ expect { subject.to_pforest(literals) }.not_to raise_error
365
+
366
+ # Sentence 3-19b definiens: K is inside J.
367
+ # [I made something to contain all these small things.]
368
+ # [Your body contains many parts.]
369
+ literals = [ k_, is, inside, j_, dot,
370
+ i_pronoun, made, something, to, contain, all, these, small, things, dot,
371
+ your, body, contains, many, parts, dot,
372
+ ]
373
+ expect { subject.to_pforest(literals) }.not_to raise_error
374
+
375
+ # Sentence 3-20a definiendum: 'X is a container.'
376
+ literals = [x_as_noun, is, a_as_art, container, dot]
377
+ expect { subject.to_pforest(literals) }.not_to raise_error
378
+
379
+ # Sentence 3-20b definiens: X is something that people make because
380
+ # they want to use it to contain other things.
381
+ # [There are two things inside this container.]
382
+ literals = [ x_as_noun, is, something, that, people, make, because,
383
+ they, want, to, use, it_, to, contain, other, things, dot,
384
+ there, are, two, things, inside, this, container, dot
385
+ ]
386
+ expect { subject.to_pforest(literals) }.not_to raise_error
387
+
388
+ # Sentence 3-Extra: Someone made these containers.
389
+ # Each contains a different kind of animal.
390
+ literals = [someone, made, these, containers, dot,
391
+ each_as_pronoun, contains, a_as_art, different, kind, of, animal, dot
392
+ ]
393
+ expect { subject.to_pforest(literals) }.not_to raise_error
394
+ end
395
+ it 'should parse sample sentences from lesson 3-F' do
396
+ # Sentence 3-21a definiendum: 'You try to do X.'
397
+ literals = [you, try_, to, do_, x_as_noun, dot]
398
+ expect { subject.to_pforest(literals) }.not_to raise_error
399
+
400
+ # Sentence 3-21b definiens: Because you want X to happen,
401
+ # you do things that you think can cause X to happen.
402
+ # [I tried to do something good.]
403
+ literals = [ because, you, want, x_as_noun, to, happen, comma,
404
+ you, do_, things, that, you, think, can, cause, x_as_noun,
405
+ to, happen, dot,
406
+ i_pronoun, tried, to, do_, something, good, dot
407
+ ]
408
+ expect { subject.to_pforest(literals) }.not_to raise_error
409
+
410
+ # Sentence 3-22a definiendum: 'X changed.'
411
+ literals = [x_as_noun, changed, dot]
412
+ expect { subject.to_pforest(literals) }.not_to raise_error
413
+
414
+ # Sentence 3-22b definiens: Something happened to X.
415
+ # Because of this, X is not the same as before.
416
+ # [After this kind of animal is alive for some time, its body changes.]
417
+ literals = [ something, happened, to, x_as_noun, dot,
418
+ because, of, this_as_pronoun, comma, x_as_noun, is, not_, the, same_as_pronoun,
419
+ as, before_adverb, dot,
420
+ after_, this, kind, of, animal, is, alive, for_, some, time, comma,
421
+ its, body, changes, dot
422
+ ]
423
+ expect { subject.to_pforest(literals) }.not_to raise_error
424
+
425
+ # Sentence 3-22c definiendum: 'J changed K.'
426
+ literals = [j_, changed, k_, dot]
427
+ expect { subject.to_pforest(literals) }.not_to raise_error
428
+
429
+ # Sentence 3-22d definiens: J caused K to change.
430
+ # Because of this, X is not the same as before.
431
+ # [When these people did something bad, it changed what I thought about them.]
432
+ literals = [ j_, caused, k_, to, change_, dot,
433
+ when_, these, people, did, something, bad, comma,
434
+ it_, changed, what, i_pronoun, thought, about, them, dot
435
+ ]
436
+ expect { subject.to_pforest(literals) }.not_to raise_error
437
+
438
+ # Sentence 3-23a definiendum: 'You see the surface of X.'
439
+ literals = [you, see, the, surface, of, x_as_noun, dot]
440
+ expect { subject.to_pforest(literals) }.not_to raise_error
441
+
442
+ # Sentence 3-23b definiens: You see part of X.
443
+ # This part is where other things can touch X.
444
+ # [I can see the surface of this thing, but I cannot see what is inside.]
445
+ # [When I touched this thing, I could feel parts of it moving below its surface.]
446
+ # comment: `where` word was implicitly defined in section 1-25.
447
+ # `could` verb was implicitly defined in section 2-10.
448
+ literals = [ i_pronoun, can, see, the, surface, of, this, thing, comma,
449
+ but, i_pronoun, can, not_, see, what, is, inside, dot,
450
+ when_, i_pronoun, touched, this, thing, comma, i_pronoun, could,
451
+ feel, parts, of, it_, moving, below, its, surface, dot
452
+ ]
453
+ expect { subject.to_pforest(literals) }.not_to raise_error
454
+
455
+ # Sentence 3-23c definiendum: 'J is on the surface of K.'
456
+ literals = [j_, is, on, the, surface, of, k_, dot]
457
+ expect { subject.to_pforest(literals) }.not_to raise_error
458
+
459
+ # Sentence 3-23d definiens: J is touching the surface of K.
460
+ literals = [ j_, is, touching, the, surface, of, k_, dot]
461
+ expect { subject.to_pforest(literals) }.not_to raise_error
462
+
463
+ # Sentence 3-F xtra: Tony wants to know what is inside this container.
464
+ # Tony tries to touch things inside the container.
465
+ literals = [ tony, wants, to, know, what, is, inside, this, container, dot,
466
+ tony, tries, to, touch, things, inside, the, container, dot
467
+ ]
468
+ expect { subject.to_pforest(literals) }.not_to raise_error
469
+ end
470
+ end # context
471
+ end # describe
472
+ end # module
473
+ end # module