segment_tree 0.1.0 → 0.1.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 67bd1fc5631d255d64a5895c685058f49dabe485
4
+ data.tar.gz: 4fc670352ba477a0e9241aed8af12963aa64b85d
5
+ SHA512:
6
+ metadata.gz: 64564b83ddaac3ca1c860f99510793c239dd931ad25deae733dab3b79c9db265aa8be8d8ad717433a718a5cf393b586ad8b290246356836cc790a2372a3114d7
7
+ data.tar.gz: 414d0aa78ee04da42ecbe555e19f756c1293c2b1055b866e411c6e735fc327f6d685599b9bef1ad2bba16f7ef8336fdbb3ce64aebcbdc73efa0f464f1b05c178
@@ -91,9 +91,9 @@ class SegmentTree
91
91
  right = idx < @segments.size - 1 && @segments[idx + 1]
92
92
 
93
93
  case
94
- when left && (low.range.begin..left.range.end).include?(x) then -1
95
- when segment.range.include?(x) then 0
96
- when right && (right.range.begin..high.range.end).include?(x) then 1
94
+ when left && low.range.begin <= x && x <= left.range.end then -1
95
+ when segment.range.begin <=x && x <= segment.range.end then 0
96
+ when right && right.range.begin <=x && x <= high.range.end then 1
97
97
  else nil
98
98
  end
99
99
  end
@@ -1,3 +1,3 @@
1
1
  class SegmentTree
2
- VERSION = "0.1.0"
2
+ VERSION = '0.1.1'
3
3
  end
