adsl 0.0.3 → 0.1.0

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