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.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -20
  3. data/README.md +14 -21
  4. data/bin/adsl-verify +8 -8
  5. data/lib/adsl.rb +3 -0
  6. data/lib/adsl/adsl.rb +3 -0
  7. data/lib/adsl/ds/data_store_spec.rb +339 -0
  8. data/lib/adsl/extract/instrumenter.rb +206 -0
  9. data/lib/adsl/extract/meta.rb +33 -0
  10. data/lib/adsl/extract/rails/action_block_builder.rb +233 -0
  11. data/lib/adsl/extract/rails/action_instrumenter.rb +400 -0
  12. data/lib/adsl/extract/rails/action_runner.rb +57 -0
  13. data/lib/adsl/extract/rails/active_record_metaclass_generator.rb +555 -0
  14. data/lib/adsl/extract/rails/callback_chain_simulator.rb +135 -0
  15. data/lib/adsl/extract/rails/invariant_extractor.rb +48 -0
  16. data/lib/adsl/extract/rails/invariant_instrumenter.rb +70 -0
  17. data/lib/adsl/extract/rails/other_meta.rb +57 -0
  18. data/lib/adsl/extract/rails/rails_extractor.rb +211 -0
  19. data/lib/adsl/extract/rails/rails_instrumentation_test_case.rb +34 -0
  20. data/lib/adsl/extract/rails/rails_special_gem_instrumentation.rb +120 -0
  21. data/lib/adsl/extract/rails/rails_test_helper.rb +140 -0
  22. data/lib/adsl/extract/sexp_utils.rb +54 -0
  23. data/lib/adsl/fol/first_order_logic.rb +261 -0
  24. data/lib/adsl/parser/adsl_parser.racc +159 -0
  25. data/lib/{parser → adsl/parser}/adsl_parser.rex +4 -4
  26. data/lib/{parser → adsl/parser}/adsl_parser.rex.rb +6 -6
  27. data/lib/adsl/parser/adsl_parser.tab.rb +1031 -0
  28. data/lib/adsl/parser/ast_nodes.rb +1410 -0
  29. data/lib/adsl/railtie.rb +67 -0
  30. data/lib/adsl/spass/bin.rb +230 -0
  31. data/lib/{spass → adsl/spass}/ruby_extensions.rb +0 -0
  32. data/lib/adsl/spass/spass_ds_extensions.rb +931 -0
  33. data/lib/adsl/spass/spass_translator.rb +393 -0
  34. data/lib/adsl/spass/util.rb +13 -0
  35. data/lib/adsl/util/csv_hash_formatter.rb +94 -0
  36. data/lib/adsl/util/general.rb +228 -0
  37. data/lib/adsl/util/test_helper.rb +71 -0
  38. data/lib/adsl/verification/formula_generators.rb +231 -0
  39. data/lib/adsl/verification/instrumentation_filter.rb +50 -0
  40. data/lib/adsl/verification/invariant.rb +19 -0
  41. data/lib/adsl/verification/rails_verification.rb +33 -0
  42. data/lib/adsl/verification/utils.rb +20 -0
  43. data/lib/adsl/verification/verification_case.rb +13 -0
  44. data/test/integration/rails/rails_branch_verification_test.rb +112 -0
  45. data/test/integration/rails/rails_verification_test.rb +253 -0
  46. data/test/integration/spass/basic_translation_test.rb +563 -0
  47. data/test/integration/spass/control_flow_translation_test.rb +421 -0
  48. data/test/unit/adsl/ds/data_store_spec_test.rb +54 -0
  49. data/test/unit/adsl/extract/instrumenter_test.rb +103 -0
  50. data/test/unit/adsl/extract/meta_test.rb +142 -0
  51. data/test/unit/adsl/extract/rails/action_block_builder_test.rb +178 -0
  52. data/test/unit/adsl/extract/rails/action_instrumenter_test.rb +68 -0
  53. data/test/unit/adsl/extract/rails/active_record_metaclass_generator_test.rb +336 -0
  54. data/test/unit/adsl/extract/rails/callback_chain_simulator_test.rb +76 -0
  55. data/test/unit/adsl/extract/rails/invariant_extractor_test.rb +92 -0
  56. data/test/unit/adsl/extract/rails/rails_extractor_test.rb +1380 -0
  57. data/test/unit/adsl/extract/rails/rails_test_helper_test.rb +25 -0
  58. data/test/unit/adsl/extract/sexp_utils_test.rb +100 -0
  59. data/test/unit/adsl/fol/first_order_logic_test.rb +227 -0
  60. data/test/unit/adsl/parser/action_parser_test.rb +1040 -0
  61. data/test/unit/adsl/parser/ast_nodes_test.rb +359 -0
  62. data/test/unit/adsl/parser/class_parser_test.rb +288 -0
  63. data/test/unit/adsl/parser/general_parser_test.rb +67 -0
  64. data/test/unit/adsl/parser/invariant_parser_test.rb +432 -0
  65. data/test/unit/adsl/parser/parser_util_test.rb +126 -0
  66. data/test/unit/adsl/spass/bin_test.rb +65 -0
  67. data/test/unit/adsl/spass/ruby_extensions_test.rb +39 -0
  68. data/test/unit/adsl/spass/spass_ds_extensions_test.rb +7 -0
  69. data/test/unit/adsl/spass/spass_translator_test.rb +342 -0
  70. data/test/unit/adsl/util/csv_hash_formatter_test.rb +68 -0
  71. data/test/unit/adsl/util/general_test.rb +303 -0
  72. data/test/unit/adsl/util/test_helper_test.rb +120 -0
  73. data/test/unit/adsl/verification/formula_generators_test.rb +200 -0
  74. data/test/unit/adsl/verification/instrumentation_filter_test.rb +39 -0
  75. data/test/unit/adsl/verification/utils_test.rb +39 -0
  76. data/test/unit/adsl/verification/verification_case_test.rb +8 -0
  77. metadata +229 -29
  78. data/lib/ds/data_store_spec.rb +0 -292
  79. data/lib/fol/first_order_logic.rb +0 -260
  80. data/lib/parser/adsl_ast.rb +0 -779
  81. data/lib/parser/adsl_parser.racc +0 -151
  82. data/lib/parser/adsl_parser.tab.rb +0 -976
  83. data/lib/parser/dsdl_parser.rex.rb +0 -196
  84. data/lib/parser/dsdl_parser.tab.rb +0 -976
  85. data/lib/spass/bin.rb +0 -164
  86. data/lib/spass/spass_ds_extensions.rb +0 -870
  87. data/lib/spass/spass_translator.rb +0 -388
  88. data/lib/spass/util.rb +0 -11
  89. data/lib/util/csv_hash_formatter.rb +0 -47
  90. data/lib/util/test_helper.rb +0 -33
  91. data/lib/util/util.rb +0 -114
@@ -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