@@ -2,18 +2,19 @@
2
2
  require File.expand_path('../lib/segment_tree/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
- gem.author = "Alexei Mikhailov"
6
- gem.email = "amikhailov83@gmail.com"
5
+ gem.author = 'Alexei Mikhailov'
6
+ gem.email = 'amikhailov83@gmail.com'
7
7
  gem.description = %q{Tree data structure for storing segments. It allows querying which of the stored segments contain a given point.}
8
8
  gem.summary = %q{Tree data structure for storing segments. It allows querying which of the stored segments contain a given point.}
9
- gem.homepage = "https://github.com/take-five/segment_tree"
9
+ gem.homepage = 'https://github.com/take-five/segment_tree'
10
10
 
11
11
  gem.files = `git ls-files`.split($\).grep(/lib|spec/)
12
12
  gem.test_files = gem.files.grep(/spec/)
13
- gem.name = "segment_tree"
13
+ gem.name = 'segment_tree'
14
14
  gem.require_paths = %W(lib)
15
15
  gem.version = SegmentTree::VERSION
16
16
 
17
- gem.add_development_dependency "bundler", ">= 1.0"
18
- gem.add_development_dependency "rspec", ">= 2.11"
17
+ gem.add_development_dependency 'bundler', '>= 1.0'
18
+ gem.add_development_dependency 'rspec', '>= 3.1.0'
19
+ gem.add_development_dependency 'rake'
19
20
  end
@@ -1,5 +1,5 @@
1
- require "spec_helper"
2
- require "segment_tree"
1
+ require 'spec_helper'
2
+ require 'segment_tree'
3
3
 
4
4
  # subject { tree }
5
5
  # it { should query(12).and_return("b") }
@@ -13,10 +13,10 @@ RSpec::Matchers.define :query do |key|
13
13
  result = tree.find(key)
14
14
  result &&= result.value
15
15
 
16
- result.should eq @expected
16
+ expect(result).to eq @expected
17
17
  end
18
18
 
19
- failure_message_for_should do |tree|
19
+ failure_message do |tree|
20
20
  result = tree.find(key)
21
21
  result &&= result.value
22
22
 
@@ -28,15 +28,15 @@ end
28
28
  describe SegmentTree do
29
29
  # some fixtures
30
30
  # [[0..9, "a"], [10..19, "b"], ..., [90..99, "j"]] - spanned intervals
31
- let(:sample_spanned) { (0..9).zip("a".."j").map { |num, letter| [(num * 10)..(num + 1) * 10 - 1, letter] }.shuffle }
31
+ let(:sample_spanned) { (0..9).zip('a'..'j').map { |num, letter| [(num * 10)..(num + 1) * 10 - 1, letter] }.shuffle }
32
32
  # [[0..10, "a"], [10..20, "b"], ..., [90..100, "j"]] - partially overlapping intervals
33
- let(:sample_overlapping) { (0..9).zip("a".."j").map { |num, letter| [(num * 10)..(num + 1) * 10 + 2, letter] }.shuffle }
33
+ let(:sample_overlapping) { (0..9).zip('a'..'j').map { |num, letter| [(num * 10)..(num + 1) * 10 + 2, letter] }.shuffle }
34
34
  # [[0..5, "a"], [10..15, "b"], ..., [90..95, "j"]] - sparsed intervals
35
- let(:sample_sparsed) { (0..9).zip("a".."j").map { |num, letter| [(num * 10)..(num + 1) * 10 - 5, letter] }.shuffle }
35
+ let(:sample_sparsed) { (0..9).zip('a'..'j').map { |num, letter| [(num * 10)..(num + 1) * 10 - 5, letter] }.shuffle }
36
36
 
37
37
  # [[0..5, "a"], [0..7, "aa"], [10..15, "b"], [10..17, "bb"], ..., [90..97, "jj"]]
38
38
  let(:sample_overlapping2) do
39
- (0..9).zip("a".."j").map do |num, letter|
39
+ (0..9).zip('a'..'j').map do |num, letter|
40
40
  [(num * 10)..(num + 1) * 10 - 5, letter,
41
41
  (num * 10)..(num + 1) * 10 - 3, letter * 2]
42
42
  end.
@@ -46,89 +46,89 @@ describe SegmentTree do
46
46
  shuffle
47
47
  end
48
48
 
49
- describe ".new" do
50
- context "given a hash with ranges as keys" do
49
+ describe '.new' do
50
+ context 'given a hash with ranges as keys' do
51
51
  let :data do
52
- {7..9 => "a",
53
- 4..6 => "b",
54
- 0..3 => "c",
55
- 10..12 => "d"}
52
+ {7..9 => 'a',
53
+ 4..6 => 'b',
54
+ 0..3 => 'c',
55
+ 10..12 => 'd'}
56
56
  end
57
57
 
58
58
  subject(:tree) { SegmentTree.new(data) }
59
59
 
60
- it { should be_a SegmentTree }
60
+ it { is_expected.to be_a SegmentTree }
61
61
  end
62
62
 
63
- context "given an array of arrays" do
63
+ context 'given an array of arrays' do
64
64
  let :data do
65
- [[0..3, "a"],
66
- [4..6, "b"],
67
- [7..9, "c"],
68
- [10..12, "d"]].shuffle
65
+ [[0..3, 'a'],
66
+ [4..6, 'b'],
67
+ [7..9, 'c'],
68
+ [10..12, 'd']].shuffle
69
69
  end
70
70
 
71
71
  subject(:tree) { SegmentTree.new(data) }
72
72
 
73
- it { should be_a SegmentTree }
73
+ it { is_expected.to be_a SegmentTree }
74
74
  end
75
75
 
76
- context "given preordered data" do
76
+ context 'given preordered data' do
77
77
  let :data do
78
- [[0..3, "a"],
79
- [4..6, "b"],
80
- [7..9, "c"],
81
- [10..12, "d"]]
78
+ [[0..3, 'a'],
79
+ [4..6, 'b'],
80
+ [7..9, 'c'],
81
+ [10..12, 'd']]
82
82
  end
83
83
 
84
84
  subject(:tree) { SegmentTree.new(data, true) }
85
85
 
86
- it { should be_a SegmentTree }
87
- it { should query(8).and_return("c") }
86
+ it { is_expected.to be_a SegmentTree }
87
+ it { is_expected.to query(8).and_return('c') }
88
88
  end
89
89
 
90
- context "given nor hash neither array" do
90
+ context 'given nor hash neither array' do
91
91
  it { expect{ SegmentTree.new(Object.new) }.to raise_error(ArgumentError) }
92
92
  end
93
93
 
94
- context "given 1-dimensional array" do
94
+ context 'given 1-dimensional array' do
95
95
  let :data do
96
- [0..3, "a",
97
- 4..6, "b",
98
- 7..9, "c",
99
- 10..12, "d"]
96
+ [0..3, 'a',
97
+ 4..6, 'b',
98
+ 7..9, 'c',
99
+ 10..12, 'd']
100
100
  end
101
101
 
102
102
  it { expect{ SegmentTree.new(data) }.to raise_error(ArgumentError) }
103
103
  end
104
104
  end
105
105
 
106
- describe "querying" do
107
- context "given spanned intervals" do
106
+ describe 'querying' do
107
+ context 'given spanned intervals' do
108
108
  subject { SegmentTree.new(sample_spanned) }
109
109
 
110
- it { should query(12).and_return('b') }
111
- it { should query(101).and_return(:nothing) }
110
+ it { is_expected.to query(12).and_return('b') }
111
+ it { is_expected.to query(101).and_return(:nothing) }
112
112
  end
113
113
 
114
- context "given partially overlapping intervals" do
114
+ context 'given partially overlapping intervals' do
115
115
  subject { SegmentTree.new(sample_overlapping) }
116
116
 
117
- it { should query(11).and_return('a') }
117
+ it { is_expected.to query(11).and_return('a') }
118
118
  end
119
119
 
120
- context "given sparsed intervals" do
120
+ context 'given sparsed intervals' do
121
121
  subject { SegmentTree.new(sample_sparsed) }
122
122
 
123
- it { should query(12).and_return('b') }
124
- it { should query(8).and_return(:nothing) }
123
+ it { is_expected.to query(12).and_return('b') }
124
+ it { is_expected.to query(8).and_return(:nothing) }
125
125
  end
126
126
 
127
- context "given hardly overlapping intervals" do
127
+ context 'given hardly overlapping intervals' do
128
128
  subject { SegmentTree.new(sample_overlapping2) }
129
129
 
130
- it { should query(12).and_return('b') }
131
- it { should query(8).and_return(:nothing) }
130
+ it { is_expected.to query(12).and_return('b') }
131
+ it { is_expected.to query(8).and_return(:nothing) }
132
132
  end
133
133
  end
134
134
  end
@@ -1,4 +1,4 @@
1
- require "bundler/setup"
1
+ require 'bundler/setup'
2
2
 
3
3
  RSpec.configure do |config|
4
4
  # Run specs in random order to surface order dependencies. If you find an
@@ -9,8 +9,8 @@ RSpec.configure do |config|
9
9
  end
10
10
 
11
11
  if defined?(RUBY_ENGINE) &&
12
- RUBY_ENGINE == "ruby" &&
13
- RUBY_VERSION > "1.9"
14
- require "simplecov"
12
+ RUBY_ENGINE == 'ruby' &&
13
+ RUBY_VERSION > '1.9'
14
+ require 'simplecov'
15
15
  SimpleCov.start
16
16
  end
metadata CHANGED
@@ -1,48 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: segment_tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
5
- prerelease:
4
+ version: 0.1.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Alexei Mikhailov
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-08-06 00:00:00.000000000 Z
11
+ date: 2014-12-25 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '1.0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '1.0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
- version: '2.11'
33
+ version: 3.1.0
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
- version: '2.11'
40
+ version: 3.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
46
55
  description: Tree data structure for storing segments. It allows querying which of
47
56
  the stored segments contain a given point.
48
57
  email: amikhailov83@gmail.com
@@ -58,27 +67,26 @@ files:
58
67
  - spec/spec_helper.rb
59
68
  homepage: https://github.com/take-five/segment_tree
60
69
  licenses: []
70
+ metadata: {}
61
71
  post_install_message:
62
72
  rdoc_options: []
63
73
  require_paths:
64
74
  - lib
65
75
  required_ruby_version: !ruby/object:Gem::Requirement
66
- none: false
67
76
  requirements:
68
- - - ! '>='
77
+ - - '>='
69
78
  - !ruby/object:Gem::Version
70
79
  version: '0'
71
80
  required_rubygems_version: !ruby/object:Gem::Requirement
72
- none: false
73
81
  requirements:
74
- - - ! '>='
82
+ - - '>='
75
83
  - !ruby/object:Gem::Version
76
84
  version: '0'
77
85
  requirements: []
78
86
  rubyforge_project:
79
- rubygems_version: 1.8.24
87
+ rubygems_version: 2.2.2
80
88
  signing_key:
81
- specification_version: 3
89
+ specification_version: 4
82
90
  summary: Tree data structure for storing segments. It allows querying which of the
83
91
  stored segments contain a given point.
84
92
  test_files: