autocompl 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +4 -4
  2. data/lib/autocompl/repository.rb +11 -1
  3. data/lib/autocompl/version.rb +1 -1
  4. data/test/dummy/log/development.log +467 -0
  5. data/test/dummy/log/test.log +3 -0
  6. data/test/dummy/vendor/bundle/ruby/2.3.0/bin/console +23 -0
  7. data/test/dummy/vendor/bundle/ruby/2.3.0/cache/pg-0.19.0.gem +0 -0
  8. data/test/dummy/vendor/bundle/ruby/2.3.0/cache/pq-0.0.1.gem +0 -0
  9. data/test/dummy/vendor/bundle/ruby/2.3.0/extensions/x86_64-darwin-15/2.3.0-static/pg-0.19.0/gem.build_complete +0 -0
  10. data/test/dummy/vendor/bundle/ruby/2.3.0/extensions/x86_64-darwin-15/2.3.0-static/pg-0.19.0/gem_make.out +78 -0
  11. data/test/dummy/vendor/bundle/ruby/2.3.0/extensions/x86_64-darwin-15/2.3.0-static/pg-0.19.0/mkmf.log +1346 -0
  12. data/test/dummy/vendor/bundle/ruby/2.3.0/extensions/x86_64-darwin-15/2.3.0-static/pg-0.19.0/pg_ext.bundle +0 -0
  13. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/BSDL +22 -0
  14. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ChangeLog +6378 -0
  15. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/Contributors.rdoc +46 -0
  16. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/History.rdoc +363 -0
  17. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/LICENSE +56 -0
  18. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/Manifest.txt +85 -0
  19. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/POSTGRES +23 -0
  20. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/README-OS_X.rdoc +68 -0
  21. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/README-Windows.rdoc +56 -0
  22. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/README.ja.rdoc +14 -0
  23. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/README.rdoc +168 -0
  24. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/Rakefile +216 -0
  25. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/Rakefile.cross +301 -0
  26. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/Makefile +261 -0
  27. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/errorcodes.def +947 -0
  28. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/errorcodes.rb +45 -0
  29. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/errorcodes.txt +467 -0
  30. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/extconf.h +38 -0
  31. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/extconf.rb +112 -0
  32. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/gvl_wrappers.c +13 -0
  33. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/gvl_wrappers.h +257 -0
  34. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/gvl_wrappers.o +0 -0
  35. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg.c +667 -0
  36. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg.h +395 -0
  37. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg.o +0 -0
  38. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_binary_decoder.c +162 -0
  39. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_binary_decoder.o +0 -0
  40. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_binary_encoder.c +162 -0
  41. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_binary_encoder.o +0 -0
  42. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_coder.c +500 -0
  43. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_coder.o +0 -0
  44. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_connection.c +4102 -0
  45. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_connection.o +0 -0
  46. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_copy_coder.c +591 -0
  47. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_copy_coder.o +0 -0
  48. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_errors.c +95 -0
  49. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_errors.o +0 -0
  50. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_ext.bundle +0 -0
  51. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_result.c +1271 -0
  52. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_result.o +0 -0
  53. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_text_decoder.c +421 -0
  54. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_text_decoder.o +0 -0
  55. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_text_encoder.c +683 -0
  56. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_text_encoder.o +0 -0
  57. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_type_map.c +159 -0
  58. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_type_map.o +0 -0
  59. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_type_map_all_strings.c +116 -0
  60. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_type_map_all_strings.o +0 -0
  61. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_type_map_by_class.c +239 -0
  62. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_type_map_by_class.o +0 -0
  63. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_type_map_by_column.c +312 -0
  64. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_type_map_by_column.o +0 -0
  65. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_type_map_by_mri_type.c +284 -0
  66. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_type_map_by_mri_type.o +0 -0
  67. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_type_map_by_oid.c +355 -0
  68. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_type_map_by_oid.o +0 -0
  69. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_type_map_in_ruby.c +299 -0
  70. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/pg_type_map_in_ruby.o +0 -0
  71. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/util.c +149 -0
  72. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/util.h +65 -0
  73. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/util.o +0 -0
  74. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/vc/pg.sln +26 -0
  75. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/vc/pg_18/pg.vcproj +216 -0
  76. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/ext/vc/pg_19/pg_19.vcproj +209 -0
  77. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/lib/pg.rb +64 -0
  78. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/lib/pg/basic_type_mapping.rb +426 -0
  79. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/lib/pg/coder.rb +83 -0
  80. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/lib/pg/connection.rb +271 -0
  81. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/lib/pg/constants.rb +11 -0
  82. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/lib/pg/exceptions.rb +11 -0
  83. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/lib/pg/result.rb +30 -0
  84. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/lib/pg/text_decoder.rb +51 -0
  85. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/lib/pg/text_encoder.rb +35 -0
  86. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/lib/pg/type_map_by_column.rb +15 -0
  87. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/lib/pg_ext.bundle +0 -0
  88. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/array_insert.rb +20 -0
  89. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/async_api.rb +106 -0
  90. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/async_copyto.rb +39 -0
  91. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/async_mixed.rb +56 -0
  92. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/check_conn.rb +21 -0
  93. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/copyfrom.rb +81 -0
  94. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/copyto.rb +19 -0
  95. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/cursor.rb +21 -0
  96. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/disk_usage_report.rb +186 -0
  97. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/issue-119.rb +94 -0
  98. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/losample.rb +69 -0
  99. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/minimal-testcase.rb +17 -0
  100. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/notify_wait.rb +72 -0
  101. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/pg_statistics.rb +294 -0
  102. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/replication_monitor.rb +231 -0
  103. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/test_binary_values.rb +33 -0
  104. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/wal_shipper.rb +434 -0
  105. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/sample/warehouse_partitions.rb +320 -0
  106. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/spec/data/expected_trace.out +26 -0
  107. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/spec/data/random_binary_data +0 -0
  108. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/spec/helpers.rb +352 -0
  109. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/spec/pg/basic_type_mapping_spec.rb +305 -0
  110. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/spec/pg/connection_spec.rb +1676 -0
  111. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/spec/pg/result_spec.rb +449 -0
  112. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/spec/pg/type_map_by_class_spec.rb +138 -0
  113. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/spec/pg/type_map_by_column_spec.rb +222 -0
  114. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/spec/pg/type_map_by_mri_type_spec.rb +136 -0
  115. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/spec/pg/type_map_by_oid_spec.rb +149 -0
  116. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/spec/pg/type_map_in_ruby_spec.rb +164 -0
  117. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/spec/pg/type_map_spec.rb +22 -0
  118. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/spec/pg/type_spec.rb +777 -0
  119. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pg-0.19.0/spec/pg_spec.rb +50 -0
  120. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pq-0.0.1/Gemfile +4 -0
  121. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pq-0.0.1/LICENSE.txt +22 -0
  122. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pq-0.0.1/README.md +76 -0
  123. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pq-0.0.1/Rakefile +1 -0
  124. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pq-0.0.1/bin/console +7 -0
  125. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pq-0.0.1/lib/pq.rb +99 -0
  126. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pq-0.0.1/pq.gemspec +29 -0
  127. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pq-0.0.1/spec/helpers.rb +10 -0
  128. data/test/dummy/vendor/bundle/ruby/2.3.0/gems/pq-0.0.1/spec/queue_spec.rb +84 -0
  129. data/test/dummy/vendor/bundle/ruby/2.3.0/specifications/pg-0.19.0.gemspec +63 -0
  130. data/test/dummy/vendor/bundle/ruby/2.3.0/specifications/pq-0.0.1.gemspec +49 -0
  131. metadata +253 -1
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env rspec
2
+ # encoding: utf-8
3
+
4
+ require_relative 'helpers'
5
+
6
+ require 'pg'
7
+
8
+ describe PG do
9
+
10
+ it "knows what version of the libpq library is loaded", :postgresql_91 do
11
+ expect( PG.library_version ).to be_an( Integer )
12
+ expect( PG.library_version ).to be >= 90100
13
+ end
14
+
15
+ it "can select which of both security libraries to initialize" do
16
+ # This setting does nothing here, because there is already a connection
17
+ # to the server, at this point in time.
18
+ PG.init_openssl(false, true)
19
+ PG.init_openssl(1, 0)
20
+ end
21
+
22
+ it "can select whether security libraries to initialize" do
23
+ # This setting does nothing here, because there is already a connection
24
+ # to the server, at this point in time.
25
+ PG.init_ssl(false)
26
+ PG.init_ssl(1)
27
+ end
28
+
29
+
30
+ it "knows whether or not the library is threadsafe" do
31
+ expect( PG ).to be_threadsafe()
32
+ end
33
+
34
+ it "does have hierarchical error classes" do
35
+ expect( PG::UndefinedTable.ancestors[0,4] ).to eq([
36
+ PG::UndefinedTable,
37
+ PG::SyntaxErrorOrAccessRuleViolation,
38
+ PG::ServerError,
39
+ PG::Error
40
+ ])
41
+
42
+ expect( PG::InvalidSchemaName.ancestors[0,3] ).to eq([
43
+ PG::InvalidSchemaName,
44
+ PG::ServerError,
45
+ PG::Error
46
+ ])
47
+ end
48
+
49
+ end
50
+
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pq.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2016 Andrey Zinenko
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,76 @@
1
+ # PQ [![Build Status](https://travis-ci.org/zinenko/pq.svg?branch=master)](https://travis-ci.org/zinenko/pq)
2
+
3
+ Priority queue implementation [wiki](https://en.wikipedia.org/wiki/Priority_queue#Specialized_heaps)
4
+
5
+ ## How to use:
6
+
7
+ ```
8
+ queue = PQ.new
9
+
10
+ queue << 0
11
+ queue << 1
12
+ queue << -1
13
+ queue << +100500
14
+
15
+ queue.each do |i|
16
+ puts i
17
+ end
18
+
19
+ # => 100500
20
+ # => 1
21
+ # => 0
22
+ # => -1
23
+ ```
24
+
25
+ ## Performance
26
+
27
+ ```
28
+ require 'pq'
29
+ require 'benchmark/ips'
30
+
31
+ class NaiveQueue
32
+ def initialize
33
+ @elements = []
34
+ end
35
+
36
+ def <<(element)
37
+ @elements << element
38
+ end
39
+
40
+ def pop
41
+ last_element_index = @elements.size - 1
42
+ @elements.sort!
43
+ @elements.delete_at(last_element_index)
44
+ end
45
+ end
46
+
47
+ naive_queue = NaiveQueue.new
48
+ priority_queue = PQ.new
49
+
50
+ 100_000.times do |i|
51
+ naive_queue << i
52
+ priority_queue << i
53
+ end
54
+
55
+ Benchmark.ips do |x|
56
+ x.report("naive") { naive_queue.pop }
57
+ x.report("pq") { priority_queue.pop }
58
+
59
+ x.compare!
60
+ end
61
+ ```
62
+
63
+ ## Result
64
+
65
+ ```
66
+ Warming up --------------------------------------
67
+ naive 178.000 i/100ms
68
+ pq 20.738k i/100ms
69
+ Calculating -------------------------------------
70
+ naive 1.888k (± 6.1%) i/s - 9.434k in 5.016797s
71
+ pq 1.243M (± 9.9%) i/s - 6.138M in 5.001097s
72
+
73
+ Comparison:
74
+ pq: 1242931.0 i/s
75
+ naive: 1888.0 i/s - 658.33x slower
76
+ ```
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'pq'
5
+ require 'pry'
6
+
7
+ Pry.start
@@ -0,0 +1,99 @@
1
+ require 'forwardable'
2
+
3
+ class PQ
4
+ VERSION = '0.0.1'
5
+
6
+ extend Forwardable
7
+ include Enumerable
8
+
9
+ def initialize
10
+ @elements = [nil]
11
+ @weight = block_given? ? ->(a) { yield a } : ->(a) { a }
12
+ @mutex = Mutex.new
13
+ end
14
+
15
+ def inspect
16
+ "#<#{self.class.inspect} #{@elements.compact.reverse.map(&:inspect).join(', ')}>"
17
+ end
18
+
19
+ def add(*elements)
20
+ @mutex.synchronize do
21
+ elements.each do |element|
22
+ @elements << element
23
+ up! size
24
+ end
25
+ end
26
+ self
27
+ end
28
+
29
+ alias_method :<<, :add
30
+
31
+ def pop
32
+ @mutex.synchronize do
33
+ swap! 1, size
34
+ max = @elements.pop
35
+ down! 1
36
+ max
37
+ end
38
+ end
39
+
40
+ def any?
41
+ !empty?
42
+ end
43
+
44
+ def empty?
45
+ count.zero?
46
+ end
47
+
48
+ def size
49
+ @elements.size.pred
50
+ end
51
+
52
+ alias_method :count, :size
53
+
54
+ def_delegators :enumerator, :each
55
+
56
+ private
57
+
58
+ def up!(index)
59
+ return if index <= 1
60
+
61
+ parent = (index / 2)
62
+ return if need_swap? parent, index
63
+
64
+ swap! index, parent
65
+ up! parent
66
+ end
67
+
68
+ def down!(index)
69
+ child = (index * 2)
70
+
71
+ return if child > count
72
+
73
+ not_the_last = child < count
74
+ left = @elements[child]
75
+ right = @elements[child.next]
76
+ child += 1 if not_the_last && ((@weight[right] <=> @weight[left]) == 1)
77
+
78
+ return if need_swap? index, child
79
+
80
+ swap! index, child
81
+ down! child
82
+ end
83
+
84
+ def need_swap?(a, b)
85
+ (@weight[@elements[a]] <=> @weight[@elements[b]]) > 0
86
+ end
87
+
88
+ def swap!(a, b)
89
+ @elements[a], @elements[b] = @elements[b], @elements[a]
90
+ end
91
+
92
+ def enumerator
93
+ Enumerator.new do |enum|
94
+ enum << pop while any?
95
+ end
96
+ end
97
+ end
98
+
99
+ PriorityQueue = PQ
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ require 'pq'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'pq'
9
+ spec.version = PQ::VERSION
10
+ spec.authors = ['Andrey Zinenko']
11
+ spec.email = ['andrew@izinenko.ru']
12
+ spec.summary = 'Priority queue / heap implementation'
13
+ spec.description = 'Priority queue / heap implementation'
14
+ spec.homepage = ''
15
+ spec.license = 'MIT'
16
+
17
+ spec.files = `git ls-files -z`.split("\x0")
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ['lib']
21
+
22
+ spec.add_development_dependency 'bundler', '~> 1.7'
23
+ spec.add_development_dependency 'rake', '~> 10.0'
24
+ spec.add_development_dependency 'rspec'
25
+ spec.add_development_dependency 'pry'
26
+
27
+ spec.add_development_dependency 'rubocop', '0.32.1'
28
+ spec.add_development_dependency 'benchmark-ips'
29
+ end
@@ -0,0 +1,10 @@
1
+ require 'pq'
2
+ require 'pry'
3
+ require 'tempfile'
4
+ require 'rspec'
5
+
6
+ Dir['./spec/support/**/*.rb'].each { |f| require f }
7
+
8
+ RSpec.configure do |config|
9
+ config.order = 'random'
10
+ end
@@ -0,0 +1,84 @@
1
+ require 'helpers'
2
+
3
+ describe PQ do
4
+ let(:queue) { PQ.new }
5
+
6
+ describe '#empty? and #any?' do
7
+ specify do
8
+ expect(queue.empty?).to eq(!queue.any?).and eq(true)
9
+ queue.add *(1..2).map { rand 100_500 }
10
+ expect(queue.empty?).to eq(!queue.any?).and eq(false)
11
+ end
12
+ end
13
+
14
+ describe '#size' do
15
+ specify do
16
+ expect(queue.size).to eq(0)
17
+ queue.add *(1..2).map { rand 100_500 }
18
+ expect(queue.size).to eq(2)
19
+ end
20
+ end
21
+
22
+ describe '#count' do
23
+ specify do
24
+ expect(queue.method(:count)).to eq(queue.method(:size))
25
+ end
26
+ end
27
+
28
+ describe '#add' do
29
+ specify do
30
+ expect { queue.add 10, 20, 30, -40 }.to_not raise_error
31
+ expect(queue.to_a).to eq([30, 20, 10, -40])
32
+ end
33
+ end
34
+
35
+ describe '#<<' do
36
+ specify do
37
+ expect(queue.method(:<<)).to eq(queue.method(:add))
38
+ end
39
+ end
40
+
41
+ describe '#pop' do
42
+ specify do
43
+ expect(queue.pop).to eq(nil)
44
+ expect { queue.add 10, 20, 30, -40 }.to_not raise_error
45
+ expect(queue.pop).to eq(30)
46
+ expect(queue.pop).to eq(20)
47
+ expect(queue.pop).to eq(10)
48
+ expect(queue.pop).to eq(-40)
49
+ expect(queue.pop).to eq(nil)
50
+ end
51
+ end
52
+
53
+ describe 'include Enumerable' do
54
+ specify do
55
+ expect(queue.methods).to include(*Enumerable.instance_methods)
56
+ end
57
+ end
58
+
59
+ describe 'comparator' do
60
+ specify 'default' do
61
+ q = PQ.new
62
+ q.add *(1..3)
63
+ expect(q.to_a).to eq([3, 2, 1])
64
+ end
65
+
66
+ specify 'a' do
67
+ q = PQ.new { |a| a }
68
+ q.add *(1..3)
69
+ expect(q.to_a).to eq([3, 2, 1])
70
+ end
71
+
72
+ specify 'b' do
73
+ q = PQ.new(&:-@)
74
+ q.add *(1..3)
75
+ expect(q.to_a).to eq([1, 2, 3])
76
+ end
77
+
78
+ specify 'b' do
79
+ q = PQ.new { |a| a.even? ? a : -a }
80
+ q.add *(1..3)
81
+ expect(q.to_a).to eq([2, 1, 3])
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,63 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # stub: pg 0.19.0 ruby lib
3
+ # stub: ext/extconf.rb
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "pg"
7
+ s.version = "0.19.0"
8
+
9
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
+ s.require_paths = ["lib"]
11
+ s.authors = ["Michael Granger", "Lars Kanis"]
12
+ s.cert_chain = ["-----BEGIN CERTIFICATE-----\nMIIEbDCCAtSgAwIBAgIBATANBgkqhkiG9w0BAQsFADA+MQwwCgYDVQQDDANnZWQx\nGTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw\nHhcNMTYwODIwMTgxNzQyWhcNMTcwODIwMTgxNzQyWjA+MQwwCgYDVQQDDANnZWQx\nGTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw\nggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC/JWGRHO+USzR97vXjkFgt\n83qeNf2KHkcvrRTSnR64i6um/ziin0I0oX23H7VYrDJC9A/uoUa5nGRJS5Zw/+wW\nENcvWVZS4iUzi4dsYJGY6yEOsXh2CcF46+QevV8iE+UmbkU75V7Dy1JCaUOyizEt\nTH5UHsOtUU7k9TYARt/TgYZKuaoAMZZd5qyVqhF1vV+7/Qzmp89NGflXf2xYP26a\n4MAX2qqKX/FKXqmFO+AGsbwYTEds1mksBF3fGsFgsQWxftG8GfZQ9+Cyu2+l1eOw\ncZ+lPcg834G9DrqW2zhqUoLr1MTly4pqxYGb7XoDhoR7dd1kFE2a067+DzWC/ADt\n+QkcqWUm5oh1fN0eqr7NsZlVJDulFgdiiYPQiIN7UNsii4Wc9aZqBoGcYfBeQNPZ\nsoo/6za/bWajOKUmDhpqvaiRv9EDpVLzuj53uDoukMMwxCMfgb04+ckQ0t2G7wqc\n/D+K9JW9DDs3Yjgv9k4h7YMhW5gftosd+NkNC/+Y2CkCAwEAAaN1MHMwCQYDVR0T\nBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFHKN/nkRusdqCJEuq3lgB3fJvyTg\nMBwGA1UdEQQVMBOBEWdlZEBGYWVyaWVNVUQub3JnMBwGA1UdEgQVMBOBEWdlZEBG\nYWVyaWVNVUQub3JnMA0GCSqGSIb3DQEBCwUAA4IBgQAPJzKiT0zBU7kpqe0aS2qb\nFI0PJ4y5I8buU4IZGUD5NEt/N7pZNfOyBxkrZkXhS44Fp+xwBH5ebLbq/WY78Bqd\ndb0z6ZgW4LMYMpWFfbXsRbd9TU2f52L8oMAhxOvF7Of5qJMVWuFQ8FPagk2iHrdH\ninYLQagqAF6goWTXgAJCdPd6SNeeSNqA6vlY7CV1Jh5kfNJJ6xu/CVij1GzCLu/5\nDMOr26DBv+qLJRRC/2h34uX71q5QgeOyxvMg+7V3u/Q06DXyQ2VgeeqiwDFFpEH0\nPFkdPO6ZqbTRcLfNH7mFgCBJjsfSjJrn0sPBlYyOXgCoByfZnZyrIMH/UY+lgQqS\n6Von1VDsfQm0eJh5zYZD64ZF86phSR7mUX3mXItwH04HrZwkWpvgd871DZVR3i1n\nw8aNA5re5+Rt/Vvjxj5AcEnZnZiz5x959NaddQocX32Z1unHw44pzRNUur1GInfW\np4vpx2kUSFSAGjtCbDGTNV2AH8w9OU4xEmNz8c5lyoA=\n-----END CERTIFICATE-----\n"]
13
+ s.date = "2016-09-22"
14
+ s.description = "Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/].\n\nIt works with {PostgreSQL 9.1 and later}[http://www.postgresql.org/support/versioning/].\n\nA small example usage:\n\n #!/usr/bin/env ruby\n\n require 'pg'\n\n # Output a table of current connections to the DB\n conn = PG.connect( dbname: 'sales' )\n conn.exec( \"SELECT * FROM pg_stat_activity\" ) do |result|\n puts \" PID | User | Query\"\n result.each do |row|\n puts \" %7d | %-16s | %s \" %\n row.values_at('procpid', 'usename', 'current_query')\n end\n end"
15
+ s.email = ["ged@FaerieMUD.org", "lars@greiz-reinsdorf.de"]
16
+ s.extensions = ["ext/extconf.rb"]
17
+ s.extra_rdoc_files = ["Contributors.rdoc", "History.rdoc", "Manifest.txt", "README-OS_X.rdoc", "README-Windows.rdoc", "README.ja.rdoc", "README.rdoc", "ext/errorcodes.txt", "POSTGRES", "LICENSE", "ext/gvl_wrappers.c", "ext/pg.c", "ext/pg_binary_decoder.c", "ext/pg_binary_encoder.c", "ext/pg_coder.c", "ext/pg_connection.c", "ext/pg_copy_coder.c", "ext/pg_errors.c", "ext/pg_result.c", "ext/pg_text_decoder.c", "ext/pg_text_encoder.c", "ext/pg_type_map.c", "ext/pg_type_map_all_strings.c", "ext/pg_type_map_by_class.c", "ext/pg_type_map_by_column.c", "ext/pg_type_map_by_mri_type.c", "ext/pg_type_map_by_oid.c", "ext/pg_type_map_in_ruby.c", "ext/util.c"]
18
+ s.files = ["Contributors.rdoc", "History.rdoc", "LICENSE", "Manifest.txt", "POSTGRES", "README-OS_X.rdoc", "README-Windows.rdoc", "README.ja.rdoc", "README.rdoc", "ext/errorcodes.txt", "ext/extconf.rb", "ext/gvl_wrappers.c", "ext/pg.c", "ext/pg_binary_decoder.c", "ext/pg_binary_encoder.c", "ext/pg_coder.c", "ext/pg_connection.c", "ext/pg_copy_coder.c", "ext/pg_errors.c", "ext/pg_result.c", "ext/pg_text_decoder.c", "ext/pg_text_encoder.c", "ext/pg_type_map.c", "ext/pg_type_map_all_strings.c", "ext/pg_type_map_by_class.c", "ext/pg_type_map_by_column.c", "ext/pg_type_map_by_mri_type.c", "ext/pg_type_map_by_oid.c", "ext/pg_type_map_in_ruby.c", "ext/util.c"]
19
+ s.homepage = "https://bitbucket.org/ged/ruby-pg"
20
+ s.licenses = ["BSD-3-Clause"]
21
+ s.rdoc_options = ["--main", "README.rdoc"]
22
+ s.required_ruby_version = Gem::Requirement.new(">= 2.0.0")
23
+ s.rubygems_version = "2.5.1"
24
+ s.summary = "Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/]"
25
+
26
+ s.installed_by_version = "2.5.1" if s.respond_to? :installed_by_version
27
+
28
+ if s.respond_to? :specification_version then
29
+ s.specification_version = 4
30
+
31
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
32
+ s.add_development_dependency(%q<hoe-mercurial>, ["~> 1.4"])
33
+ s.add_development_dependency(%q<hoe-deveiate>, ["~> 0.7"])
34
+ s.add_development_dependency(%q<hoe-highline>, ["~> 0.2"])
35
+ s.add_development_dependency(%q<rdoc>, ["~> 4.0"])
36
+ s.add_development_dependency(%q<rake-compiler>, ["~> 0.9"])
37
+ s.add_development_dependency(%q<rake-compiler-dock>, ["~> 0.5"])
38
+ s.add_development_dependency(%q<hoe>, ["~> 3.12"])
39
+ s.add_development_dependency(%q<hoe-bundler>, ["~> 1.0"])
40
+ s.add_development_dependency(%q<rspec>, ["~> 3.0"])
41
+ else
42
+ s.add_dependency(%q<hoe-mercurial>, ["~> 1.4"])
43
+ s.add_dependency(%q<hoe-deveiate>, ["~> 0.7"])
44
+ s.add_dependency(%q<hoe-highline>, ["~> 0.2"])
45
+ s.add_dependency(%q<rdoc>, ["~> 4.0"])
46
+ s.add_dependency(%q<rake-compiler>, ["~> 0.9"])
47
+ s.add_dependency(%q<rake-compiler-dock>, ["~> 0.5"])
48
+ s.add_dependency(%q<hoe>, ["~> 3.12"])
49
+ s.add_dependency(%q<hoe-bundler>, ["~> 1.0"])
50
+ s.add_dependency(%q<rspec>, ["~> 3.0"])
51
+ end
52
+ else
53
+ s.add_dependency(%q<hoe-mercurial>, ["~> 1.4"])
54
+ s.add_dependency(%q<hoe-deveiate>, ["~> 0.7"])
55
+ s.add_dependency(%q<hoe-highline>, ["~> 0.2"])
56
+ s.add_dependency(%q<rdoc>, ["~> 4.0"])
57
+ s.add_dependency(%q<rake-compiler>, ["~> 0.9"])
58
+ s.add_dependency(%q<rake-compiler-dock>, ["~> 0.5"])
59
+ s.add_dependency(%q<hoe>, ["~> 3.12"])
60
+ s.add_dependency(%q<hoe-bundler>, ["~> 1.0"])
61
+ s.add_dependency(%q<rspec>, ["~> 3.0"])
62
+ end
63
+ end