cantor 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f2ab8b5af0424ab082216ef9e4ec988da7c84e93
4
+ data.tar.gz: 71333c6b2507f87e1a4b187d695310b9bc5235df
5
+ SHA512:
6
+ metadata.gz: 5b2d169ae393cfe992e11af13090e67776e6972fddaa03be65895a0e071f64bb43a675232b9baee164b67d5d0850638eea279250b4da0ddf2ba8b521b875a43d
7
+ data.tar.gz: 966b373844833f456891db9d30598da2c556b0489fbb203cfa1251ac61b4aa6ab2767a1dfb4cb485176b0c2283b179ba76d0827feb9898cbb0e50d31a89f8685
data/README.md CHANGED
@@ -1,26 +1,26 @@
1
- # Cantor
1
+ # Cantor [![Build Status](https://secure.travis-ci.org/kputnam/cantor.png)](http://travis-ci.org/kputnam/cantor)
2
2
 
3
3
  Fast implementation of finite and complement sets in Ruby
4
4
 
5
5
  ## Constructors
6
6
 
7
- * `Cantor.empty`
8
- Finite set that contains no elements
9
-
10
- * `Cantor.build(enum)`
11
- Finite set containing each element in `enum`, whose domain of discourse is
12
- unrestricted
13
-
14
- * `Cantor.absolute(enum, universe)`
15
- Finite set containing each element in `enum`, whose domain of discourse is
16
- `universe`
17
-
18
- * `Cantor.universal`
19
- Infinite set containing every value in the universe
20
-
21
- * `Cantor.complement(enum)`
22
- Set containing every value except those in `enum`. Finite when `enum` is
23
- infinite. Infinite when `enum` is finite
7
+ ##### `Cantor.empty`
8
+ Finite set that contains no elements
9
+
10
+ ##### `Cantor.build(enum)`
11
+ Finite set containing each element in `enum`, whose domain of discourse
12
+ is unrestricted
13
+
14
+ ##### `Cantor.absolute(enum, universe)`
15
+ Finite set containing each element in `enum`, whose domain of discourse
16
+ is `universe`
17
+
18
+ ##### `Cantor.universal`
19
+ Infinite set containing every value in the universe
20
+
21
+ ##### `Cantor.complement(enum)`
22
+ Set containing every value except those in `enum`. Finite when `enum` is
23
+ infinite. Infinite when `enum` is finite
24
24
 
25
25
  ## Operations
26
26
 
@@ -56,13 +56,13 @@ Fast implementation of finite and complement sets in Ruby
56
56
  ## Performance
57
57
 
58
58
  Sets with a finite domain of discourse are represented using a bit string of
59
- 2<sup>|U|</sup> bits, where |U| is the size of the domain. This provides nearly
59
+ 2<sup>U</sup> bits, where U is the size of the domain. This provides nearly
60
60
  O(1) constant-time implementation using bitwise operations for all of the above
61
61
  set operations.
62
62
 
63
63
  The bit string is represented as an Integer, but as the domain grows larger
64
64
  than `0.size * 8 - 2` items, the type is automatically expanded to a Bignum.
65
- Bitwise operations on Bignums are O(|U|), which is still be significantly
65
+ Bitwise operations on Bignums are O(U), which is still be significantly
66
66
  faster than using the default Set library.
67
67
 
68
68
  Sets with an unrestricted domain of discourse are implemented using a Hash.
@@ -75,23 +75,28 @@ These benchmarks aren't intended to be useful. While they indicate the
75
75
  worst-case performance for Cantor, they probably don't show the worst
76
76
  case for the standard Set library.
77
77
 
78
+ Note "Relative" indicates Cantor sets with an infinite domain of discourse.
79
+ This includes `Cantor.build`, `Cantor.universal`, and `Cantor.complement`.
80
+ "Absolute" sets are Cantor sets with a finite domain of discourse, built
81
+ from `Cantor.absolute`.
82
+
78
83
  <table>
79
84
  <tbody>
80
85
  <tr>
81
- <td><img title="intersection" src="/kputnam/cantor/raw/master/benchmark/intersection.png"/></td>
82
- <td><img title="difference" src="/kputnam/cantor/raw/master/benchmark/difference.png"/></td>
86
+ <td><img title="intersection" src="/benchmark/intersection.png"/></td>
87
+ <td><img title="difference" src="/benchmark/difference.png"/></td>
83
88
  </tr>
84
89
  <tr>
85
- <td><img title="union" src="/kputnam/cantor/raw/master/benchmark/union.png"/></td>
86
- <td><img title="symmetric difference" src="/kputnam/cantor/raw/master/benchmark/sdifference.png"/></td>
90
+ <td><img title="union" src="/benchmark/union.png"/></td>
91
+ <td><img title="symmetric difference" src="/benchmark/sdifference.png"/></td>
87
92
  </tr>
