Issues (116)

bin/random_rubis (5 issues)

1
#!/usr/bin/env ruby
0 ignored issues
show
Missing frozen string literal comment.
Loading history...
2
3
# Get and print the seed which is used
4
seed = ::Random.new_seed
5
$stderr.puts "SEED #{seed}"
0 ignored issues
show
Use warn instead of $stderr.puts to allow such output to be disabled.
Loading history...
6
::Random.srand seed
7
8
require 'nose'
9
10
# Record times for the longest running sets of methods
11
times = {
12
  indexes_for_workload: 0,
13
  query_costs: 0,
14
  update_costs: 0,
15
  setup_model: 0,
16
  solve: 0
17
}
18
NoSE::Timer.enable do |_cls, method, time|
19
  times[method] = time if times.key? method
20
end
21
22
factor = ARGV[0].to_i
23
24
# Create a random workload generator
25
network = NoSE::Random::WattsStrogatzNetwork.new(nodes_nb: 7 * factor)
26
workload = NoSE::Workload.new
27
network.entities.each { |entity| workload << entity }
28
sgen = NoSE::Random::StatementGenerator.new workload.model
29
30
# Add random queries
31
1.upto(30 * factor).each do |i|
32
  path_length = rand > 0.9 ? 2 : 1
33
  path_length = 3 if i <= factor
34
35
  r = rand
36
  conditions = if r > 0.95
37
                 3
38
               elsif r > 0.75
39
                 2
40
               else
41
                 1
42
               end
43
  q = sgen.random_query path_length,
44
                        3,
45
                        conditions,
46
                        rand > 0.9
47
  $stderr.puts q.unparse
0 ignored issues
show
Use warn instead of $stderr.puts to allow such output to be disabled.
Loading history...
48
  workload.add_statement q, 10
49
end
50
51
# Add random updates
52
1.upto(3 * factor).each do
53
  u = sgen.random_update 1, 2, 1
54
  $stderr.puts u.text
0 ignored issues
show
Use warn instead of $stderr.puts to allow such output to be disabled.
Loading history...
55
  workload.add_statement u
56
end
57
58
# Add random inserts
59
1.upto(5 * factor).each do
60
  i = sgen.random_insert
61
  $stderr.puts i.text
0 ignored issues
show
Use warn instead of $stderr.puts to allow such output to be disabled.
Loading history...
62
  workload.add_statement i
63
end
64
65
# Uncomment the lines below to enable profiling
66
# (along with the lines above to save the output)
67
# require 'ruby-prof'
68
# Parallel.instance_variable_set(:@processor_count, 0)
69
# RubyProf.start
70
71
# Execute NoSE for the random workload and report the time
72
start = Time.now.utc
73
indexes = NoSE::IndexEnumerator.new(workload).indexes_for_workload.to_a
74
search = NoSE::Search::Search.new(workload,
75
                                  NoSE::Cost::RequestCountCost.new)
76
search.search_overlap(indexes)
77
elapsed = Time.now.utc - start
78
79
# Output the timing values
80
total = 0
81
times[:costs] = times.delete(:query_costs) + times.delete(:update_costs)
82
times.each do |key, time|
83
  puts "#{key},#{time}"
84
  total += time
85
end
86
puts "other,#{elapsed - total}"
87
88
# Uncomment the lines below to save profile output
89
# (along with the lines above to enable profiling)
90
# result = RubyProf.stop
91
# result.eliminate_methods!([
92
#   /NoSE::Field#hash/,
93
#   /Range#/,
94
#   /Array#/,
95
#   /Set#/,
96
#   /Hash#/,
97
#   /Integer#downto/,
98
#   /Hashids#/,
99
#   /String#/,
100
#   /Enumerable#/,
101
#   /Integer#times/,
102
#   /Class#new/
103
# ])
104
# printer = RubyProf::CallTreePrinter.new(result)
105
# printer.print(File.open('prof.out', 'w'))
106