stamina 0.4.0 → 0.5.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.
Files changed (116) hide show
  1. data/CHANGELOG.md +22 -5
  2. data/LICENCE.md +2 -2
  3. data/bin/stamina +1 -7
  4. data/lib/stamina.rb +10 -19
  5. metadata +54 -333
  6. data/.gemtest +0 -0
  7. data/Gemfile +0 -2
  8. data/Gemfile.lock +0 -37
  9. data/Manifest.txt +0 -16
  10. data/README.md +0 -78
  11. data/Rakefile +0 -23
  12. data/example/adl/automaton.adl +0 -49
  13. data/example/adl/sample.adl +0 -53
  14. data/example/basic/characteristic_sample.adl +0 -32
  15. data/example/basic/target.adl +0 -9
  16. data/example/competition/31_test.adl +0 -1500
  17. data/example/competition/31_training.adl +0 -1759
  18. data/lib/stamina/abbadingo.rb +0 -2
  19. data/lib/stamina/abbadingo/random_dfa.rb +0 -48
  20. data/lib/stamina/abbadingo/random_sample.rb +0 -146
  21. data/lib/stamina/adl.rb +0 -298
  22. data/lib/stamina/automaton.rb +0 -1263
  23. data/lib/stamina/automaton/complete.rb +0 -36
  24. data/lib/stamina/automaton/equivalence.rb +0 -55
  25. data/lib/stamina/automaton/metrics.rb +0 -78
  26. data/lib/stamina/automaton/minimize.rb +0 -25
  27. data/lib/stamina/automaton/minimize/hopcroft.rb +0 -116
  28. data/lib/stamina/automaton/minimize/pitchies.rb +0 -64
  29. data/lib/stamina/automaton/strip.rb +0 -16
  30. data/lib/stamina/automaton/walking.rb +0 -363
  31. data/lib/stamina/classifier.rb +0 -52
  32. data/lib/stamina/command.rb +0 -45
  33. data/lib/stamina/command/abbadingo_dfa.rb +0 -81
  34. data/lib/stamina/command/abbadingo_samples.rb +0 -40
  35. data/lib/stamina/command/adl2dot.rb +0 -71
  36. data/lib/stamina/command/classify.rb +0 -48
  37. data/lib/stamina/command/help.rb +0 -27
  38. data/lib/stamina/command/infer.rb +0 -141
  39. data/lib/stamina/command/metrics.rb +0 -51
  40. data/lib/stamina/command/robustness.rb +0 -22
  41. data/lib/stamina/command/score.rb +0 -35
  42. data/lib/stamina/errors.rb +0 -23
  43. data/lib/stamina/ext/math.rb +0 -20
  44. data/lib/stamina/induction/blue_fringe.rb +0 -265
  45. data/lib/stamina/induction/commons.rb +0 -156
  46. data/lib/stamina/induction/rpni.rb +0 -186
  47. data/lib/stamina/induction/union_find.rb +0 -377
  48. data/lib/stamina/input_string.rb +0 -123
  49. data/lib/stamina/loader.rb +0 -1
  50. data/lib/stamina/markable.rb +0 -42
  51. data/lib/stamina/sample.rb +0 -267
  52. data/lib/stamina/scoring.rb +0 -213
  53. data/lib/stamina/utils.rb +0 -1
  54. data/lib/stamina/utils/decorate.rb +0 -81
  55. data/lib/stamina/version.rb +0 -14
  56. data/stamina.gemspec +0 -191
  57. data/stamina.noespec +0 -32
  58. data/tasks/debug_mail.rake +0 -78
  59. data/tasks/debug_mail.txt +0 -13
  60. data/tasks/gem.rake +0 -68
  61. data/tasks/spec_test.rake +0 -79
  62. data/tasks/unit_test.rake +0 -77
  63. data/tasks/yard.rake +0 -51
  64. data/test/stamina/abbadingo/random_dfa_test.rb +0 -16
  65. data/test/stamina/abbadingo/random_sample_test.rb +0 -78
  66. data/test/stamina/adl_test.rb +0 -516
  67. data/test/stamina/automaton/classifier_test.rb +0 -259
  68. data/test/stamina/automaton/complete_test.rb +0 -58
  69. data/test/stamina/automaton/equivalence_test.rb +0 -120
  70. data/test/stamina/automaton/metrics_test.rb +0 -36
  71. data/test/stamina/automaton/minimize/hopcroft_test.rb +0 -15
  72. data/test/stamina/automaton/minimize/minimize_test.rb +0 -55
  73. data/test/stamina/automaton/minimize/pitchies_test.rb +0 -15
  74. data/test/stamina/automaton/minimize/rice_edu_10.adl +0 -16
  75. data/test/stamina/automaton/minimize/rice_edu_10.min.adl +0 -13
  76. data/test/stamina/automaton/minimize/rice_edu_13.adl +0 -13
  77. data/test/stamina/automaton/minimize/rice_edu_13.min.adl +0 -7
  78. data/test/stamina/automaton/minimize/should_strip_1.adl +0 -8
  79. data/test/stamina/automaton/minimize/should_strip_1.min.adl +0 -6
  80. data/test/stamina/automaton/minimize/unknown_1.adl +0 -16
  81. data/test/stamina/automaton/minimize/unknown_1.min.adl +0 -12
  82. data/test/stamina/automaton/strip_test.rb +0 -36
  83. data/test/stamina/automaton/to_dot_test.rb +0 -64
  84. data/test/stamina/automaton/walking/dfa_delta_test.rb +0 -39
  85. data/test/stamina/automaton/walking_test.rb +0 -206
  86. data/test/stamina/automaton_additional_test.rb +0 -190
  87. data/test/stamina/automaton_test.rb +0 -1104
  88. data/test/stamina/exit.rb +0 -3
  89. data/test/stamina/induction/blue_fringe_test.rb +0 -83
  90. data/test/stamina/induction/induction_test.rb +0 -70
  91. data/test/stamina/induction/redblue_mergesamestatebug_expected.adl +0 -19
  92. data/test/stamina/induction/redblue_mergesamestatebug_pta.dot +0 -64
  93. data/test/stamina/induction/redblue_mergesamestatebug_sample.adl +0 -9
  94. data/test/stamina/induction/redblue_universal_expected.adl +0 -4
  95. data/test/stamina/induction/redblue_universal_sample.adl +0 -5
  96. data/test/stamina/induction/rpni_inria_expected.adl +0 -7
  97. data/test/stamina/induction/rpni_inria_sample.adl +0 -9
  98. data/test/stamina/induction/rpni_test.rb +0 -129
  99. data/test/stamina/induction/rpni_test_pta.dot +0 -22
  100. data/test/stamina/induction/rpni_universal_expected.adl +0 -4
  101. data/test/stamina/induction/rpni_universal_sample.adl +0 -4
  102. data/test/stamina/induction/union_find_test.rb +0 -124
  103. data/test/stamina/input_string_test.rb +0 -323
  104. data/test/stamina/markable_test.rb +0 -70
  105. data/test/stamina/randdfa.adl +0 -66
  106. data/test/stamina/sample.adl +0 -4
  107. data/test/stamina/sample_classify_test.rb +0 -149
  108. data/test/stamina/sample_test.rb +0 -290
  109. data/test/stamina/scoring_test.rb +0 -63
  110. data/test/stamina/small_dfa.dot +0 -16
  111. data/test/stamina/small_dfa.gif +0 -0
  112. data/test/stamina/small_nfa.dot +0 -18
  113. data/test/stamina/small_nfa.gif +0 -0
  114. data/test/stamina/stamina_test.rb +0 -80
  115. data/test/stamina/utils/decorate_test.rb +0 -65
  116. data/test/test_all.rb +0 -7
