mbt-gen 0.0.13.1 → 0.0.14

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mbt-gen.rb +27 -4
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a735505ef6ca3f6784860c7a01aa8abafdcfed996095718d94ed2caeee517c6a
4
- data.tar.gz: 1822f83dfae7c22337e3754fe204955b02861a33f13558034a331092235d2c06
3
+ metadata.gz: 4dab888f896a820078b818a69beb6c96832509be151437332a64efe493c99c43
4
+ data.tar.gz: 7bb0d5281265df6171e316c4c5cf5b2f6ef909bee7549cb6213c3d61e79c46fe
5
5
  SHA512:
6
- metadata.gz: 36a74c094e81a175ecc802dcd93f5da64660ff84712672752b95d139f17985945814b6ce84e7910f286c1b2f229cdb8a026b8c42049ef4779f5b36af9c47d465
7
- data.tar.gz: 98307fab8e79ca0df312ff6a6375cc02c103c025e0bde84cc3fbf350e88b1062ffe93603bba0212344d51025ef839602d12e4389ea4f94f31a3c29208cc5f63b
6
+ metadata.gz: e14470e1741ccc1dfede14112f045bb952f42afbb4c8d55af8ac42bcf4517ae4de9fe0fedd6b3296c3a51651665c8d2d3a996e51fa7be892e7a9dea6890d28c7
7
+ data.tar.gz: 6e723168766e1dc4414e9e25344e9a3f2abc4b6704e5d25bb85e19c20b9f933b37deea1fa904f2954689151a4db3b41a6c427856ce5534e10473540a43ed6fd4
data/lib/mbt-gen.rb CHANGED
@@ -182,6 +182,10 @@ def maxLength_contraint_for_expr(expr, maxLength)
182
182
  "(<= (str.len #{expr}) #{maxLength})"
183
183
  end
184
184
 
185
+ def minLength_contraint_for_expr(expr, minLength)
186
+ "(>= (str.len #{expr}) #{minLength})"
187
+ end
188
+
185
189
  def oneOf_contraint_for_expr(expr, values)
186
190
  list = values.map do |val|
187
191
  "(= #{expr} \"#{val}\")"
