depq 0.6 → 0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +7 -0
  2. data/README +27 -27
  3. data/lib/depq.rb +66 -43
  4. data/sample/dhondt.rb +53 -0
  5. data/test/test-depq.rb +35 -31
  6. metadata +14 -19
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e79a116c9cd6b58578bf23c9100e7bc0f5e19a21
4
+ data.tar.gz: b4a2db49fd3317bd8db9e9b523a032f462ed7c76
5
+ SHA512:
6
+ metadata.gz: 9c8d68e0287f4057d239f18ff810f9aea3f1f0c518e0c9f4a7d340e528a31d599a1a7c1918d65941232ff86ed4742eb8c02472fd3e65e006866fba18f5a2c1ee
7
+ data.tar.gz: 592cee5adb6c096fa464e4725d43d51a5bb53b8bdd179b8c51b6d6dc01a39471ea46a6cb02d85ddc8b2b9345816836e34d3e65ec7009836b080bba7a769a6489
data/README CHANGED
@@ -8,9 +8,9 @@ depq is double-ended stable priority queue with priority update operation implem
8
8
  * priority - you can get a value with minimum priority
9
9
  * double-ended - you can get a value with maximum priority too
10
10
  * stable - you will get the value inserted first with minimum/maximum priority
11
- * priority update - usable for Dijkstra's shortest path algorithm and various graph algorithms
11
+ * priority update - you can change the priority of inserted values (usable for Dijkstra's shortest path algorithm and various graph algorithms)
12
12
  * implicit heap - compact heap representation using array. most operations are O(log n) at worst
13
- * iterator operations: nlargest, nsmallest and merge
13
+ * several utility methods: nlargest, nsmallest, merge, astar_search
14
14
 
15
15
  == Install
16
16
 
@@ -18,12 +18,8 @@ depq is double-ended stable priority queue with priority update operation implem
18
18
 
19
19
  == Links
20
20
 
21
- * ((<reference manual|URL:http://depq.rubyforge.org/rdoc/classes/Depq.html>))
22
- * ((<home page on rubyforge|URL:http://depq.rubyforge.org/>))
23
- * ((<project info on rubyforge|URL:http://rubyforge.org/projects/depq/>))
24
- * ((<depq on rubygems.org|URL:http://rubygems.org/gems/depq>))
25
21
  * ((<source repository on github|URL:http://github.com/akr/depq>))
26
- * ((<raa entry|URL:http://raa.ruby-lang.org/project/depq/>))
22
+ * ((<depq on rubygems.org|URL:http://rubygems.org/gems/depq>))
27
23
 
28
24
  == Introduction
29
25
 
@@ -182,26 +178,30 @@ Tanaka Akira <akr@fsij.org>
182
178
  == License
183
179
 
184
180
  Redistribution and use in source and binary forms, with or without
185
- modification, are permitted provided that the following conditions are met:
186
-
187
- (1) Redistributions of source code must retain the above copyright notice, this
188
- list of conditions and the following disclaimer.
189
- (2) Redistributions in binary form must reproduce the above copyright notice,
190
- this list of conditions and the following disclaimer in the documentation
191
- and/or other materials provided with the distribution.
192
- (3) The name of the author may not be used to endorse or promote products
193
- derived from this software without specific prior written permission.
194
-
195
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
196
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
197
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
198
- EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
199
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
200
- OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
201
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
202
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
203
- IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
204
- OF SUCH DAMAGE.
181
+ modification, are permitted provided that the following conditions
182
+ are met:
183
+
184
+ 1. Redistributions of source code must retain the above copyright
185
+ notice, this list of conditions and the following disclaimer.
186
+ 2. Redistributions in binary form must reproduce the above
187
+ copyright notice, this list of conditions and the following
188
+ disclaimer in the documentation and/or other materials provided
189
+ with the distribution.
190
+ 3. The name of the author may not be used to endorse or promote
191
+ products derived from this software without specific prior
192
+ written permission.
193
+
194
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
195
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
196
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
197
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
198
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
199
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
200
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
201
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
202
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
203
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
204
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
205
205
 
206
206
  (The modified BSD licence)
207
207
 
@@ -3,26 +3,30 @@
3
3
  # Copyright (C) 2009-2011 Tanaka Akira <akr@fsij.org>
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
6
- # modification, are permitted provided that the following conditions are met:
6
+ # modification, are permitted provided that the following conditions
7
+ # are met:
7
8
  #
8
- # 1. Redistributions of source code must retain the above copyright notice, this
9
- # list of conditions and the following disclaimer.
10
- # 2. Redistributions in binary form must reproduce the above copyright notice,
11
- # this list of conditions and the following disclaimer in the documentation
12
- # and/or other materials provided with the distribution.
13
- # 3. The name of the author may not be used to endorse or promote products
14
- # derived from this software without specific prior written permission.
9
+ # 1. Redistributions of source code must retain the above copyright
10
+ # notice, this list of conditions and the following disclaimer.
11
+ # 2. Redistributions in binary form must reproduce the above
12
+ # copyright notice, this list of conditions and the following
13
+ # disclaimer in the documentation and/or other materials provided
14
+ # with the distribution.
15
+ # 3. The name of the author may not be used to endorse or promote
16
+ # products derived from this software without specific prior
17
+ # written permission.
15
18
  #
16
- # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17
- # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18
- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19
- # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
21
- # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
- # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
24
- # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
25
- # OF SUCH DAMAGE.
19
+ # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
20
+ # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
23
+ # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
25
+ # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27
+ # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
28
+ # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
29
+ # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
30
 
27
31
  # = Depq - Double-Ended Priority Queue
28
32
  #
@@ -295,7 +299,7 @@ class Depq
295
299
  def priority
296
300
  if in_queue?
297
301
  q = depq_or_subpriority()
298
- priority, subpriority = q.send(:internal_get_priority, self)
302
+ priority, _subpriority = q.send(:internal_get_priority, self)
299
303
  priority
300
304
  else
301
305
  index_or_priority()
@@ -306,7 +310,7 @@ class Depq
306
310
  def subpriority
307
311
  if in_queue?
308
312
  q = depq_or_subpriority()
309
- priority, subpriority = q.send(:internal_get_priority, self)
313
+ _priority, subpriority = q.send(:internal_get_priority, self)
310
314
  subpriority
311
315
  else
312
316
  depq_or_subpriority()
@@ -441,6 +445,26 @@ class Depq
441
445
  ARY_SLICE_SIZE = 3
442
446
  # :startdoc:
443
447
 
448
+ def get_entry_ps(i)
449
+ get_entry(i).values_at(1, 2)
450
+ end
451
+ private :get_entry_ps
452
+
453
+ def get_entry_e(i)
454
+ get_entry(i)[0]
455
+ end
456
+ private :get_entry_e
457
+
458
+ def get_entry_p(i)
459
+ get_entry(i)[1]
460
+ end
461
+ private :get_entry_p
462
+
463
+ def get_entry_s(i)
464
+ get_entry(i)[2]
465
+ end
466
+ private :get_entry_s
467
+
444
468
  def get_entry(i)
445
469
  locator = @ary[i*ARY_SLICE_SIZE+0]
446
470
  priority = @ary[i*ARY_SLICE_SIZE+1]
@@ -535,7 +559,7 @@ class Depq
535
559
 
536
560
  def check_locator(loc)
537
561
  if !self.equal?(loc.depq) ||
538
- !get_entry(loc.send(:index))[0].equal?(loc)
562
+ !get_entry_e(loc.send(:index)).equal?(loc)
539
563
  raise ArgumentError, "unexpected locator"
540
564
  end
541
565
  end
@@ -689,7 +713,7 @@ class Depq
689
713
 
690
714
  def internal_get_priority(loc)
691
715
  check_locator(loc)
692
- locator, priority, subpriority = get_entry(loc.send(:index))
716
+ priority, subpriority = get_entry_ps(loc.send(:index))
693
717
  [priority, subpriority]
694
718
  end
695
719
  private :internal_get_priority
@@ -968,7 +992,7 @@ class Depq
968
992
  check_locator(loc)
969
993
  index = loc.send(:index)
970
994
  if @heapsize <= index
971
- _, priority, subpriority = get_entry(index)
995
+ priority, subpriority = get_entry_ps(index)
972
996
  last = self.size - 1
973
997
  if index != last
974
998
  loc2, priority2, subpriority2 = get_entry(last)
@@ -1128,7 +1152,7 @@ class Depq
1128
1152
  #
1129
1153
  def delete_unspecified_locator
1130
1154
  return nil if empty?
1131
- loc, _ = get_entry(self.size-1)
1155
+ loc = get_entry_e(self.size-1)
1132
1156
  delete_locator(loc)
1133
1157
  end
1134
1158
 
@@ -1594,13 +1618,12 @@ class Depq
1594
1618
  end
1595
1619
 
1596
1620
  def mm_find_top_loc
1597
- loc, _ = get_entry(0)
1598
- loc
1621
+ get_entry_e(0)
1599
1622
  end
1600
1623
 
1601
1624
  def mm_delete_loc(loc, upper)
1602
1625
  i = loc.send(:index)
1603
- _, priority, subpriority = get_entry(i)
1626
+ priority, subpriority = get_entry_ps(i)
1604
1627
  last = self.size - 1
1605
1628
  loc.send(:internal_deleted, priority, subpriority)
1606
1629
  el, pl, sl = delete_last_entry
@@ -1666,8 +1689,8 @@ class Depq
1666
1689
  end
1667
1690
 
1668
1691
  def min_upper?(i, j)
1669
- ei, pi, si = get_entry(i)
1670
- ej, pj, sj = get_entry(j)
1692
+ pi, si = get_entry_ps(i)
1693
+ pj, sj = get_entry_ps(j)
1671
1694
  min_compare(pi, si, pj, sj) <= 0
1672
1695
  end
1673
1696
 
@@ -1710,8 +1733,8 @@ class Depq
1710
1733
  end
1711
1734
 
1712
1735
  def max_upper?(i, j)
1713
- ei, pi, si = get_entry(i)
1714
- ej, pj, sj = get_entry(j)
1736
+ pi, si = get_entry_ps(i)
1737
+ pj, sj = get_entry_ps(j)
1715
1738
  max_compare(pi, si, pj, sj) >= 0
1716
1739
  end
1717
1740
 
@@ -1761,14 +1784,14 @@ class Depq
1761
1784
  def itv_child2_maxside(i) i &= ~1; i*2+5 end
1762
1785
 
1763
1786
  def pcmp(i, j)
1764
- ei, pi, si = get_entry(i)
1765
- ej, pj, sj = get_entry(j)
1787
+ pi = get_entry_p(i)
1788
+ pj = get_entry_p(j)
1766
1789
  compare_priority(pi, pj)
1767
1790
  end
1768
1791
 
1769
1792
  def scmp(i, j)
1770
- ei, pi, si = get_entry(i)
1771
- ej, pj, sj = get_entry(j)
1793
+ si = get_entry_s(i)
1794
+ sj = get_entry_s(j)
1772
1795
  si <=> sj
1773
1796
  end
1774
1797
 
@@ -1841,7 +1864,7 @@ class Depq
1841
1864
  k = k1
1842
1865
  elsif pc > 0
1843
1866
  k = k2
1844
- elsif (sc = scmp(k1, k2)) <= 0
1867
+ elsif scmp(k1, k2) <= 0
1845
1868
  k = k1
1846
1869
  else
1847
1870
  k = k2
@@ -1872,7 +1895,7 @@ class Depq
1872
1895
  k = k2
1873
1896
  elsif pc > 0
1874
1897
  k = k1
1875
- elsif (sc = scmp(k1, k2)) <= 0
1898
+ elsif scmp(k1, k2) <= 0
1876
1899
  k = k1
1877
1900
  else
1878
1901
  k = k2
@@ -1986,7 +2009,7 @@ class Depq
1986
2009
 
1987
2010
  def itv_update_prio(loc, prio, subprio)
1988
2011
  i = loc.send(:index)
1989
- ei, pi, si = get_entry(i)
2012
+ ei = get_entry_e(i)
1990
2013
  set_entry(i, ei, prio, subprio)
1991
2014
  range = 0...self.size
1992
2015
  itv_adjust(i, range)
@@ -2012,15 +2035,15 @@ class Depq
2012
2035
  when 0
2013
2036
  [nil, nil]
2014
2037
  when 1
2015
- e0, p0, s0 = get_entry(0)
2038
+ e0 = get_entry_e(0)
2016
2039
  [e0, e0]
2017
2040
  else
2018
2041
  if pcmp(0, 1) == 0
2019
- e0, p0, s0 = get_entry(0)
2042
+ e0 = get_entry_e(0)
2020
2043
  [e0, e0]
2021
2044
  else
2022
- e0, p0, s0 = get_entry(0)
2023
- e1, p1, s1 = get_entry(1)
2045
+ e0 = get_entry_e(0)
2046
+ e1 = get_entry_e(1)
2024
2047
  [e0, e1]
2025
2048
  end
2026
2049
  end
@@ -2036,7 +2059,7 @@ class Depq
2036
2059
 
2037
2060
  def itv_delete_loc(loc)
2038
2061
  i = loc.send(:index)
2039
- _, priority, subpriority = get_entry(i)
2062
+ priority, subpriority = get_entry_ps(i)
2040
2063
  last = self.size - 1
2041
2064
  loc.send(:internal_deleted, priority, subpriority)
2042
2065
  el, pl, sl = delete_last_entry
@@ -0,0 +1,53 @@
1
+ # D'Hondt method
2
+ #
3
+ # usage:
4
+ # ruby -Ilib sample/dhondt.rb number-of-seats party1:votes1 party2:votes2 ...
5
+ #
6
+ # example:
7
+ # % ruby -Ilib sample/dhondt.rb 10 A:230000 B:120000 C:90000 D:30000
8
+ # A 230000 5
9
+ # B 120000 3
10
+ # C 90000 2
11
+ # D 30000 0
12
+
13
+ require 'depq'
14
+
15
+ def dhondt(number_of_seats, number_of_votes_for_parties)
16
+ q = Depq.new
17
+ number_of_votes_for_parties.each {|party, votes|
18
+ seats_gotten = 0
19
+ q.insert [party, votes, seats_gotten], Rational(votes, seats_gotten+1)
20
+ }
21
+ number_of_seats.times {
22
+ (party, votes, seats_gotten), priority = q.delete_max_priority
23
+ if !q.empty? && q.find_min_priority[1] == priority
24
+ # There may be two or more parties with maximum priority.
25
+ # Random choice should be implemented here...
26
+ raise
27
+ end
28
+ seats_gotten += 1
29
+ q.insert [party, votes, seats_gotten], Rational(votes, seats_gotten+1)
30
+ }
31
+ h = {}
32
+ until q.empty?
33
+ party, votes, seats_gotten = q.delete_max
34
+ h[party] = seats_gotten
35
+ end
36
+ h
37
+ end
38
+
39
+ number_of_seats = ARGV.shift.to_i
40
+ number_of_votes_for_parties = []
41
+ ARGV.each {|arg|
42
+ /\A(.*):(\d+)\z/ =~ arg
43
+ party = $1
44
+ votes = $2.to_i
45
+ number_of_votes_for_parties << [party, votes]
46
+ }
47
+
48
+ result = dhondt(number_of_seats, number_of_votes_for_parties)
49
+
50
+ number_of_votes_for_parties.each {|party, votes|
51
+ seats_gotten = result[party]
52
+ puts "#{party}\t#{votes}\t#{seats_gotten}"
53
+ }
@@ -3,26 +3,30 @@
3
3
  # Copyright (C) 2009 Tanaka Akira <akr@fsij.org>
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
6
- # modification, are permitted provided that the following conditions are met:
6
+ # modification, are permitted provided that the following conditions
7
+ # are met:
7
8
  #
8
- # 1. Redistributions of source code must retain the above copyright notice, this
9
- # list of conditions and the following disclaimer.
10
- # 2. Redistributions in binary form must reproduce the above copyright notice,
11
- # this list of conditions and the following disclaimer in the documentation
12
- # and/or other materials provided with the distribution.
13
- # 3. The name of the author may not be used to endorse or promote products
14
- # derived from this software without specific prior written permission.
9
+ # 1. Redistributions of source code must retain the above copyright
10
+ # notice, this list of conditions and the following disclaimer.
11
+ # 2. Redistributions in binary form must reproduce the above
12
+ # copyright notice, this list of conditions and the following
13
+ # disclaimer in the documentation and/or other materials provided
14
+ # with the distribution.
15
+ # 3. The name of the author may not be used to endorse or promote
16
+ # products derived from this software without specific prior
17
+ # written permission.
15
18
  #
16
- # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17
- # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18
- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19
- # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
21
- # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
- # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
24
- # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
25
- # OF SUCH DAMAGE.
19
+ # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
20
+ # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
23
+ # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
25
+ # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27
+ # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
28
+ # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
29
+ # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
30
 
27
31
  require 'depq'
28
32
  require 'test/unit'
@@ -45,12 +49,12 @@ class Depq
45
49
  end
46
50
 
47
51
  def min_validation
48
- mm_validation &method(:min_upper?)
52
+ mm_validation(&method(:min_upper?))
49
53
  end
50
54
  MinMode[:validation] = :min_validation
51
55
 
52
56
  def max_validation
53
- mm_validation &method(:max_upper?)
57
+ mm_validation(&method(:max_upper?))
54
58
  end
55
59
  MaxMode[:validation] = :max_validation
56
60
 
@@ -258,7 +262,7 @@ class TestDepq < Test::Unit::TestCase
258
262
  q = Depq.new
259
263
  a = q.insert("a", 2)
260
264
  b = q.insert("b", 1)
261
- c = q.insert("c", 3)
265
+ q.insert("c", 3)
262
266
  assert_equal(b, q.find_min_locator)
263
267
  a.update("d", 0)
264
268
  assert_equal("d", a.value)
@@ -275,11 +279,11 @@ class TestDepq < Test::Unit::TestCase
275
279
  def test_locator_update_subpriority_min
276
280
  q = Depq.new
277
281
  a = q.insert("a", 1, 0)
278
- b = q.insert("b", 2, 1)
282
+ q.insert("b", 2, 1)
279
283
  c = q.insert("c", 1, 2)
280
- d = q.insert("d", 2, 3)
281
- e = q.insert("e", 1, 4)
282
- f = q.insert("f", 2, 5)
284
+ q.insert("d", 2, 3)
285
+ q.insert("e", 1, 4)
286
+ q.insert("f", 2, 5)
283
287
  assert_equal(a, q.find_min_locator)
284
288
  a.update("A", 1, 10)
285
289
  assert_equal(c, q.find_min_locator)
@@ -295,12 +299,12 @@ class TestDepq < Test::Unit::TestCase
295
299
 
296
300
  def test_locator_update_subpriority_max
297
301
  q = Depq.new
298
- a = q.insert("a", 1, 0)
302
+ q.insert("a", 1, 0)
299
303
  b = q.insert("b", 2, 1)
300
- c = q.insert("c", 1, 2)
304
+ q.insert("c", 1, 2)
301
305
  d = q.insert("d", 2, 3)
302
- e = q.insert("e", 1, 4)
303
- f = q.insert("f", 2, 5)
306
+ q.insert("e", 1, 4)
307
+ q.insert("f", 2, 5)
304
308
  assert_equal(b, q.find_max_locator)
305
309
  b.update("B", 2, 6)
306
310
  assert_equal(d, q.find_max_locator)
@@ -316,7 +320,7 @@ class TestDepq < Test::Unit::TestCase
316
320
 
317
321
  def test_locator_update_max
318
322
  q = Depq.new
319
- a = q.insert("a", 2)
323
+ q.insert("a", 2)
320
324
  b = q.insert("b", 1)
321
325
  c = q.insert("c", 3)
322
326
  assert_equal(c, q.find_max_locator)
@@ -624,7 +628,7 @@ class TestDepq < Test::Unit::TestCase
624
628
  q = Depq.new
625
629
  loc1 = q.insert 10
626
630
  assert_equal([loc1, loc1], q.find_minmax_locator)
627
- loc2 = q.insert 10
631
+ q.insert 10
628
632
  assert_equal([loc1, loc1], q.find_minmax_locator)
629
633
  end
630
634
 
metadata CHANGED
@@ -1,26 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: depq
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.6'
5
- prerelease:
4
+ version: '0.7'
6
5
  platform: ruby
7
6
  authors:
8
7
  - Tanaka Akira
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2011-11-29 00:00:00.000000000 Z
11
+ date: 2014-06-29 00:00:00.000000000 Z
13
12
  dependencies: []
14
- description: ! 'depq is a Double-Ended Priority Queue library.
15
-
16
- It is a data structure which can insert elements and delete elements with minimum
17
- and maximum priority.
18
-
13
+ description: |
14
+ depq is a Double-Ended Priority Queue library.
15
+ It is a data structure which can insert elements and delete elements with minimum and maximum priority.
19
16
  If there are elements which has same priority, the element inserted first is chosen.
20
-
21
17
  The priority can be changed after the element is inserted.
22
-
23
- '
24
18
  email: akr@fsij.org
25
19
  executables: []
26
20
  extensions: []
@@ -28,6 +22,7 @@ extra_rdoc_files: []
28
22
  files:
29
23
  - README
30
24
  - lib/depq.rb
25
+ - sample/dhondt.rb
31
26
  - sample/dijkstra.rb
32
27
  - sample/exqsort.rb
33
28
  - sample/huffman.rb
@@ -37,29 +32,29 @@ files:
37
32
  - sample/prim.rb
38
33
  - sample/sched.rb
39
34
  - test/test-depq.rb
40
- homepage: http://depq.rubyforge.org/
41
- licenses: []
35
+ homepage: https://github.com/akr/depq
36
+ licenses:
37
+ - BSD-3-Clause
38
+ metadata: {}
42
39
  post_install_message:
43
40
  rdoc_options: []
44
41
  require_paths:
45
42
  - lib
46
43
  required_ruby_version: !ruby/object:Gem::Requirement
47
- none: false
48
44
  requirements:
49
- - - ! '>='
45
+ - - ">="
50
46
  - !ruby/object:Gem::Version
51
47
  version: '0'
52
48
  required_rubygems_version: !ruby/object:Gem::Requirement
53
- none: false
54
49
  requirements:
55
- - - ! '>='
50
+ - - ">="
56
51
  - !ruby/object:Gem::Version
57
52
  version: '0'
58
53
  requirements: []
59
54
  rubyforge_project: depq
60
- rubygems_version: 1.8.11
55
+ rubygems_version: 2.2.2
61
56
  signing_key:
62
- specification_version: 3
57
+ specification_version: 4
63
58
  summary: Stable Double-Ended Priority Queue.
64
59
  test_files:
65
60
  - test/test-depq.rb