@@ -1,70 +0,0 @@
1
- require 'test/unit'
2
- require 'stamina/markable'
3
- module Stamina
4
- # Tests Loaded class
5
- class MarkableTest < Test::Unit::TestCase
6
-
7
- class MyMarkableObject
8
- include Markable
9
- def initialize
10
- @data = {}
11
- end
12
- end
13
-
14
- class MarkableObjectWithStateChanges < MyMarkableObject
15
- def initialize
16
- super
17
- @changes = []
18
- end
19
-
20
- def state_changed(what, description)
21
- @changes << what << description
22
- end
23
-
24
- def changes
25
- @changes
26
- end
27
- end
28
-
29
- # Tests the effect of setting a value
30
- def test_value_assignments
31
- @loaded = MyMarkableObject.new
32
-
33
- assert_nil(@loaded[:myownkey])
34
- assert_nil(@loaded["rr"])
35
-
36
- @loaded[:myownkey] = "myownkey"
37
- @loaded[12] = :twelve
38
- assert_equal("myownkey", @loaded[:myownkey])
39
- assert_equal(:twelve, @loaded[12])
40
- assert_nil(@loaded["rr"])
41
-
42
- @loaded[:myownkey] = 36
43
- assert_equal(36, @loaded[:myownkey])
44
- assert_equal(:twelve, @loaded[12])
45
- assert_nil(@loaded["rr"])
46
- end
47
-
48
- # Tests the effect of setting a value
49
- def test_value_assignments_statechange
50
- @loaded = MarkableObjectWithStateChanges.new
51
-
52
- assert_nil(@loaded[:myownkey])
53
- assert_nil(@loaded["rr"])
54
- assert_equal([],@loaded.changes)
55
-
56
- @loaded[:myownkey] = "myownkey"
57
- @loaded[12] = :twelve
58
- assert_equal("myownkey", @loaded[:myownkey])
59
- assert_equal(:twelve, @loaded[12])
60
- assert_equal([:loaded_pair,[:myownkey,nil,"myownkey"],:loaded_pair,[12,nil,:twelve]],@loaded.changes)
61
- assert_nil(@loaded["rr"])
62
-
63
- @loaded[:myownkey] = 36
64
- assert_equal(36, @loaded[:myownkey])
65
- assert_equal(:twelve, @loaded[12])
66
- assert_nil(@loaded["rr"])
67
- assert_equal([:loaded_pair,[:myownkey,nil,"myownkey"],:loaded_pair,[12,nil,:twelve],:loaded_pair,[:myownkey,"myownkey",36]],@loaded.changes)
68
- end
69
- end
70
- end
@@ -1,66 +0,0 @@
1
- 26 39
2
- 0 false false
3
- 1 false true
4
- 2 false true
5
- 3 false true
6
- 4 false false
7
- 5 false true
8
- 6 true false
9
- 7 false false
10
- 8 false true
11
- 9 false true
12
- 10 false false
13
- 11 false false
14
- 12 false false
15
- 13 false true
16
- 14 false true
17
- 15 false false
18
- 16 false false
19
- 17 false false
20
- 18 false true
21
- 19 false true
22
- 20 false false
23
- 21 false true
24
- 22 false true
25
- 23 false false
26
- 24 false true
27
- 25 false true
28
- 0 1 1
29
- 0 2 0
30
- 3 4 1
31
- 3 5 0
32
- 6 7 0
33
- 6 8 1
34
- 2 9 1
35
- 2 10 0
36
- 11 12 1
37
- 11 13 0
38
- 12 4 0
39
- 12 12 1
40
- 14 15 1
41
- 14 16 0
42
- 17 0 0
43
- 18 19 0
44
- 18 0 1
45
- 20 1 1
46
- 20 18 0
47
- 21 18 0
48
- 15 21 0
49
- 15 22 1
50
- 9 5 0
51
- 22 17 1
52
- 8 1 1
53
- 8 20 0
54
- 13 23 0
55
- 13 5 1
56
- 4 19 1
57
- 24 11 0
58
- 23 24 0
59
- 23 3 1
60
- 10 25 1
61
- 10 24 0
62
- 19 14 1
63
- 25 7 1
64
- 7 1 1
65
- 7 24 0
66
- 1 10 0
@@ -1,4 +0,0 @@
1
- -
2
- + a
3
- - a b
4
- + a b a
@@ -1,149 +0,0 @@
1
- require 'test/unit'
2
- require 'stamina/adl'
3
- require 'stamina/stamina_test'
4
- module Stamina
5
- class Sample
6
- # Tests Classify module, as installed on Sample and InputString classes.
7
- class ClassifyTest < StaminaTest
8
-
9
- # Tests Classify#correctly_classified_by? is correct on valid sample against
10
- # small_dfa example
11
- def test_valid_sample_correctly_classified_by_small_dfa
12
- assert_equal(true, Sample.new.correctly_classified_by?(@small_dfa))
13
- sample = ADL::parse_sample <<-SAMPLE
14
- -
15
- + b
16
- + b c
17
- - b c a
18
- - b c a c
19
- - b c a c a
20
- - b c a a
21
- + b c a b
22
- + b c a b c a c b
23
- - z
24
- - b z
25
- SAMPLE
26
- assert_equal(true, sample.correctly_classified_by?(@small_dfa))
27
- end
28
-
29
- # Tests Classify#correctly_classified_by? is correct on invalid sample against
30
- # small_dfa example
31
- def test_invalid_sample_correctly_classified_by_small_dfa
32
- sample = ADL::parse_sample <<-SAMPLE
33
- -
34
- + b
35
- + b c
36
- - b c a
37
- # this one is reversed
38
- + b c a c
39
- - b c a c a
40
- - b c a a
41
- + b c a b
42
- + b c a b c a c b
43
- - z
44
- - b z
45
- SAMPLE
46
- assert_equal(false, sample.correctly_classified_by?(@small_dfa))
47
-
48
- sample = ADL::parse_sample <<-SAMPLE
49
- -
50
- + b
51
- + b c
52
- - b c a
53
- - b c a c
54
- - b c a c a
55
- - b c a a
56
- + b c a b
57
- + b c a b c a c b
58
- # this one is changed
59
- + z
60
- - b z
61
- SAMPLE
62
- assert_equal(false, sample.correctly_classified_by?(@small_dfa))
63
-
64
- sample = ADL::parse_sample <<-SAMPLE
65
- -
66
- + b
67
- + b c
68
- - b c a
69
- - b c a c
70
- - b c a c a
71
- - b c a a
72
- + b c a b
73
- # this one is changed
74
- - b c a b c a c b
75
- - z
76
- - b z
77
- SAMPLE
78
- assert_equal(false, sample.correctly_classified_by?(@small_dfa))
79
- end
80
-
81
- # Tests Classify#correctly_classified_by? is correct on valid sample against
82
- # small_nfa example
83
- def test_valid_sample_correctly_classified_by_small_nfa
84
- assert_equal(true, Sample.new.correctly_classified_by?(@small_nfa))
85
- sample = ADL::parse_sample <<-SAMPLE
86
- +
87
- + a
88
- - a a
89
- + a a b
90
- + a b
91
- + a b c a
92
- - a b c
93
- + a b b b b b b
94
- - a z
95
- - z
96
- SAMPLE
97
- assert_equal(true, sample.correctly_classified_by?(@small_nfa))
98
- end
99
-
100
- # Tests Classify#correctly_classified_by? is correct on invalid sample against
101
- # small_nfa example
102
- def test_invalid_sample_correctly_classified_by_small_nfa
103
- sample = ADL::parse_sample <<-SAMPLE
104
- # this one is changed
105
- -
106
- + a
107
- - a a
108
- + a a b
109
- + a b
110
- + a b c a
111
- - a b c
112
- + a b b b b b b
113
- - a z
114
- - z
115
- SAMPLE
116
- assert_equal(false, sample.correctly_classified_by?(@small_nfa))
117
- sample = ADL::parse_sample <<-SAMPLE
118
- +
119
- + a
120
- - a a
121
- + a a b
122
- # this one is changed
123
- - a b
124
- + a b c a
125
- - a b c
126
- + a b b b b b b
127
- - a z
128
- - z
129
- SAMPLE
130
- assert_equal(false, sample.correctly_classified_by?(@small_nfa))
131
- sample = ADL::parse_sample <<-SAMPLE
132
- +
133
- + a
134
- # this one is changed
135
- + a a
136
- + a a b
137
- + a b
138
- + a b c a
139
- - a b c
140
- + a b b b b b b
141
- - a z
142
- - z
143
- SAMPLE
144
- assert_equal(false, sample.correctly_classified_by?(@small_nfa))
145
- end
146
-
147
- end # class ClassifyTest
148
- end # class Sample
149
- end # module Stamina
@@ -1,290 +0,0 @@
1
- require 'test/unit'
2
- require 'stamina/errors'
3
- require 'stamina/stamina_test'
4
- require 'stamina/sample'
5
- module Stamina
6
- class SampleTest < StaminaTest
7
-
8
- # Converts a String to an InputString
9
- def s(str)
10
- Stamina::ADL::parse_string(str)
11
- end
12
-
13
- # Tests Sample#empty?
14
- def test_empty
15
- assert_equal(true, Sample.new.empty?)
16
- assert_equal(true, Sample[].empty?)
17
- assert_equal(false, Sample['?'].empty?)
18
- assert_equal(false, Sample['-'].empty?)
19
- assert_equal(false, Sample['+'].empty?)
20
- assert_equal(false, Sample['+ a b'].empty?)
21
- assert_equal(false, Sample['+ a b', '- a'].empty?)
22
- assert_equal(false, Sample['- a b'].empty?)
23
- end
24
-
25
- # Tests Sample#size
26
- def test_size_and_counts
27
- s = Sample.new
28
- assert_equal(0, s.size)
29
- assert_equal(0, s.positive_count)
30
- assert_equal(0, s.negative_count)
31
- s << '+ a b'
32
- assert_equal(1, s.size)
33
- assert_equal(1, s.positive_count)
34
- assert_equal(0, s.negative_count)
35
- s << '+ a b'
36
- assert_equal(2, s.size)
37
- assert_equal(2, s.positive_count)
38
- assert_equal(0, s.negative_count)
39
- s << '+ a'
40
- assert_equal(3, s.size)
41
- assert_equal(3, s.positive_count)
42
- assert_equal(0, s.negative_count)
43
- s << '- a b c'
44
- assert_equal(4, s.size)
45
- assert_equal(3, s.positive_count)
46
- assert_equal(1, s.negative_count)
47
- end
48
-
49
- def test_same_string_can_be_added_many_times
50
- s = Sample.new
51
- 10.times {|i| s << "+ a b"}
52
- assert_equal(10, s.size)
53
- assert_equal(10, s.positive_count)
54
- assert_equal(0, s.negative_count)
55
- strings = s.collect{|s| s}
56
- assert_equal 10, strings.size
57
- end
58
-
59
- # Tests Sample#<<
60
- def test_append
61
- s = Sample.new
62
- assert_equal(s,s << '+',"Accepts empty string")
63
- assert_equal(s,s << '+ a b a b a',"Accepts positive string")
64
- assert_equal(s,s << '- a',"Accepts negative string")
65
- assert_equal(s,s << '? a',"Accepts unlabeled string")
66
- end
67
-
68
- # Tests Sample#include? on every kind of arguments it announce
69
- def test_append_accepts_arguments_it_annouce
70
- expected = Sample[
71
- '+ a b a b',
72
- '+ a b',
73
- '-',
74
- '- a',
75
- '+ a b a b a b'
76
- ]
77
- s = Sample.new
78
- s << '+ a b a b'
79
- s << ['+ a b', '-']
80
- s << InputString.new('a', false)
81
- s << Sample['+ a b a b a b', '-']
82
- assert_equal(expected,s)
83
- end
84
-
85
- # Tests that Sample#<< detects inconsistencies
86
- # def test_append_detects_inconsistency
87
- # s = Sample.new
88
- # s << '+ a b'
89
- # s << '+ a b a b'
90
- # assert_raise InconsistencyError do
91
- # s << '- a b a b'
92
- # end
93
- # end
94
-
95
- # Tests that Sample#<< detects inconsistencies
96
- def test_append_detects_real_inconsistencies_only
97
- s = Sample.new
98
- s << '+ a b'
99
- s << '+ a b a b'
100
- assert_nothing_raised do
101
- s << '- b'
102
- s << '- a'
103
- s << '- a b a'
104
- end
105
- end
106
-
107
- # Tests each
108
- def test_each
109
- strings = ['+ a b a b', '+ a b', '+ a b', '- a', '+']
110
- strings = strings.collect{|s| ADL::parse_string(s)}
111
- s = Sample.new << strings
112
- count = 0
113
- s.each do |str|
114
- assert_equal(true, strings.include?(str))
115
- count += 1
116
- end
117
- assert_equal(strings.size, count)
118
- end
119
-
120
- # Tests each_positive
121
- def test_each_positive
122
- sample = Sample[
123
- '+',
124
- '- b',
125
- '+ a b a b',
126
- '- a b a a'
127
- ]
128
- count = 0
129
- sample.each_positive do |str|
130
- assert str.positive?
131
- count += 1
132
- end
133
- assert_equal 2, count
134
- positives = sample.positive_enumerator.collect{|s| s}
135
- assert_equal 2, positives.size
136
- [s('+'), s('+ a b a b')].each do |str|
137
- assert positives.include?(str)
138
- end
139
- end
140
-
141
- # Tests each_negative
142
- def test_each_negative
143
- sample = Sample[
144
- '+',
145
- '- b',
146
- '+ a b a b',
147
- '- a b a a'
148
- ]
149
- count = 0
150
- sample.each_negative do |str|
151
- assert str.negative?
152
- count += 1
153
- end
154
- assert_equal 2, count
155
- negatives = sample.negative_enumerator.collect{|s| s}
156
- assert_equal 2, negatives.size
157
- [s('- b'), s('- a b a a')].each do |str|
158
- assert negatives.include?(str)
159
- end
160
- end
161
-
162
- # Tests Sample#include?
163
- def test_include
164
- strings = ['+ a b a b', '+ a b', '- a', '+']
165
- s = Sample.new << strings
166
- strings.each do |str|
167
- assert_equal(true, s.include?(str))
168
- end
169
- assert_equal(true, s.include?(strings))
170
- assert_equal(true, s.include?(s))
171
- assert_equal(false, s.include?('+ a'))
172
- assert_equal(false, s.include?('-'))
173
- assert_equal(false, s.include?('+ a b a'))
174
- end
175
-
176
- # Tests Sample#include? on every kind of arguments it announce
177
- def test_include_accepts_arguments_it_annouce
178
- s = Sample.new << ['+ a b a b', '+ a b', '- a', '+']
179
- assert_equal true, s.include?('+ a b a b')
180
- assert_equal true, s.include?(InputString.new('a b a b',true))
181
- assert_equal true, s.include?(ADL::parse_string('+ a b a b'))
182
- assert_equal true, s.include?(['+ a b a b', '+ a b'])
183
- assert_equal true, s.include?(s)
184
- end
185
-
186
- # Tests Sample#==
187
- def test_equal
188
- s1 = Sample['+ a b a b', '+', '- a']
189
- s2 = Sample['+ a b a b', '+', '+ a']
190
- assert_equal(true, s1==s1)
191
- assert_equal(true, s2==s2)
192
- assert_equal(false, s1==s2)
193
- assert_equal(false, s1==Sample.new)
194
- assert_equal(false, s2==Sample.new)
195
- end
196
-
197
- # Test the signature
198
- def test_signature
199
- s = Sample.new
200
- assert_equal '', s.signature
201
- s = Sample.new << ['+ a b a b', '+ a b', '- a', '+']
202
- assert_equal '1101', s.signature
203
- s = Sample.new << ['+ a b a b', '+ a b', '- a', '?']
204
- assert_equal '110?', s.signature
205
- s = Stamina::ADL.parse_sample <<-SAMPLE
206
- +
207
- + a b
208
- - a c
209
- ? a d
210
- SAMPLE
211
- assert_equal '110?', s.signature
212
- end
213
-
214
- def test_to_pta_on_empty_sample
215
- empty = Stamina::ADL::parse_automaton <<-EOF
216
- 1 0
217
- 0 true false
218
- EOF
219
- assert_equivalent empty, Sample.new.to_pta
220
- end
221
-
222
- def test_to_pta_on_lambda_accepting_sample
223
- dfa = Stamina::ADL::parse_automaton <<-EOF
224
- 1 0
225
- 0 true true false
226
- EOF
227
- sample = Stamina::ADL::parse_sample <<-EOF
228
- +
229
- EOF
230
- assert_equivalent dfa, sample.to_pta
231
- end
232
-
233
- def test_to_pta_on_lambda_rejecting_sample
234
- dfa = Stamina::ADL::parse_automaton <<-EOF
235
- 1 0
236
- 0 true false true
237
- EOF
238
- sample = Stamina::ADL::parse_sample <<-EOF
239
- -
240
- EOF
241
- assert_equivalent dfa, sample.to_pta
242
- end
243
-
244
- def test_to_pta_respects_natural_ordering
245
- dfa = Stamina::ADL::parse_automaton <<-EOF
246
- 3 2
247
- 0 true false
248
- 1 false true
249
- 2 false true
250
- 0 1 a
251
- 0 2 b
252
- EOF
253
- sample = Stamina::ADL::parse_sample <<-EOF
254
- + a
255
- + b
256
- EOF
257
- pta = sample.to_pta
258
- assert_equivalent dfa, pta
259
- assert_equal pta.ith_state(1), pta.dfa_reached("? a")
260
- assert_equal pta.ith_state(2), pta.dfa_reached("? b")
261
- end
262
-
263
- def test_to_pta_on_realcase_example
264
- dfa = Stamina::ADL::parse_automaton <<-EOF
265
- 5 4
266
- 0 true true
267
- 1 false true
268
- 2 false false true
269
- 3 false false true
270
- 4 false true
271
- 0 1 a
272
- 0 2 b
273
- 1 3 b
274
- 2 4 a
275
- EOF
276
- sample = Stamina::ADL::parse_sample <<-EOF
277
- +
278
- + a
279
- + b a
280
- - a b
281
- - b
282
- EOF
283
- pta = sample.to_pta
284
- assert_equivalent dfa, pta
285
- assert_equal pta.ith_state(3), pta.dfa_reached("? a b")
286
- assert_equal pta.ith_state(4), pta.dfa_reached("? b a")
287
- end
288
-
289
- end # class SampleTest
290
- end # module Stamina