text_alignment 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ class TextAlignment
2
+ VERSION = '0.2.0'
3
+ end
@@ -0,0 +1 @@
1
+ require 'text_alignment'
@@ -0,0 +1,302 @@
1
+ require 'spec_helper'
2
+
3
+ describe TextAlignment::GLCSAlignment do
4
+ context 'for exception handling' do
5
+ it 'should raise error for passing of nil strings' do
6
+ expect {TextAlignment::GLCSAlignment.new('abc', nil)}.to raise_error
7
+ expect {TextAlignment::GLCSAlignment.new(nil, 'abc')}.to raise_error
8
+ expect {TextAlignment::GLCSAlignment.new(nil, nil)}.to raise_error
9
+ end
10
+
11
+ it 'should raise error for passing of nil dictionary' do
12
+ expect {TextAlignment::GLCSAlignment.new('abc', 'abc', nil)}.to raise_error
13
+ end
14
+ end
15
+
16
+ context 'in the beginning of a string' do
17
+ it 'should detect a deletion' do
18
+ #012345 012
19
+ sa = TextAlignment::GLCSAlignment.new('xyzabc', 'abc')
20
+ expect(sa.position_map_begin).to eq({0=>0, 1=>0, 2=>0, 3=>0, 4=>1, 5=>2, 6=>3})
21
+ expect(sa.position_map_end).to eq({0=>0, 1=>0, 2=>0, 3=>0, 4=>1, 5=>2, 6=>3})
22
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
23
+ expect(sa.mapped_elements).to eq([])
24
+ end
25
+
26
+ it 'should detect an addition' do
27
+ #012 012345
28
+ sa = TextAlignment::GLCSAlignment.new('abc', 'xyzabc')
29
+ expect(sa.position_map_begin).to eq({0=>3, 1=>4, 2=>5, 3=>6})
30
+ expect(sa.position_map_end).to eq({0=>3, 1=>4, 2=>5, 3=>6})
31
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
32
+ expect(sa.mapped_elements).to eq([])
33
+ end
34
+
35
+ it 'should detect a variation' do
36
+ #012345 01234
37
+ sa = TextAlignment::GLCSAlignment.new('ijkabc', 'xyabc')
38
+ expect(sa.position_map_begin).to eq({0=>0, 1=>nil, 2=>nil, 3=>2, 4=>3, 5=>4, 6=>5})
39
+ expect(sa.position_map_end).to eq({0=>0, 1=>nil, 2=>nil, 3=>2, 4=>3, 5=>4, 6=>5})
40
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
41
+ expect(sa.mapped_elements).to eq([['ijk', 'xy']])
42
+ end
43
+ end
44
+
45
+ context 'in the end of a string' do
46
+ it 'should detect a deletion' do
47
+ #012345 012
48
+ sa = TextAlignment::GLCSAlignment.new('abcxyz', 'abc')
49
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>3, 4=>3, 5=>3, 6=>3})
50
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>3, 4=>3, 5=>3, 6=>3})
51
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
52
+ expect(sa.mapped_elements).to eq([])
53
+ end
54
+
55
+ it 'should detect an addition' do
56
+ #012 012345
57
+ sa = TextAlignment::GLCSAlignment.new('abc', 'abcxyz')
58
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>3})
59
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>3})
60
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
61
+ expect(sa.mapped_elements).to eq([])
62
+ end
63
+
64
+ it 'should detect a variation' do
65
+ #012345 01234
66
+ sa = TextAlignment::GLCSAlignment.new('abcijk', 'abcxy')
67
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>3, 4=>nil, 5=>nil, 6=>5})
68
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>3, 4=>nil, 5=>nil, 6=>5})
69
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
70
+ expect(sa.mapped_elements).to eq([['ijk', 'xy']])
71
+ end
72
+ end
73
+
74
+ context 'in the middle of a string' do
75
+ it 'should detect a deletion' do
76
+ #0123456 0123
77
+ sa = TextAlignment::GLCSAlignment.new('abxyzcd', 'abcd')
78
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>2, 4=>2, 5=>2, 6=>3, 7=>4})
79
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>2, 4=>2, 5=>2, 6=>3, 7=>4})
80
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c'], ['d', 'd']])
81
+ expect(sa.mapped_elements).to eq([])
82
+ end
83
+
84
+ it 'should detect an addition' do
85
+ #0123 0123456
86
+ sa = TextAlignment::GLCSAlignment.new('abcd', 'abxyzcd')
87
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>6, 4=>7})
88
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>6, 4=>7})
89
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c'], ['d', 'd']])
90
+ expect(sa.mapped_elements).to eq([])
91
+ end
92
+
93
+ it 'should detect a variation' do
94
+ #0123456 012345
95
+ sa = TextAlignment::GLCSAlignment.new('abijkcd', 'abxycd')
96
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>nil, 4=>nil, 5=>4, 6=>5, 7=>6})
97
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>nil, 4=>nil, 5=>4, 6=>5, 7=>6})
98
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c'], ['d', 'd']])
99
+ expect(sa.mapped_elements).to eq([['ijk', 'xy']])
100
+ end
101
+ end
102
+
103
+ context ', with a dictionary with the first entry, ' do
104
+ before(:all) do
105
+ @dictionary = [["β", "beta"]]
106
+ end
107
+ it 'should handle consecutive unicode spellouts in the middle of a string' do
108
+ #0123 01234567890
109
+ sa = TextAlignment::GLCSAlignment.new('-βκ-', '-betakappa-', @dictionary)
110
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>10, 4=>11})
111
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>5, 3=>10, 4=>11})
112
+ expect(sa.common_elements).to eq([['-', '-'], ['β', 'beta'], ['-', '-']])
113
+ expect(sa.mapped_elements).to eq([['κ', 'kappa']])
114
+ end
115
+
116
+ it 'should handle consecutive unicode spellouts in the end of a string' do
117
+ #012 0123456789
118
+ sa = TextAlignment::GLCSAlignment.new('-βκ', '-betakappa', @dictionary)
119
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>10})
120
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>5, 3=>10})
121
+ expect(sa.common_elements).to eq([['-', '-'], ['β', 'beta']])
122
+ expect(sa.mapped_elements).to eq([['κ', 'kappa']])
123
+ end
124
+
125
+ it 'should handle consecutive unicode spellouts in the beginning of a string' do
126
+ #012 0123456789
127
+ sa = TextAlignment::GLCSAlignment.new('βκ-', 'betakappa-', @dictionary)
128
+ expect(sa.position_map_begin).to eq({0=>0, 1=>4, 2=>9, 3=>10})
129
+ expect(sa.position_map_end).to eq({0=>0, 1=>4, 2=>9, 3=>10})
130
+ expect(sa.common_elements).to eq([['β', 'beta'], ['-', '-']])
131
+ expect(sa.mapped_elements).to eq([['κ', 'kappa']])
132
+ end
133
+
134
+ it 'should handle consecutive unicode restorations in the middle of a string' do
135
+ #01234567890 0123
136
+ sa = TextAlignment::GLCSAlignment.new('-betakappa-', '-βκ-', @dictionary)
137
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3, 11=>4})
138
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3, 11=>4})
139
+ end
140
+
141
+ it 'should handle consecutive unicode restorations in the beginning of a string' do
142
+ #0123456789 012
143
+ sa = TextAlignment::GLCSAlignment.new('betakappa-', 'βκ-', @dictionary)
144
+ expect(sa.position_map_begin).to eq({0=>0, 1=>nil, 2=>nil, 3=>nil, 4=>1, 5=>nil, 6=>nil, 7=>nil, 8=>nil, 9=>2, 10=>3})
145
+ expect(sa.position_map_end).to eq({0=>0, 1=>nil, 2=>nil, 3=>nil, 4=>1, 5=>nil, 6=>nil, 7=>nil, 8=>nil, 9=>2, 10=>3})
146
+ end
147
+
148
+ it 'should handle consecutive unicode restorations in the end of a string' do
149
+ #0123456789 012
150
+ sa = TextAlignment::GLCSAlignment.new('-betakappa', '-βκ', @dictionary)
151
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3})
152
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3})
153
+ end
154
+ end
155
+
156
+ context ', with a dictionary with the second entry, ' do
157
+ before(:all) do
158
+ @dictionary = [["κ", "kappa"]]
159
+ end
160
+ it 'should handle consecutive unicode spellouts in the middle of a string' do
161
+ #0123 01234567890
162
+ sa = TextAlignment::GLCSAlignment.new('-βκ-', '-betakappa-', @dictionary)
163
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>10, 4=>11})
164
+ end
165
+
166
+ it 'should handle consecutive unicode spellouts in the end of a string' do
167
+ #012 0123456789
168
+ sa = TextAlignment::GLCSAlignment.new('-βκ', '-betakappa', @dictionary)
169
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>10})
170
+ end
171
+
172
+ it 'should handle consecutive unicode spellouts in the beginning of a string' do
173
+ #012 0123456789
174
+ sa = TextAlignment::GLCSAlignment.new('βκ-', 'betakappa-', @dictionary)
175
+ expect(sa.position_map_begin).to eq({0=>0, 1=>4, 2=>9, 3=>10})
176
+ end
177
+
178
+ it 'should handle consecutive unicode restorations in the middle of a string' do
179
+ #01234567890 0123
180
+ sa = TextAlignment::GLCSAlignment.new('-betakappa-', '-βκ-', @dictionary)
181
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3, 11=>4})
182
+ end
183
+
184
+ it 'should handle consecutive unicode restorations in the beginning of a string' do
185
+ #0123456789 012
186
+ sa = TextAlignment::GLCSAlignment.new('betakappa-', 'βκ-', @dictionary)
187
+ expect(sa.position_map_begin).to eq({0=>0, 1=>nil, 2=>nil, 3=>nil, 4=>1, 5=>nil, 6=>nil, 7=>nil, 8=>nil, 9=>2, 10=>3})
188
+ end
189
+
190
+ it 'should handle consecutive unicode restorations in the end of a string' do
191
+ #0123456789 012
192
+ sa = TextAlignment::GLCSAlignment.new('-betakappa', '-βκ', @dictionary)
193
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3})
194
+ end
195
+ end
196
+
197
+ context ', with a dictionary with both entries, ' do
198
+ before(:all) do
199
+ @dictionary = [["β", "beta"], ["κ", "kappa"]]
200
+ end
201
+ it 'should handle consecutive unicode spellouts in the middle of a string' do
202
+ #0123 01234567890
203
+ sa = TextAlignment::GLCSAlignment.new('-βκ-', '-betakappa-', @dictionary)
204
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>10, 4=>11})
205
+ end
206
+
207
+ it 'should handle consecutive unicode spellouts in the end of a string' do
208
+ #012 0123456789
209
+ sa = TextAlignment::GLCSAlignment.new('-βκ', '-betakappa', @dictionary)
210
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>10})
211
+ end
212
+
213
+ it 'should handle consecutive unicode spellouts in the beginning of a string' do
214
+ #012 0123456789
215
+ sa = TextAlignment::GLCSAlignment.new('βκ-', 'betakappa-', @dictionary)
216
+ expect(sa.position_map_begin).to eq({0=>0, 1=>4, 2=>9, 3=>10})
217
+ end
218
+
219
+ it 'should handle consecutive unicode restorations in the middle of a string' do
220
+ #01234567890 0123
221
+ sa = TextAlignment::GLCSAlignment.new('-betakappa-', '-βκ-', @dictionary)
222
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3, 11=>4})
223
+ end
224
+
225
+ it 'should handle consecutive unicode restorations in the beginning of a string' do
226
+ #0123456789 012
227
+ sa = TextAlignment::GLCSAlignment.new('betakappa-', 'βκ-', @dictionary)
228
+ expect(sa.position_map_begin).to eq({0=>0, 1=>nil, 2=>nil, 3=>nil, 4=>1, 5=>nil, 6=>nil, 7=>nil, 8=>nil, 9=>2, 10=>3})
229
+ end
230
+
231
+ it 'should handle consecutive unicode restorations in the end of a string' do
232
+ #0123456789 012
233
+ sa = TextAlignment::GLCSAlignment.new('-betakappa', '-βκ', @dictionary)
234
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3})
235
+ end
236
+ end
237
+
238
+ context ', with a dictionary, ' do
239
+ before(:all) do
240
+ @dictionary = [["β", "beta"], ["κ", "kappa"]]
241
+ end
242
+
243
+ it 'should handle a unicode spellout followed by addition' do
244
+ #012 012345678
245
+ sa = TextAlignment::GLCSAlignment.new("-β-", "-beta***-", @dictionary)
246
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>8, 3=>9})
247
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>5, 3=>9})
248
+ end
249
+
250
+ it 'should handle a unicode retoration followed by addition' do
251
+ #012345 012345
252
+ sa = TextAlignment::GLCSAlignment.new("-beta-", "-β***-", @dictionary)
253
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>5, 6=>6})
254
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>6})
255
+ end
256
+
257
+ it 'should handle a unicode spellout followed by deletion' do
258
+ #012345 012345
259
+ sa = TextAlignment::GLCSAlignment.new("-β***-", "-beta-", @dictionary)
260
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>5, 4=>5, 5=>5, 6=>6})
261
+ end
262
+
263
+ it 'should handle a unicode retoration followed by deletion' do
264
+ #012345678 0123
265
+ sa = TextAlignment::GLCSAlignment.new("-beta***-", "-β-", @dictionary)
266
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>2, 7=>2, 8=>2, 9=>3})
267
+ end
268
+
269
+ it 'should handle a unicode spellout following addition' do
270
+ #012 012345678
271
+ sa = TextAlignment::GLCSAlignment.new("-β-", "-***beta-", @dictionary)
272
+ expect(sa.position_map_begin).to eq({0=>0, 1=>4, 2=>8, 3=>9})
273
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>8, 3=>9})
274
+ end
275
+
276
+ it 'should handle a unicode retoration following addition' do
277
+ #012345 012345
278
+ sa = TextAlignment::GLCSAlignment.new("-beta-", "-***β-", @dictionary)
279
+ expect(sa.position_map_begin).to eq({0=>0, 1=>4, 2=>nil, 3=>nil, 4=>nil, 5=>5, 6=>6})
280
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>5, 6=>6})
281
+ end
282
+
283
+ it 'should handle a unicode spellout following deletion' do
284
+ #012345 012345
285
+ sa = TextAlignment::GLCSAlignment.new("-***β-", "-beta-", @dictionary)
286
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>1, 3=>1, 4=>1, 5=>5, 6=>6})
287
+ end
288
+
289
+ it 'should handle a unicode retoration following deletion' do
290
+ #012345678 012
291
+ sa = TextAlignment::GLCSAlignment.new("-***beta-", "-β-", @dictionary)
292
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>1, 3=>1, 4=>1, 5=>nil, 6=>nil, 7=>nil, 8=>2, 9=>3})
293
+ end
294
+
295
+ end
296
+
297
+ from_text = "-beta***-"
298
+ to_text = "-##β-"
299
+
300
+ from_text = "TGF-beta-induced"
301
+ to_text = "TGF-β–induced"
302
+ end
@@ -0,0 +1,98 @@
1
+ require 'spec_helper'
2
+
3
+ describe TextAlignment::LCSAlignment do
4
+ context 'for exception handling' do
5
+ it 'should raise error for passing of nil strings' do
6
+ expect {TextAlignment::LCSAlignment.new('abc', nil)}.to raise_error
7
+ expect {TextAlignment::LCSAlignment.new(nil, 'abc')}.to raise_error
8
+ expect {TextAlignment::LCSAlignment.new(nil, nil)}.to raise_error
9
+ end
10
+ end
11
+
12
+ context 'in the middle of a string' do
13
+ it 'should detect a deletion' do
14
+ #0123456 0123
15
+ sa = TextAlignment::LCSAlignment.new('abxyzcd', 'abcd')
16
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>2, 4=>2, 5=>2, 6=>3, 7=>4})
17
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>2, 4=>2, 5=>2, 6=>3, 7=>4})
18
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c'], ['d', 'd']])
19
+ expect(sa.mapped_elements).to eq([])
20
+ end
21
+
22
+ it 'should detect an addition' do
23
+ #0123 0123456
24
+ sa = TextAlignment::LCSAlignment.new('abcd', 'abxyzcd')
25
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>6, 4=>7})
26
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>6, 4=>7})
27
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c'], ['d', 'd']])
28
+ expect(sa.mapped_elements).to eq([])
29
+ end
30
+
31
+ it 'should detect a variation' do
32
+ #0123456 012345
33
+ sa = TextAlignment::LCSAlignment.new('abijkcd', 'abxycd')
34
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>nil, 4=>nil, 5=>4, 6=>5, 7=>6})
35
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>nil, 4=>nil, 5=>4, 6=>5, 7=>6})
36
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c'], ['d', 'd']])
37
+ expect(sa.mapped_elements).to eq([['ijk', 'xy']])
38
+ end
39
+ end
40
+
41
+ context 'in the beginning of a string' do
42
+ it 'should detect a deletion' do
43
+ #012345 012
44
+ sa = TextAlignment::LCSAlignment.new('xyzabc', 'abc')
45
+ expect(sa.position_map_begin).to eq({0=>0, 1=>0, 2=>0, 3=>0, 4=>1, 5=>2, 6=>3})
46
+ expect(sa.position_map_end).to eq({0=>0, 1=>0, 2=>0, 3=>0, 4=>1, 5=>2, 6=>3})
47
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
48
+ expect(sa.mapped_elements).to eq([])
49
+ end
50
+
51
+ it 'should detect an addition' do
52
+ #012 012345
53
+ sa = TextAlignment::LCSAlignment.new('abc', 'xyzabc')
54
+ expect(sa.position_map_begin).to eq({0=>3, 1=>4, 2=>5, 3=>6})
55
+ expect(sa.position_map_end).to eq({0=>3, 1=>4, 2=>5, 3=>6})
56
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
57
+ expect(sa.mapped_elements).to eq([])
58
+ end
59
+
60
+ it 'should detect a variation' do
61
+ #012345 01234
62
+ sa = TextAlignment::LCSAlignment.new('ijkabc', 'xyabc')
63
+ expect(sa.position_map_begin).to eq({0=>0, 1=>nil, 2=>nil, 3=>2, 4=>3, 5=>4, 6=>5})
64
+ expect(sa.position_map_end).to eq({0=>0, 1=>nil, 2=>nil, 3=>2, 4=>3, 5=>4, 6=>5})
65
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
66
+ expect(sa.mapped_elements).to eq([['ijk', 'xy']])
67
+ end
68
+ end
69
+
70
+ context 'in the end of a string' do
71
+ it 'should detect a deletion' do
72
+ #012345 012
73
+ sa = TextAlignment::LCSAlignment.new('abcxyz', 'abc')
74
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>3, 4=>3, 5=>3, 6=>3})
75
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>3, 4=>3, 5=>3, 6=>3})
76
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
77
+ expect(sa.mapped_elements).to eq([])
78
+ end
79
+
80
+ it 'should detect an addition' do
81
+ #012 012345
82
+ sa = TextAlignment::LCSAlignment.new('abc', 'abcxyz')
83
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>6})
84
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>3})
85
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
86
+ expect(sa.mapped_elements).to eq([])
87
+ end
88
+
89
+ it 'should detect a variation' do
90
+ #012345 01234
91
+ sa = TextAlignment::LCSAlignment.new('abcijk', 'abcxy')
92
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>3, 4=>nil, 5=>nil, 6=>5})
93
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>3, 4=>nil, 5=>nil, 6=>5})
94
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
95
+ expect(sa.mapped_elements).to eq([['ijk', 'xy']])
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,322 @@
1
+ require 'spec_helper'
2
+
3
+ describe TextAlignment::LCSAlignment do
4
+ context 'for exception handling' do
5
+ it 'should raise error for passing of nil strings' do
6
+ expect {TextAlignment::LCSAlignment.new('abc', nil)}.to raise_error
7
+ expect {TextAlignment::LCSAlignment.new(nil, 'abc')}.to raise_error
8
+ expect {TextAlignment::LCSAlignment.new(nil, nil)}.to raise_error
9
+ end
10
+ end
11
+
12
+ context 'in the middle of a string' do
13
+ it 'should detect a deletion' do
14
+ #0123456 0123
15
+ sa = TextAlignment::LCSAlignment.new('abxyzcd', 'abcd')
16
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>2, 4=>2, 5=>2, 6=>3, 7=>4})
17
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>2, 4=>2, 5=>2, 6=>3, 7=>4})
18
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c'], ['d', 'd']])
19
+ expect(sa.mapped_elements).to eq([])
20
+ end
21
+
22
+ it 'should detect an addition' do
23
+ #0123 0123456
24
+ sa = TextAlignment::LCSAlignment.new('abcd', 'abxyzcd')
25
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>6, 4=>7})
26
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>6, 4=>7})
27
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c'], ['d', 'd']])
28
+ expect(sa.mapped_elements).to eq([])
29
+ end
30
+
31
+ it 'should detect a variation' do
32
+ #0123456 012345
33
+ sa = TextAlignment::LCSAlignment.new('abijkcd', 'abxycd')
34
+ expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>nil, 4=>nil, 5=>4, 6=>5, 7=>6})
35
+ expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>nil, 4=>nil, 5=>4, 6=>5, 7=>6})
36
+ expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c'], ['d', 'd']])
37
+ expect(sa.mapped_elements).to eq([['ijk', 'xy']])
38
+ end
39
+ end
40
+
41
+ # context 'in the beginning of a string' do
42
+ # it 'should detect a deletion' do
43
+ # #012345 012
44
+ # sa = TextAlignment::LCSAlignment.new('xyzabc', 'abc')
45
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>0, 2=>0, 3=>0, 4=>1, 5=>2, 6=>3})
46
+ # expect(sa.position_map_end).to eq({0=>0, 1=>0, 2=>0, 3=>0, 4=>1, 5=>2, 6=>3})
47
+ # expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
48
+ # expect(sa.mapped_elements).to eq([])
49
+ # expect(sa.front_overflow).to eq 3
50
+ # expect(sa.rear_overflow).to eq 0
51
+ # end
52
+
53
+ # it 'should detect an addition' do
54
+ # #012 012345
55
+ # sa = TextAlignment::LCSAlignment.new('abc', 'xyzabc')
56
+ # expect(sa.position_map_begin).to eq({0=>3, 1=>4, 2=>5, 3=>6})
57
+ # expect(sa.position_map_end).to eq({0=>3, 1=>4, 2=>5, 3=>6})
58
+ # expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
59
+ # expect(sa.mapped_elements).to eq([])
60
+ # expect(sa.front_overflow).to eq -3
61
+ # expect(sa.rear_overflow).to eq 0
62
+ # end
63
+
64
+ # it 'should detect a variation' do
65
+ # #012345 01234
66
+ # sa = TextAlignment::LCSAlignment.new('ijkabc', 'xyabc')
67
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>nil, 2=>nil, 3=>2, 4=>3, 5=>4, 6=>5})
68
+ # expect(sa.position_map_end).to eq({0=>0, 1=>nil, 2=>nil, 3=>2, 4=>3, 5=>4, 6=>5})
69
+ # expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
70
+ # expect(sa.mapped_elements).to eq([['ijk', 'xy']])
71
+ # expect(sa.front_overflow).to eq 1
72
+ # expect(sa.rear_overflow).to eq 0
73
+ # end
74
+ # end
75
+
76
+ # context 'in the end of a string' do
77
+ # it 'should detect a deletion' do
78
+ # #012345 012
79
+ # sa = TextAlignment::LCSAlignment.new('abcxyz', 'abc')
80
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>3, 4=>3, 5=>3, 6=>3})
81
+ # expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>3, 4=>3, 5=>3, 6=>3})
82
+ # expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
83
+ # expect(sa.mapped_elements).to eq([])
84
+ # expect(sa.front_overflow).to eq 0
85
+ # expect(sa.rear_overflow).to eq 3
86
+ # end
87
+
88
+ # it 'should detect an addition' do
89
+ # #012 012345
90
+ # sa = TextAlignment::LCSAlignment.new('abc', 'abcxyz')
91
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>3})
92
+ # expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>3})
93
+ # expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
94
+ # expect(sa.mapped_elements).to eq([])
95
+ # expect(sa.front_overflow).to eq 0
96
+ # expect(sa.rear_overflow).to eq -3
97
+ # end
98
+
99
+ # it 'should detect a variation' do
100
+ # #012345 01234
101
+ # sa = TextAlignment::LCSAlignment.new('abcijk', 'abcxy')
102
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>2, 3=>3, 4=>nil, 5=>nil, 6=>5})
103
+ # expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>2, 3=>3, 4=>nil, 5=>nil, 6=>5})
104
+ # expect(sa.common_elements).to eq([['a', 'a'], ['b', 'b'], ['c', 'c']])
105
+ # expect(sa.mapped_elements).to eq([['ijk', 'xy']])
106
+ # expect(sa.front_overflow).to eq 0
107
+ # expect(sa.rear_overflow).to eq 1
108
+ # end
109
+ # end
110
+
111
+ # context ', with a dictionary with the first entry, ' do
112
+ # before(:all) do
113
+ # @dictionary = [["β", "beta"]]
114
+ # end
115
+ # it 'should handle consecutive unicode spellouts in the middle of a string' do
116
+ # #0123 01234567890
117
+ # sa = TextAlignment::LCSAlignment.new('-βκ-', '-betakappa-', @dictionary)
118
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>10, 4=>11})
119
+ # expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>5, 3=>10, 4=>11})
120
+ # expect(sa.common_elements).to eq([['-', '-'], ['β', 'beta'], ['-', '-']])
121
+ # expect(sa.mapped_elements).to eq([['κ', 'kappa']])
122
+ # expect(sa.front_overflow).to eq 0
123
+ # expect(sa.rear_overflow).to eq 0
124
+ # end
125
+
126
+ # it 'should handle consecutive unicode spellouts in the end of a string' do
127
+ # #012 0123456789
128
+ # sa = TextAlignment::LCSAlignment.new('-βκ', '-betakappa', @dictionary)
129
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>10})
130
+ # expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>5, 3=>10})
131
+ # expect(sa.common_elements).to eq([['-', '-'], ['β', 'beta']])
132
+ # expect(sa.mapped_elements).to eq([['κ', 'kappa']])
133
+ # expect(sa.front_overflow).to eq 0
134
+ # expect(sa.rear_overflow).to eq -4
135
+ # end
136
+
137
+ # it 'should handle consecutive unicode spellouts in the beginning of a string' do
138
+ # #012 0123456789
139
+ # sa = TextAlignment::LCSAlignment.new('βκ-', 'betakappa-', @dictionary)
140
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>4, 2=>9, 3=>10})
141
+ # expect(sa.position_map_end).to eq({0=>0, 1=>4, 2=>9, 3=>10})
142
+ # expect(sa.common_elements).to eq([['β', 'beta'], ['-', '-']])
143
+ # expect(sa.mapped_elements).to eq([['κ', 'kappa']])
144
+ # expect(sa.front_overflow).to eq 0
145
+ # expect(sa.rear_overflow).to eq 0
146
+ # end
147
+
148
+ # it 'should handle consecutive unicode restorations in the middle of a string' do
149
+ # #01234567890 0123
150
+ # sa = TextAlignment::LCSAlignment.new('-betakappa-', '-βκ-', @dictionary)
151
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3, 11=>4})
152
+ # expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3, 11=>4})
153
+ # expect(sa.common_elements).to eq([['-', '-'], ['beta', 'β'], ['-', '-']])
154
+ # expect(sa.mapped_elements).to eq([['kappa', 'κ']])
155
+ # end
156
+
157
+ # it 'should handle consecutive unicode restorations in the beginning of a string' do
158
+ # #0123456789 012
159
+ # sa = TextAlignment::LCSAlignment.new('betakappa-', 'βκ-', @dictionary)
160
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>nil, 2=>nil, 3=>nil, 4=>1, 5=>nil, 6=>nil, 7=>nil, 8=>nil, 9=>2, 10=>3})
161
+ # expect(sa.position_map_end).to eq({0=>0, 1=>nil, 2=>nil, 3=>nil, 4=>1, 5=>nil, 6=>nil, 7=>nil, 8=>nil, 9=>2, 10=>3})
162
+ # expect(sa.common_elements).to eq([['beta', 'β'], ['-', '-']])
163
+ # expect(sa.mapped_elements).to eq([['kappa', 'κ']])
164
+ # end
165
+
166
+ # it 'should handle consecutive unicode restorations in the end of a string' do
167
+ # #0123456789 012
168
+ # sa = TextAlignment::LCSAlignment.new('-betakappa', '-βκ', @dictionary)
169
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3})
170
+ # expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3})
171
+ # expect(sa.common_elements).to eq([['-', '-'], ['beta', 'β']])
172
+ # expect(sa.mapped_elements).to eq([['kappa', 'κ']])
173
+ # end
174
+ # end
175
+
176
+ # context ', with a dictionary with the second entry, ' do
177
+ # before(:all) do
178
+ # @dictionary = [["κ", "kappa"]]
179
+ # end
180
+ # it 'should handle consecutive unicode spellouts in the middle of a string' do
181
+ # #0123 01234567890
182
+ # sa = TextAlignment::LCSAlignment.new('-βκ-', '-betakappa-', @dictionary)
183
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>10, 4=>11})
184
+ # end
185
+
186
+ # it 'should handle consecutive unicode spellouts in the end of a string' do
187
+ # #012 0123456789
188
+ # sa = TextAlignment::LCSAlignment.new('-βκ', '-betakappa', @dictionary)
189
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>10})
190
+ # end
191
+
192
+ # it 'should handle consecutive unicode spellouts in the beginning of a string' do
193
+ # #012 0123456789
194
+ # sa = TextAlignment::LCSAlignment.new('βκ-', 'betakappa-', @dictionary)
195
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>4, 2=>9, 3=>10})
196
+ # end
197
+
198
+ # it 'should handle consecutive unicode restorations in the middle of a string' do
199
+ # #01234567890 0123
200
+ # sa = TextAlignment::LCSAlignment.new('-betakappa-', '-βκ-', @dictionary)
201
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3, 11=>4})
202
+ # end
203
+
204
+ # it 'should handle consecutive unicode restorations in the beginning of a string' do
205
+ # #0123456789 012
206
+ # sa = TextAlignment::LCSAlignment.new('betakappa-', 'βκ-', @dictionary)
207
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>nil, 2=>nil, 3=>nil, 4=>1, 5=>nil, 6=>nil, 7=>nil, 8=>nil, 9=>2, 10=>3})
208
+ # end
209
+
210
+ # it 'should handle consecutive unicode restorations in the end of a string' do
211
+ # #0123456789 012
212
+ # sa = TextAlignment::LCSAlignment.new('-betakappa', '-βκ', @dictionary)
213
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3})
214
+ # end
215
+ # end
216
+
217
+ # context ', with a dictionary with both entries, ' do
218
+ # before(:all) do
219
+ # @dictionary = [["β", "beta"], ["κ", "kappa"]]
220
+ # end
221
+ # it 'should handle consecutive unicode spellouts in the middle of a string' do
222
+ # #0123 01234567890
223
+ # sa = TextAlignment::LCSAlignment.new('-βκ-', '-betakappa-', @dictionary)
224
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>10, 4=>11})
225
+ # end
226
+
227
+ # it 'should handle consecutive unicode spellouts in the end of a string' do
228
+ # #012 0123456789
229
+ # sa = TextAlignment::LCSAlignment.new('-βκ', '-betakappa', @dictionary)
230
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>10})
231
+ # end
232
+
233
+ # it 'should handle consecutive unicode spellouts in the beginning of a string' do
234
+ # #012 0123456789
235
+ # sa = TextAlignment::LCSAlignment.new('βκ-', 'betakappa-', @dictionary)
236
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>4, 2=>9, 3=>10})
237
+ # end
238
+
239
+ # it 'should handle consecutive unicode restorations in the middle of a string' do
240
+ # #01234567890 0123
241
+ # sa = TextAlignment::LCSAlignment.new('-betakappa-', '-βκ-', @dictionary)
242
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3, 11=>4})
243
+ # end
244
+
245
+ # it 'should handle consecutive unicode restorations in the beginning of a string' do
246
+ # #0123456789 012
247
+ # sa = TextAlignment::LCSAlignment.new('betakappa-', 'βκ-', @dictionary)
248
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>nil, 2=>nil, 3=>nil, 4=>1, 5=>nil, 6=>nil, 7=>nil, 8=>nil, 9=>2, 10=>3})
249
+ # end
250
+
251
+ # it 'should handle consecutive unicode restorations in the end of a string' do
252
+ # #0123456789 012
253
+ # sa = TextAlignment::LCSAlignment.new('-betakappa', '-βκ', @dictionary)
254
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>nil, 7=>nil, 8=>nil, 9=>nil, 10=>3})
255
+ # end
256
+ # end
257
+
258
+ # context ', with a dictionary, ' do
259
+ # before(:all) do
260
+ # @dictionary = [["β", "beta"], ["κ", "kappa"]]
261
+ # end
262
+
263
+ # it 'should handle a unicode spellout followed by addition' do
264
+ # #012 012345678
265
+ # sa = TextAlignment::LCSAlignment.new("-β-", "-beta***-", @dictionary)
266
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>8, 3=>9})
267
+ # expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>5, 3=>9})
268
+ # end
269
+
270
+ # it 'should handle a unicode retoration followed by addition' do
271
+ # #012345 012345
272
+ # sa = TextAlignment::LCSAlignment.new("-beta-", "-β***-", @dictionary)
273
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>5, 6=>6})
274
+ # expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>6})
275
+ # end
276
+
277
+ # it 'should handle a unicode spellout followed by deletion' do
278
+ # #012345 012345
279
+ # sa = TextAlignment::LCSAlignment.new("-β***-", "-beta-", @dictionary)
280
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>5, 3=>5, 4=>5, 5=>5, 6=>6})
281
+ # end
282
+
283
+ # it 'should handle a unicode retoration followed by deletion' do
284
+ # #012345678 0123
285
+ # sa = TextAlignment::LCSAlignment.new("-beta***-", "-β-", @dictionary)
286
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>2, 6=>2, 7=>2, 8=>2, 9=>3})
287
+ # end
288
+
289
+ # it 'should handle a unicode spellout following addition' do
290
+ # #012 012345678
291
+ # sa = TextAlignment::LCSAlignment.new("-β-", "-***beta-", @dictionary)
292
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>4, 2=>8, 3=>9})
293
+ # expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>8, 3=>9})
294
+ # end
295
+
296
+ # it 'should handle a unicode retoration following addition' do
297
+ # #012345 012345
298
+ # sa = TextAlignment::LCSAlignment.new("-beta-", "-***β-", @dictionary)
299
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>4, 2=>nil, 3=>nil, 4=>nil, 5=>5, 6=>6})
300
+ # expect(sa.position_map_end).to eq({0=>0, 1=>1, 2=>nil, 3=>nil, 4=>nil, 5=>5, 6=>6})
301
+ # end
302
+
303
+ # it 'should handle a unicode spellout following deletion' do
304
+ # #012345 012345
305
+ # sa = TextAlignment::LCSAlignment.new("-***β-", "-beta-", @dictionary)
306
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>1, 3=>1, 4=>1, 5=>5, 6=>6})
307
+ # end
308
+
309
+ # it 'should handle a unicode retoration following deletion' do
310
+ # #012345678 012
311
+ # sa = TextAlignment::LCSAlignment.new("-***beta-", "-β-", @dictionary)
312
+ # expect(sa.position_map_begin).to eq({0=>0, 1=>1, 2=>1, 3=>1, 4=>1, 5=>nil, 6=>nil, 7=>nil, 8=>2, 9=>3})
313
+ # end
314
+
315
+ # end
316
+
317
+ # from_text = "-beta***-"
318
+ # to_text = "-##β-"
319
+
320
+ # from_text = "TGF-beta-induced"
321
+ # to_text = "TGF-β–induced"
322
+ end