solve 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,302 @@
1
+ require 'spec_helper'
2
+
3
+ describe Solve::Solver do
4
+ let(:graph) { double('graph') }
5
+
6
+ describe "ClassMethods" do
7
+ subject { Solve::Solver }
8
+
9
+ describe "::new" do
10
+ let(:demand_array) { ["nginx", "ntp"] }
11
+
12
+ it "adds a demand for each element in the array" do
13
+ obj = subject.new(graph, demand_array)
14
+
15
+ obj.demands.should have(2).items
16
+ end
17
+
18
+ context "when demand_array is an array of array" do
19
+ let(:demand_array) { [["nginx", "= 1.2.3"], ["ntp", "= 1.0.0"]] }
20
+
21
+ it "creates a new demand with the name and constraint of each element in the array" do
22
+ obj = subject.new(graph, demand_array)
23
+
24
+ obj.demands[0].name.should eql("nginx")
25
+ obj.demands[0].constraint.to_s.should eql("= 1.2.3")
26
+ obj.demands[1].name.should eql("ntp")
27
+ obj.demands[1].constraint.to_s.should eql("= 1.0.0")
28
+ end
29
+ end
30
+
31
+ context "when demand_array is an array of strings" do
32
+ let(:demand_array) { ["nginx", "ntp"] }
33
+
34
+ it "creates a new demand with the name and a default constraint of each element in the array" do
35
+ obj = subject.new(graph, demand_array)
36
+
37
+ obj.demands[0].name.should eql("nginx")
38
+ obj.demands[0].constraint.to_s.should eql(">= 0.0.0")
39
+ obj.demands[1].name.should eql("ntp")
40
+ obj.demands[1].constraint.to_s.should eql(">= 0.0.0")
41
+ end
42
+ end
43
+
44
+ context "when demand_array is a mix between an array of arrays and an array of strings" do
45
+ let(:demand_array) { [["nginx", "= 1.2.3"], "ntp"] }
46
+
47
+ it "creates a new demand with the name and default constraint or constraint of each element in the array" do
48
+ obj = subject.new(graph, demand_array)
49
+
50
+ obj.demands[0].name.should eql("nginx")
51
+ obj.demands[0].constraint.to_s.should eql("= 1.2.3")
52
+ obj.demands[1].name.should eql("ntp")
53
+ obj.demands[1].constraint.to_s.should eql(">= 0.0.0")
54
+ end
55
+ end
56
+ end
57
+
58
+ describe "::demand_key" do
59
+ let(:demand) { Solve::Demand.new(double('solver'), "nginx", "= 1.2.3") }
60
+
61
+ it "returns a symbol containing the name and constraint of the demand" do
62
+ subject.demand_key(demand).should eql(:'nginx-= 1.2.3')
63
+ end
64
+ end
65
+
66
+ describe "::satisfy_all" do
67
+ let(:ver_one) { Solve::Version.new("3.1.1") }
68
+ let(:ver_two) { Solve::Version.new("3.1.2") }
69
+
70
+ let(:constraints) do
71
+ [
72
+ Solve::Constraint.new("> 3.0.0"),
73
+ Solve::Constraint.new("<= 3.1.2")
74
+ ]
75
+ end
76
+
77
+ let(:versions) do
78
+ [
79
+ Solve::Version.new("0.0.1"),
80
+ Solve::Version.new("0.1.0"),
81
+ Solve::Version.new("1.0.0"),
82
+ Solve::Version.new("2.0.0"),
83
+ Solve::Version.new("3.0.0"),
84
+ ver_one,
85
+ ver_two,
86
+ Solve::Version.new("4.1.0")
87
+ ].shuffle
88
+ end
89
+
90
+ it "returns all of the versions which satisfy all of the given constraints" do
91
+ solution = subject.satisfy_all(constraints, versions)
92
+
93
+ solution.should have(2).items
94
+ solution.should include(ver_one)
95
+ solution.should include(ver_two)
96
+ end
97
+
98
+ context "given multiple duplicate versions" do
99
+ let(:versions) do
100
+ [
101
+ ver_one,
102
+ ver_one,
103
+ ver_one
104
+ ]
105
+ end
106
+
107
+ it "does not return duplicate satisfied versions" do
108
+ solution = subject.satisfy_all(constraints, versions)
109
+
110
+ solution.should have(1).item
111
+ end
112
+ end
113
+ end
114
+
115
+ describe "::satisfy_best" do
116
+ let(:versions) do
117
+ [
118
+ Solve::Version.new("0.0.1"),
119
+ Solve::Version.new("0.1.0"),
120
+ Solve::Version.new("1.0.0"),
121
+ Solve::Version.new("2.0.0"),
122
+ Solve::Version.new("3.0.0"),
123
+ Solve::Version.new("3.1.1"),
124
+ Solve::Version.new("3.1.2"),
125
+ Solve::Version.new("4.1.0")
126
+ ].shuffle
127
+ end
128
+
129
+ it "returns the best possible match for the given constraints" do
130
+ subject.satisfy_best([">= 1.0.0", "< 4.1.0"], versions).to_s.should eql("3.1.2")
131
+ end
132
+
133
+ context "given no version matches a constraint" do
134
+ let(:versions) do
135
+ [
136
+ Solve::Version.new("4.1.0")
137
+ ]
138
+ end
139
+
140
+ it "raises a NoSolutionError error" do
141
+ lambda {
142
+ subject.satisfy_best(">= 5.0.0", versions)
143
+ }.should raise_error(Solve::Errors::NoSolutionError)
144
+ end
145
+ end
146
+ end
147
+ end
148
+
149
+ subject { Solve::Solver.new(graph) }
150
+
151
+ describe "#resolve" do
152
+ let(:graph) { Solve::Graph.new }
153
+
154
+ subject { Solve::Solver.new(graph) }
155
+
156
+ before(:each) do
157
+ graph.artifacts("nginx", "1.0.0")
158
+ subject.demands("nginx", "= 1.0.0")
159
+ end
160
+
161
+ it "returns a solution in the form of a Hash" do
162
+ subject.resolve.should be_a(Hash)
163
+ end
164
+ end
165
+
166
+ describe "#demands" do
167
+ context "given a name and constraint argument" do
168
+ let(:name) { "nginx" }
169
+ let(:constraint) { "~> 0.101.5" }
170
+
171
+ context "given the artifact of the given name and constraint does not exist" do
172
+ it "returns a Solve::Demand" do
173
+ subject.demands(name, constraint).should be_a(Solve::Demand)
174
+ end
175
+
176
+ it "the artifact has the given name" do
177
+ subject.demands(name, constraint).name.should eql(name)
178
+ end
179
+
180
+ it "the artifact has the given constraint" do
181
+ subject.demands(name, constraint).constraint.to_s.should eql(constraint)
182
+ end
183
+
184
+ it "adds an artifact to the demands collection" do
185
+ subject.demands(name, constraint)
186
+
187
+ subject.demands.should have(1).item
188
+ end
189
+
190
+ it "the artifact added matches the given name" do
191
+ subject.demands(name, constraint)
192
+
193
+ subject.demands[0].name.should eql(name)
194
+ end
195
+
196
+ it "the artifact added matches the given constraint" do
197
+ subject.demands(name, constraint)
198
+
199
+ subject.demands[0].constraint.to_s.should eql(constraint)
200
+ end
201
+ end
202
+ end
203
+
204
+ context "given only a name argument" do
205
+ it "returns a demand with a match all version constraint (>= 0.0.0)" do
206
+ subject.demands("nginx").constraint.to_s.should eql(">= 0.0.0")
207
+ end
208
+ end
209
+
210
+ context "given no arguments" do
211
+ it "returns an array" do
212
+ subject.demands.should be_a(Array)
213
+ end
214
+
215
+ it "returns an empty array if no demands have been accessed" do
216
+ subject.demands.should have(0).items
217
+ end
218
+
219
+ it "returns an array containing a demand if one was accessed" do
220
+ subject.demands("nginx", "~> 0.101.5")
221
+
222
+ subject.demands.should have(1).item
223
+ end
224
+ end
225
+
226
+ context "given an unexpected number of arguments" do
227
+ it "raises an ArgumentError if more than two are provided" do
228
+ lambda {
229
+ subject.demands(1, 2, 3)
230
+ }.should raise_error(ArgumentError, "Unexpected number of arguments. You gave: 3. Expected: 2 or less.")
231
+ end
232
+
233
+ it "raises an ArgumentError if a name argument of nil is provided" do
234
+ lambda {
235
+ subject.demands(nil)
236
+ }.should raise_error(ArgumentError, "A name must be specified. You gave: [nil].")
237
+ end
238
+
239
+ it "raises an ArgumentError if a name and constraint argument are provided but name is nil" do
240
+ lambda {
241
+ subject.demands(nil, "= 1.0.0")
242
+ }.should raise_error(ArgumentError, 'A name must be specified. You gave: [nil, "= 1.0.0"].')
243
+ end
244
+ end
245
+ end
246
+
247
+ describe "#add_demand" do
248
+ let(:demand) { Solve::Demand.new(double('graph'), 'ntp') }
249
+
250
+ it "adds a Solve::Artifact to the collection of artifacts" do
251
+ subject.add_demand(demand)
252
+
253
+ subject.should have_demand(demand)
254
+ subject.demands.should have(1).item
255
+ end
256
+
257
+ it "should not add the same demand twice to the collection" do
258
+ subject.add_demand(demand)
259
+ subject.add_demand(demand)
260
+
261
+ subject.demands.should have(1).item
262
+ end
263
+ end
264
+
265
+ describe "#remove_demand" do
266
+ let(:demand) { Solve::Demand.new(double('graph'), 'ntp') }
267
+
268
+ context "given the demand is a member of the collection" do
269
+ before(:each) { subject.add_demand(demand) }
270
+
271
+ it "removes the Solve::Artifact from the collection of demands" do
272
+ subject.remove_demand(demand)
273
+
274
+ subject.demands.should have(0).items
275
+ end
276
+
277
+ it "returns the removed Solve::Artifact" do
278
+ subject.remove_demand(demand).should eql(demand)
279
+ end
280
+ end
281
+
282
+ context "given the demand is not a member of the collection" do
283
+ it "should return nil" do
284
+ subject.remove_demand(demand).should be_nil
285
+ end
286
+ end
287
+ end
288
+
289
+ describe "#has_demand?" do
290
+ let(:demand) { Solve::Demand.new(double('graph'), 'ntp') }
291
+
292
+ it "returns true if the given Solve::Artifact is a member of the collection" do
293
+ subject.add_demand(demand)
294
+
295
+ subject.has_demand?(demand).should be_true
296
+ end
297
+
298
+ it "returns false if the given Solve::Artifact is not a member of the collection" do
299
+ subject.has_demand?(demand).should be_false
300
+ end
301
+ end
302
+ end
@@ -1,6 +1,116 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Solve::Version do
4
+ describe "ClassMethods" do
5
+ subject { Solve::Version }
6
+
7
+ describe "::new" do
8
+ context "a string containing a major, minor, and patch separated by periods" do
9
+ before(:each) { @version = subject.new("1.2.3") }
10
+
11
+ it "assigns a major value" do
12
+ @version.major.should eql(1)
13
+ end
14
+
15
+ it "assigns a minor value" do
16
+ @version.minor.should eql(2)
17
+ end
18
+
19
+ it "assigns a patch value" do
20
+ @version.patch.should eql(3)
21
+ end
22
+ end
23
+
24
+ context "a three element array" do
25
+ before(:each) { @version = subject.new([1,2,3]) }
26
+
27
+ it "assigns a major value" do
28
+ @version.major.should eql(1)
29
+ end
30
+
31
+ it "assigns a minor value" do
32
+ @version.minor.should eql(2)
33
+ end
34
+
35
+ it "assigns a patch value" do
36
+ @version.patch.should eql(3)
37
+ end
38
+ end
39
+
40
+ context "a two element array" do
41
+ before(:each) { @version = subject.new([1,2]) }
42
+
43
+ it "assigns a major value" do
44
+ @version.major.should eql(1)
45
+ end
46
+
47
+ it "assigns a minor value" do
48
+ @version.minor.should eql(2)
49
+ end
50
+
51
+ it "sets the patch value to 0 (zero)" do
52
+ @version.patch.should eql(0)
53
+ end
54
+ end
55
+
56
+ context "a one element array" do
57
+ before(:each) { @version = subject.new([1]) }
58
+
59
+ it "assigns the major value" do
60
+ @version.major.should eql(1)
61
+ end
62
+
63
+ it "sets the minor value to 0 (zero)" do
64
+ @version.minor.should eql(0)
65
+ end
66
+
67
+ it "sets the patch value to 0 (zero)" do
68
+ @version.patch.should eql(0)
69
+ end
70
+ end
71
+
72
+ context "an empty array" do
73
+ before(:each) { @version = subject.new(Array.new) }
74
+
75
+ it "sets the majro value to 0 (zero)" do
76
+ @version.major.should eql(0)
77
+ end
78
+
79
+ it "sets the minor value to 0 (zero)" do
80
+ @version.minor.should eql(0)
81
+ end
82
+
83
+ it "sets the patch value to 0 (zero)" do
84
+ @version.patch.should eql(0)
85
+ end
86
+ end
87
+ end
88
+
89
+ describe "::split" do
90
+ it "returns an array containing 3 elements" do
91
+ subject.split("1.2.0").should have(3).items
92
+ end
93
+
94
+ context "given a string only containing a major and minor version" do
95
+ it "returns an array containing 3 elements" do
96
+ subject.split("1.2").should have(3).items
97
+ end
98
+
99
+ it "returns nil as the third element" do
100
+ subject.split("1.2")[2].should be_nil
101
+ end
102
+ end
103
+
104
+ context "given a string with only a major version" do
105
+ it "raises an InvalidVersionFormat error" do
106
+ lambda {
107
+ subject.split("1")
108
+ }.should raise_error(Solve::Errors::InvalidVersionFormat)
109
+ end
110
+ end
111
+ end
112
+ end
113
+
4
114
  subject { Solve::Version.new("1.0.0") }