88
93
  <tr>
89
- <td><img title="subset" src="/kputnam/cantor/raw/master/benchmark/subset.png"/></td>
90
- <td><img title="superset" src="/kputnam/cantor/raw/master/benchmark/superset.png"/></td>
94
+ <td><img title="subset" src="/benchmark/subset.png"/></td>
95
+ <td><img title="superset" src="/benchmark/superset.png"/></td>
91
96
  </tr>
92
97
  <tr>
93
- <td><img title="equality" src="/kputnam/cantor/raw/master/benchmark/equality.png"/></td>
94
- <td><img title="membership" src="/kputnam/cantor/raw/master/benchmark/membership.png"/></td>
98
+ <td><img title="equality" src="/benchmark/equality.png"/></td>
99
+ <td><img title="membership" src="/benchmark/membership.png"/></td>
95
100
  </tr>
96
101
  </tbody>
97
102
  </table>
data/Rakefile CHANGED
@@ -3,15 +3,17 @@ abspath = Pathname.new(File.dirname(__FILE__)).expand_path
3
3
  relpath = abspath.relative_path_from(Pathname.pwd)
4
4
 
5
5
  begin
6
- require "rubygems"
7
- require "bundler/setup"
6
+ # require "rubygems"
7
+ # require "bundler/setup"
8
8
  rescue LoadError
9
9
  warn "couldn't load bundler:"
10
10
  warn " #{$!}"
11
11
  end
12
12
 
13
+ task :default => :spec
14
+
13
15
  task :console do
14
- exec *%w(irb -I lib -r cantor)
16
+ exec(*%w(irb -I lib -r cantor))
15
17
  end
16
18
 
17
19
  begin
@@ -23,16 +25,28 @@ begin
23
25
  t.rspec_opts = %w(--color --format p)
24
26
  t.rspec_opts << "-I#{abspath}/spec"
25
27
  end
26
- rescue LoadError
27
- task :spec do
28
- warn "couldn't load rspec"
29
- warn " #{$!}"
30
- exit 1
28
+ rescue LoadError => first
29
+ begin
30
+ require "spec/rake/spectask"
31
+ Spec::Rake::SpecTask.new do |t|
32
+ t.pattern = "#{relpath}/spec/examples/**/*.example"
33
+ t.spec_opts << "--color"
34
+ t.spec_opts << "--format p"
35
+ t.libs << "#{abspath}/spec"
36
+ end
37
+ rescue LoadError => second
38
+ task :spec do
39
+ warn "couldn't load rspec version 1 or 2:"
40
+ warn " #{first}"
41
+ warn " #{second}"
42
+ exit 1
43
+ end
31
44
  end
32
45
  end
33
46
 
34
47
  begin
35
48
  require "rcov"
49
+
36
50
  begin
37
51
  require "rspec/core/rake_task"
38
52
  RSpec::Core::RakeTask.new(:rcov) do |t|
@@ -45,19 +59,39 @@ begin
45
59
  t.rspec_opts = %w(--color --format p)
46
60
  t.rspec_opts << "-I#{abspath}/spec"
47
61
  end
48
- rescue LoadError
49
- task :rcov do
50
- warn "couldn't load rspec"
51
- warn " #{$!}"
52
- exit 1
62
+ rescue LoadError => first
63
+ begin
64
+ require "spec/rake/spectask"
65
+ Spec::Rake::SpecTask.new(:rcov) do |t|
66
+ t.rcov = true
67
+ t.rcov_opts = %w(--exclude spec/,gems/)
68
+
69
+ t.pattern = "#{relpath}/spec/examples/**/*.example"
70
+ t.spec_opts << "--color"
71
+ t.spec_opts << "--format=p"
72
+ t.libs << "#{abspath}/spec"
73
+ end
74
+ rescue LoadError => second
75
+ task :rcov do
76
+ warn "couldn't load rspec version 1 or 2:"
77
+ warn " #{first}"
78
+ warn " #{second}"
79
+ exit 1
80
+ end
53
81
  end
54
82
  end
55
- rescue LoadError
83
+ rescue LoadError => e
56
84
  task :rcov do
57
85
  warn "couldn't load rcov:"
58
- warn " #{$!}"
86
+ warn " #{e}"
59
87
  exit 1
60
88
  end
89
+ end if RUBY_VERSION <= "1.9"
90
+
91
+ if RUBY_VERSION >= "1.9"
92
+ # spec/spec_helper.rb will load SimpleCov
93
+ task :rcov => :spec do
94
+ end
61
95
  end
62
96
 
63
97
  begin
@@ -70,12 +104,10 @@ begin
70
104
  rm_rf "#{relpath}/doc/generated"
