mbt-gen 0.0.12 → 0.0.13.1
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.
- checksums.yaml +4 -4
- data/lib/mbt-gen.rb +28 -15
- data/lib/regexp-to-smtlib.rb +3 -3
- data/lib/solver-lib.rb +4 -4
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a735505ef6ca3f6784860c7a01aa8abafdcfed996095718d94ed2caeee517c6a
|
|
4
|
+
data.tar.gz: 1822f83dfae7c22337e3754fe204955b02861a33f13558034a331092235d2c06
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 36a74c094e81a175ecc802dcd93f5da64660ff84712672752b95d139f17985945814b6ce84e7910f286c1b2f229cdb8a026b8c42049ef4779f5b36af9c47d465
|
|
7
|
+
data.tar.gz: 98307fab8e79ca0df312ff6a6375cc02c103c025e0bde84cc3fbf350e88b1062ffe93603bba0212344d51025ef839602d12e4389ea4f94f31a3c29208cc5f63b
|
data/lib/mbt-gen.rb
CHANGED
|
@@ -596,6 +596,19 @@ def translate_validation_rules_to_SMTLIB(progress, solver, struct, prefix, confi
|
|
|
596
596
|
new_prefix = key.to_s
|
|
597
597
|
end
|
|
598
598
|
translate_validation_rules_to_SMTLIB(progress, solver, value[:ref], new_prefix, config, options)
|
|
599
|
+
elsif value[:type] == :objlist then
|
|
600
|
+
maxLength = value[:model_maxLength]
|
|
601
|
+
unless maxLength then
|
|
602
|
+
raise RuntimeError.new("encountered objList without :model_maxLength property!")
|
|
603
|
+
end
|
|
604
|
+
maxLength.times do |i|
|
|
605
|
+
if prefix then
|
|
606
|
+
new_prefix = "#{prefix.to_s}/#{key}/#{i}"
|
|
607
|
+
else
|
|
608
|
+
new_prefix = "#{key.to_s}/#{i}"
|
|
609
|
+
end
|
|
610
|
+
translate_validation_rules_to_SMTLIB(progress, solver, value[:ref], new_prefix, config, options)
|
|
611
|
+
end
|
|
599
612
|
end
|
|
600
613
|
end
|
|
601
614
|
end
|
|
@@ -615,7 +628,7 @@ def translate_validation_rule_to_SMTLIB(rule, context_struct, prefix, config, op
|
|
|
615
628
|
raise RuntimeError.new("could not parse LIST_VALUE_FIRST_ELEMENT[...]: #{m.inspect} in validation rule #{rule_name}")
|
|
616
629
|
end
|
|
617
630
|
xpath = $1
|
|
618
|
-
index = Integer($2)
|
|
631
|
+
index = Integer($2, 10)
|
|
619
632
|
l = resolve_field_path(xpath, context_struct, prefix)
|
|
620
633
|
value_var_for_list(l, index)
|
|
621
634
|
end
|
|
@@ -711,7 +724,7 @@ def translate_validation_rule_to_SMTLIB(rule, context_struct, prefix, config, op
|
|
|
711
724
|
end
|
|
712
725
|
elsif fdef[:datatype] == :int then
|
|
713
726
|
terms = values.filter{|l| !l.start_with?("#")}.map do |val|
|
|
714
|
-
"(= #{value_var_for_field(fpath)} #{Integer(val)})"
|
|
727
|
+
"(= #{value_var_for_field(fpath)} #{Integer(val, 10)})"
|
|
715
728
|
end
|
|
716
729
|
else
|
|
717
730
|
raise RuntimeError.new("FIELD_IN_QUERY[] was applied to a field of datatype #{fdef[:datatype].inspect}. However, it can only be applied to fields of datatype string or int.")
|
|
@@ -780,7 +793,7 @@ def parse_field_value(fielddef, value)
|
|
|
780
793
|
datatype = fielddef[:datatype]
|
|
781
794
|
case datatype
|
|
782
795
|
when :int
|
|
783
|
-
return Integer(value)
|
|
796
|
+
return Integer(value, 10)
|
|
784
797
|
when :string
|
|
785
798
|
return solver_value_to_string(value)
|
|
786
799
|
when :enum
|
|
@@ -865,8 +878,8 @@ def add_max_struct_to_doc(progress, struct, doc, prefix = nil)
|
|
|
865
878
|
node = node.first
|
|
866
879
|
end
|
|
867
880
|
xpath_element = value[:xpath_element]
|
|
868
|
-
if Integer(value[:model_maxLength]) > 0 then
|
|
869
|
-
Integer(value[:model_maxLength]).times do |i|
|
|
881
|
+
if Integer(value[:model_maxLength], 10) > 0 then
|
|
882
|
+
Integer(value[:model_maxLength], 10).times do |i|
|
|
870
883
|
node.add_child("<#{xpath_element}>#{format_solver_value(value, pick_solver_value_for_field(value))}</#{xpath_element}>")
|
|
871
884
|
end
|
|
872
885
|
end
|
|
@@ -928,8 +941,8 @@ def add_model_struct_to_doc(progress, struct, doc, model, prefix = nil)
|
|
|
928
941
|
node = node.first
|
|
929
942
|
end
|
|
930
943
|
xpath_element = value[:xpath_element]
|
|
931
|
-
if Integer(model_value[:size]) > 0 then
|
|
932
|
-
model_value[:value].slice(0, Integer(model_value[:size])).each do |mvalue|
|
|
944
|
+
if Integer(model_value[:size], 10) > 0 then
|
|
945
|
+
model_value[:value].slice(0, Integer(model_value[:size], 10)).each do |mvalue|
|
|
933
946
|
node.add_child("<#{xpath_element}>#{solver_value_to_string(mvalue)}</#{xpath_element}>")
|
|
934
947
|
end
|
|
935
948
|
end
|
|
@@ -939,7 +952,7 @@ def add_model_struct_to_doc(progress, struct, doc, model, prefix = nil)
|
|
|
939
952
|
node = node.first
|
|
940
953
|
end
|
|
941
954
|
xpath_element = value[:xpath_element]
|
|
942
|
-
if Integer(model_value[:size]) > 0 then
|
|
955
|
+
if Integer(model_value[:size], 10) > 0 then
|
|
943
956
|
model_value[:size].times do |index|
|
|
944
957
|
cnode = node.add_child("<#{xpath_element}></#{xpath_element}>")
|
|
945
958
|
if cnode.is_a?(Nokogiri::XML::NodeSet) then
|
|
@@ -1315,7 +1328,7 @@ def z3ValueToRubyValue(value)
|
|
|
1315
1328
|
if value =~ /\"(.*)\"/ then # string
|
|
1316
1329
|
return $1
|
|
1317
1330
|
elsif value =~ /\d+/ then # int
|
|
1318
|
-
return Integer(value)
|
|
1331
|
+
return Integer(value, 10)
|
|
1319
1332
|
elsif value == "true"
|
|
1320
1333
|
return true
|
|
1321
1334
|
elsif value == "false" then
|
|
@@ -1583,7 +1596,7 @@ def default_parser_for_type(value_str, datatype)
|
|
|
1583
1596
|
if datatype == :string or datatype == :enum then
|
|
1584
1597
|
value_str
|
|
1585
1598
|
elsif datatype == :int then
|
|
1586
|
-
Integer(value_str)
|
|
1599
|
+
Integer(value_str, 10)
|
|
1587
1600
|
elsif datatype == :date then
|
|
1588
1601
|
Date.parse(value_str)
|
|
1589
1602
|
elsif datatype == :timestamp then
|
|
@@ -1806,12 +1819,12 @@ class CoreEnumerationAlgo
|
|
|
1806
1819
|
|
|
1807
1820
|
def self.parse_continuation_point(line)
|
|
1808
1821
|
split = line.split(";")
|
|
1809
|
-
doc_number = Integer(split[0])
|
|
1810
|
-
num_docs = Integer(split[1])
|
|
1822
|
+
doc_number = Integer(split[0], 10)
|
|
1823
|
+
num_docs = Integer(split[1], 10)
|
|
1811
1824
|
state = CoreEnumerationAlgo.parse_state(split[2])
|
|
1812
1825
|
assignment = CoreEnumerationAlgo.parse_assignment(split[3])
|
|
1813
1826
|
new_assignment = CoreEnumerationAlgo.parse_assignment(split[4])
|
|
1814
|
-
processessing_time = Integer(split[5])
|
|
1827
|
+
processessing_time = Integer(split[5], 10)
|
|
1815
1828
|
return [doc_number, num_docs, state, assignment, new_assignment, processessing_time]
|
|
1816
1829
|
end
|
|
1817
1830
|
|
|
@@ -2510,7 +2523,7 @@ def generate(message, argv, message_config_filename = nil)
|
|
|
2510
2523
|
elsif opt == "-generate-docs-from" then
|
|
2511
2524
|
options[:combination_source] = argv.shift
|
|
2512
2525
|
elsif opt == "-skip" then
|
|
2513
|
-
options[:skip] = Integer(argv.shift)
|
|
2526
|
+
options[:skip] = Integer(argv.shift, 10)
|
|
2514
2527
|
elsif opt == "-generate-docs-for-key" then
|
|
2515
2528
|
options[:docs_for_key] = argv.shift
|
|
2516
2529
|
elsif opt == "-count-docs-for-key" then
|
|
@@ -2518,7 +2531,7 @@ def generate(message, argv, message_config_filename = nil)
|
|
|
2518
2531
|
elsif opt == "-continue" then
|
|
2519
2532
|
options[:continue] = true
|
|
2520
2533
|
elsif opt == "-max-num-docs" then
|
|
2521
|
-
options[:max_num_docs] = Integer(argv.shift)
|
|
2534
|
+
options[:max_num_docs] = Integer(argv.shift, 10)
|
|
2522
2535
|
puts "flag -max-num-docs used. Will stop after generating #{options[:max_num_docs]} documents."
|
|
2523
2536
|
elsif opt == "-validate" then
|
|
2524
2537
|
if options.has_key?(:validate_files) then
|
data/lib/regexp-to-smtlib.rb
CHANGED
|
@@ -84,8 +84,8 @@ class Regexp_to_SMTLIB
|
|
|
84
84
|
return "(re.opt #{expr})"
|
|
85
85
|
elsif multiplicator =~ /\{(\d+),(\d+)\}/ then
|
|
86
86
|
begin
|
|
87
|
-
lower = Integer($1)
|
|
88
|
-
upper = Integer($2)
|
|
87
|
+
lower = Integer($1, 10)
|
|
88
|
+
upper = Integer($2, 10)
|
|
89
89
|
rescue TypeError => e
|
|
90
90
|
raise RuntimeError.new("cannot parse regexp (#{$1} or #{$2} is no Integer)")
|
|
91
91
|
end
|
|
@@ -117,4 +117,4 @@ class Regexp_to_SMTLIB
|
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
|
|
120
|
-
end
|
|
120
|
+
end
|
data/lib/solver-lib.rb
CHANGED
|
@@ -337,7 +337,7 @@ class SolverFactory
|
|
|
337
337
|
unless varname =~ /-index-(\d+)-value$/
|
|
338
338
|
raise RuntimeError.new("inconsistent model: xpath #{xpath} is a list value and hence its varname should end like -index-X-value, not #{varname.inspect}.")
|
|
339
339
|
end
|
|
340
|
-
index = Integer($1)
|
|
340
|
+
index = Integer($1, 10)
|
|
341
341
|
model[xpath][:xpath_element] = info[:xpath_element]
|
|
342
342
|
if model[xpath].has_key?(:value) then
|
|
343
343
|
val = convert_solver_value(info[:type], info[:datatype], value, xpath)
|
|
@@ -354,7 +354,7 @@ class SolverFactory
|
|
|
354
354
|
if model[xpath][:type] == :field then
|
|
355
355
|
model[xpath][:type] = :list
|
|
356
356
|
end
|
|
357
|
-
model[xpath][:size] = Integer(value)
|
|
357
|
+
model[xpath][:size] = Integer(value, 10)
|
|
358
358
|
elsif varname.start_with?("struct-") && varname.end_with?("-exists") then
|
|
359
359
|
unless model[xpath][:type] == :struct then
|
|
360
360
|
raise RuntimeError.new("inconsistent model: xpath #{xpath} should be a struct, not a #{model[xpath][:type]}.")
|
|
@@ -403,9 +403,9 @@ class SolverFactory
|
|
|
403
403
|
def convert_solver_value(type, datatype, value, xpath)
|
|
404
404
|
check_type(type, value, xpath)
|
|
405
405
|
if datatype == :date then
|
|
406
|
-
return (Time.at(0).to_date + Integer(value)).to_s
|
|
406
|
+
return (Time.at(0).to_date + Integer(value, 10)).to_s
|
|
407
407
|
elsif datatype == :timestamp then
|
|
408
|
-
return Time.at(Integer(value)).to_s
|
|
408
|
+
return Time.at(Integer(value, 10)).to_s
|
|
409
409
|
else
|
|
410
410
|
return value
|
|
411
411
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mbt-gen
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.13.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- FM-enthusiast
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-11-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: nokogiri
|