5
115
 
6
116
  describe "#to_s" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solve
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,43 +9,33 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-09 00:00:00.000000000 Z
12
+ date: 2012-09-25 00:00:00.000000000Z
13
13
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: dep_selector
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: 0.0.8
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: 0.0.8
30
14
  - !ruby/object:Gem::Dependency
31
15
  name: thor
32
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &70233888694760 !ruby/object:Gem::Requirement
33
17
  none: false
34
18
  requirements:
35
19
  - - ! '>='
36
20
  - !ruby/object:Gem::Version
37
- version: '0'
21
+ version: 0.16.0
38
22
  type: :development
39
23
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
24
+ version_requirements: *70233888694760
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ requirement: &70233888694060 !ruby/object:Gem::Requirement
41
28
  none: false
42
29
  requirements:
43
30
  - - ! '>='
44
31
  - !ruby/object:Gem::Version
45
- version: '0'
32
+ version: 0.9.2.2
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70233888694060
46
36
  - !ruby/object:Gem::Dependency
47
37
  name: rspec
48
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &70233888692060 !ruby/object:Gem::Requirement
49
39
  none: false
50
40
  requirements:
51
41
  - - ! '>='
@@ -53,15 +43,10 @@ dependencies:
53
43
  version: '0'
54
44
  type: :development