@@ -246,7 +250,6 @@ def translate_field_def_to_SMTLIB_constraints(progress, solver, fielddef, xpath,
246
250
  solver.associateAssertionIDWith(assertionID, info)
247
251
  solver.to_solver(progress, "(assert (! (=> #{varname}-filled #{regex_constraint_for_expr("#{varname}-value", fielddef[:regex])}) :named #{assertionID}))")
248
252
  end
249
- # TODO: minLength?
250
253
  if fielddef[:maxLength] then
251
254
  assertionID = "maxLength-#{varname}"
252
255
  info = {
@@ -259,6 +262,18 @@ def translate_field_def_to_SMTLIB_constraints(progress, solver, fielddef, xpath,
259
262
  solver.associateAssertionIDWith(assertionID, info)
260
263
  solver.to_solver(progress, "(assert (! (=> #{varname}-filled #{maxLength_contraint_for_expr("#{varname}-value", fielddef[:maxLength])}) :named #{assertionID}))")
261
264
  end
265
+ if fielddef[:minLength] then
266
+ assertionID = "minLength-#{varname}"
267
+ info = {
268
+ :assertion_type => :constraint,
269
+ :xpath => xpath,
270
+ :datatype => :string,
271
+ :value => fielddef[:minLength],
272
+ :constraint_type => :minLength
273
+ }
274
+ solver.associateAssertionIDWith(assertionID, info)
275
+ solver.to_solver(progress, "(assert (! (=> #{varname}-filled #{minLength_contraint_for_expr("#{varname}-value", fielddef[:minLength])}) :named #{assertionID}))")
276
+ end
262
277
  if fielddef[:from_list] then
263
278
  assertionID = "oneOf-#{varname}"
264
279
  list_filename = "#{LISTS_DIR}/#{fielddef[:from_list]}"
@@ -310,12 +325,16 @@ def translate_list_def_to_SMTLIB_constraints(progress, solver, fielddef, varname
310
325
  solver.to_solver(progress, "(assert (! (=> (< #{i} #{varname}-size) #{regex_constraint_for_expr("#{varname}-index-#{i}-value", fielddef[:regex])}) :named list-regex-#{varname}-index-#{i}))")
311
326
  end
312
327
  end
313
- # TODO: minLength?
314
328
  if fielddef[:maxLength] then
315
329
  fielddef[:model_maxLength].times do |i|
316
330
  solver.to_solver(progress, "(assert (! (=> (< #{i} #{varname}-size) #{maxLength_contraint_for_expr("#{varname}-index-#{i}-value", fielddef[:maxLength])}) :named list-maxLength-#{varname}-index-#{i}))")
317
331
  end
318
332
  end
333
+ if fielddef[:minLength] then
334
+ fielddef[:model_maxLength].times do |i|
335
+ solver.to_solver(progress, "(assert (! (=> (< #{i} #{varname}-size) #{minLength_contraint_for_expr("#{varname}-index-#{i}-value", fielddef[:minLength])}) :named list-minLength-#{varname}-index-#{i}))")
336
+ end
337
+ end
319
338
  when :enum
320
339
  fielddef[:model_maxLength].times do |i|
321
340
  solver.to_solver(progress, "(assert (! (=> (< #{i} #{varname}-size) #{enum_constraint_for_expr("#{varname}-index-#{i}-value", fielddef[:values])}) :named list-enum-#{varname}-index-#{i}))")
@@ -412,7 +431,7 @@ def translate_substructure_to_SMTLIB(progress, solver, struct, hash = {})
412
431
  solver.to_solver(progress, "(assert (! (=> (not #{filled_var_for_field(xpath)}) (= #{size_var_for_list(xpath)} 0)) :named empty-objlist-has-zero-size-#{raw_field(xpath)}))")
413
432
  solver.to_solver(progress, "(assert (! (=> (= #{size_var_for_list(xpath)} 0) (not #{filled_var_for_field(xpath)})) :named objlist-has-zero-size-implies-empty-objlist-#{raw_field(xpath)}))")
414
433
  minSize = 0
415
- solver.to_solver(progress, "(assert (! (=> #{filled_var_for_field(xpath)} (and (> #{size_var_for_list(xpath)} #{minSize}) (< #{size_var_for_list(xpath)} #{definition[:model_maxLength]}))) :named filled-objlist-has-positive-size-#{raw_field(xpath)}))")
434
+ solver.to_solver(progress, "(assert (! (=> #{filled_var_for_field(xpath)} (and (> #{size_var_for_list(xpath)} #{minSize}) (<= #{size_var_for_list(xpath)} #{definition[:model_maxLength]}))) :named filled-objlist-has-positive-size-#{raw_field(xpath)}))")
416
435
  solver.to_solver(progress, "(assert (! (=> (> #{size_var_for_list(xpath)} 0) #{filled_var_for_field(xpath)}) :named objlist-has-positive-size-implies-filled-objlist-#{raw_field(xpath)}))")
417
436
  definition[:model_maxLength].times do |i|
418
437
  ext_xpath = "#{xpath}/#{i}"
@@ -847,7 +866,11 @@ def pick_solver_value_for_field(field_desc)
847
866
  if field_desc[:maxLength] then
848
867
  "a" * field_desc[:maxLength]
849
868
  else
850
- "default"
869
+ if field_desc[:minLength] then
870
+ "a" * field_desc[:minLength]
871
+ else
872
+ "default"
873
+ end
851
874
  end
852
875
  elsif field_desc[:datatype] == :enum then
853
876
  field_desc[:values].first.to_s
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mbt-gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13.1
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - FM-enthusiast