adsl 0.0.3 → 0.1.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.
- checksums.yaml +4 -4
- data/Gemfile +2 -20
- data/README.md +14 -21
- data/bin/adsl-verify +8 -8
- data/lib/adsl.rb +3 -0
- data/lib/adsl/adsl.rb +3 -0
- data/lib/adsl/ds/data_store_spec.rb +339 -0
- data/lib/adsl/extract/instrumenter.rb +206 -0
- data/lib/adsl/extract/meta.rb +33 -0
- data/lib/adsl/extract/rails/action_block_builder.rb +233 -0
- data/lib/adsl/extract/rails/action_instrumenter.rb +400 -0
- data/lib/adsl/extract/rails/action_runner.rb +57 -0
- data/lib/adsl/extract/rails/active_record_metaclass_generator.rb +555 -0
- data/lib/adsl/extract/rails/callback_chain_simulator.rb +135 -0
- data/lib/adsl/extract/rails/invariant_extractor.rb +48 -0
- data/lib/adsl/extract/rails/invariant_instrumenter.rb +70 -0
- data/lib/adsl/extract/rails/other_meta.rb +57 -0
- data/lib/adsl/extract/rails/rails_extractor.rb +211 -0
- data/lib/adsl/extract/rails/rails_instrumentation_test_case.rb +34 -0
- data/lib/adsl/extract/rails/rails_special_gem_instrumentation.rb +120 -0
- data/lib/adsl/extract/rails/rails_test_helper.rb +140 -0
- data/lib/adsl/extract/sexp_utils.rb +54 -0
- data/lib/adsl/fol/first_order_logic.rb +261 -0
- data/lib/adsl/parser/adsl_parser.racc +159 -0
- data/lib/{parser → adsl/parser}/adsl_parser.rex +4 -4
- data/lib/{parser → adsl/parser}/adsl_parser.rex.rb +6 -6
- data/lib/adsl/parser/adsl_parser.tab.rb +1031 -0
- data/lib/adsl/parser/ast_nodes.rb +1410 -0
- data/lib/adsl/railtie.rb +67 -0
- data/lib/adsl/spass/bin.rb +230 -0
- data/lib/{spass → adsl/spass}/ruby_extensions.rb +0 -0
- data/lib/adsl/spass/spass_ds_extensions.rb +931 -0
- data/lib/adsl/spass/spass_translator.rb +393 -0
- data/lib/adsl/spass/util.rb +13 -0
- data/lib/adsl/util/csv_hash_formatter.rb +94 -0
- data/lib/adsl/util/general.rb +228 -0
- data/lib/adsl/util/test_helper.rb +71 -0
- data/lib/adsl/verification/formula_generators.rb +231 -0
- data/lib/adsl/verification/instrumentation_filter.rb +50 -0
- data/lib/adsl/verification/invariant.rb +19 -0
- data/lib/adsl/verification/rails_verification.rb +33 -0
- data/lib/adsl/verification/utils.rb +20 -0
- data/lib/adsl/verification/verification_case.rb +13 -0
- data/test/integration/rails/rails_branch_verification_test.rb +112 -0
- data/test/integration/rails/rails_verification_test.rb +253 -0
- data/test/integration/spass/basic_translation_test.rb +563 -0
- data/test/integration/spass/control_flow_translation_test.rb +421 -0
- data/test/unit/adsl/ds/data_store_spec_test.rb +54 -0
- data/test/unit/adsl/extract/instrumenter_test.rb +103 -0
- data/test/unit/adsl/extract/meta_test.rb +142 -0
- data/test/unit/adsl/extract/rails/action_block_builder_test.rb +178 -0
- data/test/unit/adsl/extract/rails/action_instrumenter_test.rb +68 -0
- data/test/unit/adsl/extract/rails/active_record_metaclass_generator_test.rb +336 -0
- data/test/unit/adsl/extract/rails/callback_chain_simulator_test.rb +76 -0
- data/test/unit/adsl/extract/rails/invariant_extractor_test.rb +92 -0
- data/test/unit/adsl/extract/rails/rails_extractor_test.rb +1380 -0
- data/test/unit/adsl/extract/rails/rails_test_helper_test.rb +25 -0
- data/test/unit/adsl/extract/sexp_utils_test.rb +100 -0
- data/test/unit/adsl/fol/first_order_logic_test.rb +227 -0
- data/test/unit/adsl/parser/action_parser_test.rb +1040 -0
- data/test/unit/adsl/parser/ast_nodes_test.rb +359 -0
- data/test/unit/adsl/parser/class_parser_test.rb +288 -0
- data/test/unit/adsl/parser/general_parser_test.rb +67 -0
- data/test/unit/adsl/parser/invariant_parser_test.rb +432 -0
- data/test/unit/adsl/parser/parser_util_test.rb +126 -0
- data/test/unit/adsl/spass/bin_test.rb +65 -0
- data/test/unit/adsl/spass/ruby_extensions_test.rb +39 -0
- data/test/unit/adsl/spass/spass_ds_extensions_test.rb +7 -0
- data/test/unit/adsl/spass/spass_translator_test.rb +342 -0
- data/test/unit/adsl/util/csv_hash_formatter_test.rb +68 -0
- data/test/unit/adsl/util/general_test.rb +303 -0
- data/test/unit/adsl/util/test_helper_test.rb +120 -0
- data/test/unit/adsl/verification/formula_generators_test.rb +200 -0
- data/test/unit/adsl/verification/instrumentation_filter_test.rb +39 -0
- data/test/unit/adsl/verification/utils_test.rb +39 -0
- data/test/unit/adsl/verification/verification_case_test.rb +8 -0
- metadata +229 -29
- data/lib/ds/data_store_spec.rb +0 -292
- data/lib/fol/first_order_logic.rb +0 -260
- data/lib/parser/adsl_ast.rb +0 -779
- data/lib/parser/adsl_parser.racc +0 -151
- data/lib/parser/adsl_parser.tab.rb +0 -976
- data/lib/parser/dsdl_parser.rex.rb +0 -196
- data/lib/parser/dsdl_parser.tab.rb +0 -976
- data/lib/spass/bin.rb +0 -164
- data/lib/spass/spass_ds_extensions.rb +0 -870
- data/lib/spass/spass_translator.rb +0 -388
- data/lib/spass/util.rb +0 -11
- data/lib/util/csv_hash_formatter.rb +0 -47
- data/lib/util/test_helper.rb +0 -33
- data/lib/util/util.rb +0 -114
data/lib/util/util.rb
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
require 'set'
|
|
2
|
-
require 'open3'
|
|
3
|
-
require 'thread'
|
|
4
|
-
|
|
5
|
-
class String
|
|
6
|
-
def increment_suffix
|
|
7
|
-
suffix = scan(/_(\d+)$/).last
|
|
8
|
-
if suffix.nil?
|
|
9
|
-
return self + "_2"
|
|
10
|
-
else
|
|
11
|
-
suffix = suffix.first
|
|
12
|
-
return self[0, self.length - suffix.length] + (suffix.to_i + 1).to_s
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
class Time
|
|
18
|
-
def self.time_execution
|
|
19
|
-
pre = Time.now
|
|
20
|
-
yield
|
|
21
|
-
((Time.now - pre)*1000).to_i
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def container_for(*fields, &block)
|
|
26
|
-
raise ArgumentError, 'Field list empty' if fields.empty?
|
|
27
|
-
|
|
28
|
-
all_fields_method_name = :container_for_fields
|
|
29
|
-
|
|
30
|
-
all_fields = Set.new(fields)
|
|
31
|
-
if methods.include? all_fields_method_name or methods.include? all_fields_method_name.to_s
|
|
32
|
-
prev_fields = send all_fields_method_name
|
|
33
|
-
all_fields.merge prev_fields
|
|
34
|
-
end
|
|
35
|
-
singleton_class = (class << self; self; end)
|
|
36
|
-
singleton_class.send :define_method, all_fields_method_name, lambda{all_fields}
|
|
37
|
-
|
|
38
|
-
attr_accessor *fields
|
|
39
|
-
|
|
40
|
-
self.send(:define_method, :initialize) do |*options|
|
|
41
|
-
options = options.empty? ? {} : options[0]
|
|
42
|
-
options ||= {}
|
|
43
|
-
options_trimmed = Hash[options]
|
|
44
|
-
|
|
45
|
-
all_fields.each do |field|
|
|
46
|
-
instance_variable_set "@#{field}".to_sym, options_trimmed.delete(field.to_sym)
|
|
47
|
-
end
|
|
48
|
-
if block
|
|
49
|
-
instance_eval &block
|
|
50
|
-
elsif not options_trimmed.empty?
|
|
51
|
-
raise ArgumentError, "Undefined fields mentioned in initializer of #{self.class}: #{options_trimmed.keys.map{ |key| ":#{key.to_s}"}.join(", ")}" + "\n[#{all_fields.to_a.join ' ' }]"
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
send :define_method, :recursively_gather do |method|
|
|
56
|
-
to_inspect = [self]
|
|
57
|
-
inspected = Set[]
|
|
58
|
-
while not to_inspect.empty?
|
|
59
|
-
elem = to_inspect.pop
|
|
60
|
-
inspected << elem
|
|
61
|
-
if elem.class.methods.include?(all_fields_method_name) or elem.class.methods.include?(all_fields_method_name.to_s)
|
|
62
|
-
elem.class.container_for_fields.each do |field|
|
|
63
|
-
field_val = elem.send(field)
|
|
64
|
-
next if field_val.nil?
|
|
65
|
-
[field_val].flatten.each do |subval|
|
|
66
|
-
to_inspect << subval unless inspected.include?(subval)
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
result = Set[]
|
|
72
|
-
inspected.each do |val|
|
|
73
|
-
result = result + [val.send(method)].flatten if val.class.method_defined?(method)
|
|
74
|
-
end
|
|
75
|
-
result.delete_if{ |a| a.nil? }.flatten
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# returns stdout of the process that terminates first
|
|
80
|
-
# not completely thread safe; cannot be with 1.8.7
|
|
81
|
-
def process_race(*commands)
|
|
82
|
-
parent_thread = Thread.current
|
|
83
|
-
mutex = Mutex.new
|
|
84
|
-
children_threads = []
|
|
85
|
-
spawned_pids = []
|
|
86
|
-
result = nil
|
|
87
|
-
mutex.synchronize do
|
|
88
|
-
commands.each do |command|
|
|
89
|
-
children_threads << Thread.new do
|
|
90
|
-
begin
|
|
91
|
-
sleep 0.1
|
|
92
|
-
pipe = IO.popen command, 'r'
|
|
93
|
-
spawned_pids << pipe.pid
|
|
94
|
-
output = pipe.read
|
|
95
|
-
mutex.synchronize do
|
|
96
|
-
result = output if result.nil?
|
|
97
|
-
parent_thread.run
|
|
98
|
-
end
|
|
99
|
-
rescue => e
|
|
100
|
-
parent_thread.raise e unless e.message == 'die!'
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
Thread.stop
|
|
106
|
-
return result
|
|
107
|
-
ensure
|
|
108
|
-
children_threads.each do |child|
|
|
109
|
-
child.raise 'die!'
|
|
110
|
-
end
|
|
111
|
-
spawned_pids.each do |pid|
|
|
112
|
-
Process.kill 'HUP', pid
|
|
113
|
-
end
|
|
114
|
-
end
|