55
45
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
46
+ version_requirements: *70233888692060
62
47
  - !ruby/object:Gem::Dependency
63
48
  name: fuubar
64
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &70233888691380 !ruby/object:Gem::Requirement
65
50
  none: false
66
51
  requirements:
67
52
  - - ! '>='
@@ -69,15 +54,10 @@ dependencies:
69
54
  version: '0'
70
55
  type: :development
71
56
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
57
+ version_requirements: *70233888691380
78
58
  - !ruby/object:Gem::Dependency
79
59
  name: spork
80
- requirement: !ruby/object:Gem::Requirement
60
+ requirement: &70233888690880 !ruby/object:Gem::Requirement
81
61
  none: false
82
62
  requirements:
83
63
  - - ! '>='
@@ -85,15 +65,10 @@ dependencies:
85
65
  version: '0'
86
66
  type: :development
87
67
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
68
+ version_requirements: *70233888690880
94
69
  - !ruby/object:Gem::Dependency
95
70
  name: yard
96
- requirement: !ruby/object:Gem::Requirement
71
+ requirement: &70233888683680 !ruby/object:Gem::Requirement
97
72
  none: false
98
73
  requirements:
99
74
  - - ! '>='
@@ -101,15 +76,10 @@ dependencies:
101
76
  version: '0'