71
105
  mkdir_p "#{relpath}/doc/generated/images"
72
106
  end
73
- rescue LoadError
107
+ rescue LoadError => e
74
108
  task :yard do
75
109
  warn "couldn't load yard:"
76
- warn " #{$!}"
110
+ warn " #{e}"
77
111
  exit 1
78
112
  end
79
113
  end
80
-
81
- task :default => :spec
@@ -30,6 +30,12 @@ module Cantor
30
30
  # True if {#size} `== 0`
31
31
  # abstract :empty?
32
32
 
33
+ # False if {#size} `== 0`
34
+ # abstract :empty?
35
+ def present?
36
+ not empty?
37
+ end
38
+
33
39
  # Returns the number of elements in the set
34
40
  #
35
41
  # @return [Numeric]
@@ -193,6 +193,16 @@ describe Cantor::AbsoluteSet do
193
193
  end
194
194
  end
195
195
 
196
+ describe "#present?" do
197
+ specify "∅.present? is false" do
198
+ null.should_not be_present
199
+ end
200
+
201
+ specify "{x}.present? is true" do
202
+ single.should be_present
203
+ end
204
+ end
205
+
196
206
  describe "#size" do
197
207
  specify "∅.size == 0" do
198
208
  null.size == 0
@@ -8,6 +8,13 @@ rescue LoadError
8
8
  require "rspec"
9
9
  end
10
10
 
11
+ begin
12
+ require "simplecov"
13
+ SimpleCov.start
14
+ rescue LoadError
15
+ warn $!
16
+ end if RUBY_VERSION >= "1.9"
17
+
11
18
  # Require supporting files with custom matchers and macros
12
19
  Pathname.new(File.dirname(__FILE__)).tap do |specdir|
13
20
  Dir["#{specdir}/support/**/*.rb"].each do |file|
metadata CHANGED
@@ -1,81 +1,61 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: cantor
3
- version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease:
6
- segments:
7
- - 1
8
- - 2
9
- - 0
10
- version: 1.2.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.1
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Kyle Putnam
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2012-04-12 00:00:00 Z
11
+ date: 2014-08-13 00:00:00.000000000 Z
19
12
  dependencies: []
20
-
21
13
  description: Fast implementation of finite and complement sets in Ruby
22
14
  email: putnam.kyle@gmail.com
23
15
  executables: []
24
-
25
16
  extensions: []
26
-
27
17
  extra_rdoc_files: []
28
-
29
- files:
18
+ files:
30
19
  - README.md
31
20
  - Rakefile
32
- - lib/cantor/relative_set.rb
21
+ - lib/cantor.rb
33
22
  - lib/cantor/absolute_set.rb
34
- - lib/cantor/universal_set.rb
35
- - lib/cantor/relative_complement.rb
36
23
  - lib/cantor/abstract_set.rb
37
24
  - lib/cantor/null_set.rb
38
- - lib/cantor.rb
39
- - spec/spec_helper.rb
25
+ - lib/cantor/relative_complement.rb
26
+ - lib/cantor/relative_set.rb
27
+ - lib/cantor/universal_set.rb
28
+ - spec/examples/absolute_set.example
40
29
  - spec/examples/null_set.example
41
- - spec/examples/universal_set.example
42
30
  - spec/examples/relative_set.example
43
- - spec/examples/absolute_set.example
31
+ - spec/examples/universal_set.example
32
+ - spec/spec_helper.rb
44
33
  homepage: https://github.com/kputnam/cantor
45
34
  licenses: []
46
-
35
+ metadata: {}
47
36
  post_install_message:
48
37
  rdoc_options: []
49
-
50
- require_paths:
38
+ require_paths:
51
39
  - lib
52
- required_ruby_version: !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ requirements:
55
42
  - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
61
- required_rubygems_version: !ruby/object:Gem::Requirement
62
- none: false
63
- requirements:
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ requirements:
64
47
  - - ">="
65
- - !ruby/object:Gem::Version
66
- hash: 3
67
- segments:
68
- - 0
69
- version: "0"
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
70
50
  requirements: []
71
-
72
51
  rubyforge_project:
73
- rubygems_version: 1.8.17
52
+ rubygems_version: 2.2.2
74
53
  signing_key:
75
- specification_version: 3
54
+ specification_version: 4
76
55
  summary: Fast implementation of finite and complement sets in Ruby
77
- test_files:
56
+ test_files:
57
+ - spec/examples/absolute_set.example
78
58
  - spec/examples/null_set.example
79
- - spec/examples/universal_set.example
80
59
  - spec/examples/relative_set.example
81
- - spec/examples/absolute_set.example
60
+ - spec/examples/universal_set.example
61
+ has_rdoc: false