adsl 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|