102
77
  type: :development
103
78
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
79
+ version_requirements: *70233888683680
110
80
  - !ruby/object:Gem::Dependency
111
81
  name: redcarpet
112
- requirement: !ruby/object:Gem::Requirement
82
+ requirement: &70233888683020 !ruby/object:Gem::Requirement
113
83
  none: false
114
84
  requirements:
115
85
  - - ! '>='
@@ -117,15 +87,10 @@ dependencies:
117
87
  version: '0'
118
88
  type: :development
119
89
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: '0'
90
+ version_requirements: *70233888683020
126
91
  - !ruby/object:Gem::Dependency
127
92
  name: guard
128
- requirement: !ruby/object:Gem::Requirement
93
+ requirement: &70233888682320 !ruby/object:Gem::Requirement
129
94
  none: false
130
95
  requirements:
131
96
  - - ! '>='
@@ -133,15 +98,10 @@ dependencies:
133
98
  version: '0'
134
99
  type: :development
135
100
  prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ! '>='
140
- - !ruby/object:Gem::Version
141
- version: '0'
101
+ version_requirements: *70233888682320
142
102
  - !ruby/object:Gem::Dependency
143
103
  name: guard-rspec
144
- requirement: !ruby/object:Gem::Requirement
104
+ requirement: &70233888681480 !ruby/object:Gem::Requirement
145
105
  none: false
146
106
  requirements:
147
107
  - - ! '>='
@@ -149,15 +109,10 @@ dependencies:
149
109
  version: '0'
150
110
  type: :development
151
111
  prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
- requirements:
155
- - - ! '>='
156
- - !ruby/object:Gem::Version
157
- version: '0'
112
+ version_requirements: *70233888681480
158
113
  - !ruby/object:Gem::Dependency
159
114
  name: guard-spork
160
- requirement: !ruby/object:Gem::Requirement
115
+ requirement: &70233888681000 !ruby/object:Gem::Requirement
161
116
  none: false
162
117
  requirements:
163
118
  - - ! '>='
@@ -165,15 +120,10 @@ dependencies:
165
120
  version: '0'
166
121
  type: :development
167
122
  prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
- requirements:
171
- - - ! '>='
172
- - !ruby/object:Gem::Version
173
- version: '0'
123
+ version_requirements: *70233888681000
174
124
  - !ruby/object:Gem::Dependency
175
125
  name: guard-yard
176
- requirement: !ruby/object:Gem::Requirement
126
+ requirement: &70233888680540 !ruby/object:Gem::Requirement
177
127
  none: false
178
128
  requirements:
179
129
  - - ! '>='
@@ -181,15 +131,10 @@ dependencies:
181
131
  version: '0'
182
132
  type: :development
183
133
  prerelease: false
184
- version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
- requirements:
187
- - - ! '>='
188
- - !ruby/object:Gem::Version
189
- version: '0'
134
+ version_requirements: *70233888680540
190
135
  - !ruby/object:Gem::Dependency
191
136
  name: coolline
192
- requirement: !ruby/object:Gem::Requirement
137
+ requirement: &70233888680000 !ruby/object:Gem::Requirement
193
138
  none: false
194
139
  requirements:
195
140
  - - ! '>='
@@ -197,12 +142,7 @@ dependencies:
197
142
  version: '0'
198
143
  type: :development
199
144
  prerelease: false
200
- version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
- requirements:
203
- - - ! '>='
204
- - !ruby/object:Gem::Version
205
- version: '0'
145
+ version_requirements: *70233888680000
206
146
  description: A Ruby constraint solver
207
147
  email:
208
148
  - jamie@vialstudios.com
@@ -212,6 +152,7 @@ extra_rdoc_files: []
212
152
  files:
213
153
  - .gitignore
214
154
  - .rbenv-version
155
+ - .travis.yml
215
156
  - Gemfile
216
157
  - Guardfile
217
158
  - LICENSE
@@ -220,13 +161,16 @@ files:
220
161
  - lib/solve.rb
221
162
  - lib/solve/artifact.rb
222
163
  - lib/solve/constraint.rb
223
- - lib/solve/core_ext.rb
224
- - lib/solve/core_ext/kernel.rb
225
164
  - lib/solve/demand.rb
226
165
  - lib/solve/dependency.rb
227
166
  - lib/solve/errors.rb
228
167
  - lib/solve/gem_version.rb
229
168
  - lib/solve/graph.rb
169
+ - lib/solve/solver.rb
170
+ - lib/solve/solver/constraint_row.rb
171
+ - lib/solve/solver/constraint_table.rb
172
+ - lib/solve/solver/variable.rb
173
+ - lib/solve/solver/variable_table.rb
230
174
  - lib/solve/version.rb
231
175
  - solve.gemspec
232
176
  - spec/acceptance/solutions_spec.rb
@@ -236,6 +180,7 @@ files:
236
180
  - spec/unit/solve/demand_spec.rb
237
181
  - spec/unit/solve/dependency_spec.rb
238
182
  - spec/unit/solve/graph_spec.rb
183
+ - spec/unit/solve/solver_spec.rb
239
184
  - spec/unit/solve/version_spec.rb
240
185
  - spec/unit/solve_spec.rb
241
186
  homepage: https://github.com/reset/solve
@@ -258,10 +203,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
258
203
  version: '0'
259
204
  segments:
260
205
  - 0
261
- hash: 1692611676791310100
206
+ hash: -4081621273929848192
262
207
  requirements: []
263
208
  rubyforge_project:
264
- rubygems_version: 1.8.23
209
+ rubygems_version: 1.8.10
265
210
  signing_key:
266
211
  specification_version: 3
267
212
  summary: A Ruby constraint solver
@@ -273,6 +218,7 @@ test_files:
273
218
  - spec/unit/solve/demand_spec.rb
274
219
  - spec/unit/solve/dependency_spec.rb
275
220
  - spec/unit/solve/graph_spec.rb
221
+ - spec/unit/solve/solver_spec.rb
276
222
  - spec/unit/solve/version_spec.rb
277
223
  - spec/unit/solve_spec.rb
278
224
  has_rdoc: