lilutils 0.0.2 → 0.0.3

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.
data/Gemfile CHANGED
@@ -6,7 +6,7 @@ source "http://rubygems.org"
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  group :development do
9
- gem "shoulda", ">= 0"
9
+ # gem "shoulda", ">= 0"
10
10
  gem "bundler", "~> 1.0.0"
11
11
  gem "jeweler", "~> 1.5.2"
12
12
  gem "rcov", ">= 0"
data/Gemfile.lock CHANGED
@@ -8,7 +8,6 @@ GEM
8
8
  rake
9
9
  rake (0.8.7)
10
10
  rcov (0.9.9)
11
- shoulda (2.11.3)
12
11
  test-unit (2.1.2)
13
12
 
14
13
  PLATFORMS
@@ -18,5 +17,4 @@ DEPENDENCIES
18
17
  bundler (~> 1.0.0)
19
18
  jeweler (~> 1.5.2)
20
19
  rcov
21
- shoulda
22
20
  test-unit
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ === 0.0.3
2
+ * A Misc Utility to implement the classic bit vector.
3
+ * Fixed a bug in ascii_strings method where the seeding of the random number generator was just failing.
4
+ * Added a test to guard against the bug found
1
5
  === 0.0.2
2
6
  * Utility to test whether an array is in order. The comparator is defined by the block.
3
7
  * Utility to find out the sandwiching indexes for an element in a given collection that is supposed to be sorted.
data/Manifest.txt CHANGED
@@ -20,3 +20,5 @@ test/test_lilutils.rb
20
20
  test/algo_test_utils/data_sets_test.rb
21
21
  test/cli/cli_basic_test.rb
22
22
  test/misc/misc_pascal_test.rb
23
+ test/misc/binary_search_test.rb
24
+ test/misc/bit_vector_test.rb
data/Rakefile CHANGED
@@ -13,7 +13,7 @@ require 'jeweler'
13
13
  Jeweler::Tasks.new do |gem|
14
14
  # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
15
  gem.name = "lilutils"
16
- gem.version = "0.0.2"
16
+ gem.version = "0.0.3"
17
17
  gem.homepage = "http://github.com/kedarmhaswade/lilutils"
18
18
  gem.license = "MIT"
19
19
  gem.summary = %Q{Little utilities for everyone}
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.3
@@ -69,6 +69,7 @@ module LilUtils
69
69
  i = 0
70
70
  str = ""
71
71
  while i < length
72
+ srand Time.now.nsec
72
73
  str << ALPHABET[rand(SIZE)]
73
74
  i += 1
74
75
  end
@@ -0,0 +1,52 @@
1
+ module LilUtils
2
+ module Misc
3
+ # Class to implement a bit vector that uses an array of Fixnums as its storage.
4
+ # Implements the basic bit vector operations as specified.
5
+ class BitVector
6
+
7
+ BITS_PER_ITEM = 0.size * 8
8
+
9
+ def initialize(size)
10
+ raise ArgumentError, "size must be positive" if size <= 0
11
+ @size = size
12
+ @array = Array.new((size*1.0/BITS_PER_ITEM).ceil) { |i| 0 } #=> array contains required # of Fixnums, initialized to zero
13
+ end
14
+
15
+ # Sets the 'i'th bit of this Bit Vector.
16
+ # @param [Fixnum] i Represents the index of given, must be from 0 to @size-1
17
+ # @raise [ArgumentError] if 0 < i <= n
18
+ # @return nothing
19
+ def set(i)
20
+ raise ArgumentError, "argument (#{i}) should be between 0 and #{@size}" if i < 0 or i >= @size
21
+ @array[get_index(i)] |= (1 << get_shift(i))
22
+ end
23
+
24
+
25
+ # Tests whether ith bit of this Bit Vector is set
26
+ # @param [Fixnum] i Represents the index of given bit, must be from 0 to @size-1
27
+ # @return [Fixnum] 1 if ith bit is set, 0 otherwise
28
+ def test(i)
29
+ raise ArgumentError, "argument (#{i}) should be between 0 and #{@size}" if i < 0 or i >= @size
30
+ (@array[get_index(i)] & (1 << (get_shift(i))))>>(get_shift(i))
31
+ end
32
+
33
+ # Clears the given bit (i.e. makes it 0).
34
+ # @param [Fixnum] i Represents the index of given bit, must be from 0 to @size-1
35
+ # @return nothing
36
+ def clear(i)
37
+ raise ArgumentError, "argument (#{i}) should be between 0 and #{@size}" if i < 0 or i >= @size
38
+ @array[get_index(i)] &= ~(1 << get_shift(i))
39
+ end
40
+
41
+ private
42
+ # Determines the destination Fixnum who holds this bit.
43
+ def get_index(i)
44
+ i/BITS_PER_ITEM
45
+ end
46
+ # Returns the <i> offset </i> of the given bit inside a Fixnum
47
+ def get_shift(i)
48
+ i%BITS_PER_ITEM
49
+ end
50
+ end
51
+ end
52
+ end
data/lib/lilutils.rb CHANGED
@@ -3,6 +3,6 @@ $:.unshift(File.dirname(__FILE__)) unless
3
3
  require 'lilutils/cli_entry'
4
4
  require 'lilutils/misc_entry'
5
5
  require 'lilutils/algo_test_utils_entry'
6
- module Lilutils
6
+ module LilUtils
7
7
  VERSION = '0.0.1'
8
8
  end
data/lilutils.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{lilutils}
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kedar Mhaswade"]
12
- s.date = %q{2011-03-12}
12
+ s.date = %q{2011-05-23}
13
13
  s.default_executable = %q{cli-demo}
14
14
  s.description = %q{Provides little utilties. It's a gem by a newbie, but I think it is quite useful. As of now, it provides a nicely abstracted out yes/no/cancel dialog box on a console.}
15
15
  s.email = %q{kedar.mhaswade@gmail.com}
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
33
33
  "lib/lilutils/cli/cli.rb",
34
34
  "lib/lilutils/cli_entry.rb",
35
35
  "lib/lilutils/misc/binary_search.rb",
36
+ "lib/lilutils/misc/bit_vector.rb",
36
37
  "lib/lilutils/misc/misc.rb",
37
38
  "lib/lilutils/misc/pascal.rb",
38
39
  "lib/lilutils/misc_entry.rb",
@@ -43,6 +44,7 @@ Gem::Specification.new do |s|
43
44
  "test/algo_test_utils/data_sets_test.rb",
44
45
  "test/cli/cli_basic_test.rb",
45
46
  "test/misc/binary_search_test.rb",
47
+ "test/misc/bit_vector_test.rb",
46
48
  "test/misc/misc_pascal_test.rb",
47
49
  "test/test_helper.rb",
48
50
  "test/test_lilutils.rb"
@@ -56,6 +58,7 @@ Gem::Specification.new do |s|
56
58
  "test/algo_test_utils/data_sets_test.rb",
57
59
  "test/cli/cli_basic_test.rb",
58
60
  "test/misc/binary_search_test.rb",
61
+ "test/misc/bit_vector_test.rb",
59
62
  "test/misc/misc_pascal_test.rb",
60
63
  "test/test_helper.rb",
61
64
  "test/test_lilutils.rb"
@@ -65,20 +68,17 @@ Gem::Specification.new do |s|
65
68
  s.specification_version = 3
66
69
 
67
70
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
68
- s.add_development_dependency(%q<shoulda>, [">= 0"])
69
71
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
70
72
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
71
73
  s.add_development_dependency(%q<rcov>, [">= 0"])
72
74
  s.add_development_dependency(%q<test-unit>, [">= 0"])
73
75
  else
74
- s.add_dependency(%q<shoulda>, [">= 0"])
75
76
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
76
77
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
77
78
  s.add_dependency(%q<rcov>, [">= 0"])
78
79
  s.add_dependency(%q<test-unit>, [">= 0"])
79
80
  end
80
81
  else
81
- s.add_dependency(%q<shoulda>, [">= 0"])
82
82
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
83
83
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
84
84
  s.add_dependency(%q<rcov>, [">= 0"])
@@ -29,4 +29,11 @@ class DataSetsTest < Test::Unit::TestCase
29
29
  # DS.select_random_array_to_file(1_000_000, 10_000_000, fn)
30
30
  File.delete(fn)
31
31
  end
32
+
33
+ def test_random_strings_successive
34
+ # two successive invocations of ascii_strings should return unique strings, as far as possible
35
+ f = DS.ascii_strings(1, 30)
36
+ s = DS.ascii_strings(1, 30)
37
+ assert_not_equal(f, s)
38
+ end
32
39
  end
@@ -0,0 +1,52 @@
1
+ require "test/unit"
2
+ require_relative "../../lib/lilutils/misc/bit_vector"
3
+
4
+ class BitVectorTest < Test::Unit::TestCase
5
+
6
+ # Called before every test method runs. Can be used
7
+ # to set up fixture information.
8
+ def setup
9
+ # Do nothing
10
+ end
11
+
12
+ # Called after every test method runs. Can be used to tear
13
+ # down fixture information.
14
+
15
+ def teardown
16
+ # Do nothing
17
+ end
18
+
19
+ def test_set_test_one
20
+ bv = LilUtils::Misc::BitVector.new(100)
21
+ bv.set(4)
22
+ assert_equal(1, bv.test(4))
23
+ end
24
+
25
+ def test_set_clear_one
26
+ bv = LilUtils::Misc::BitVector.new(1<<20) # 1 Mega-bits = 2**20 bits
27
+ bv.set(512)
28
+ bv.clear(512)
29
+ assert_equal(0, bv.test(512))
30
+ end
31
+
32
+ def test_set_all
33
+ n = 1_000
34
+ bv = LilUtils::Misc::BitVector.new(n)
35
+ 0.upto(n-1) {|i| bv.set(i)}
36
+ 0.upto(n-1) {|i| assert_equal(1, bv.test(i))}
37
+ end
38
+
39
+ def test_edge_cases
40
+ n = 1<<16 #=> 65,536 bits
41
+ bv = LilUtils::Misc::BitVector.new(n)
42
+ bv.set(0)
43
+ assert_equal(1, bv.test(0))
44
+ bv.set(1<<16-1)
45
+ assert_equal(1, bv.test(1<<16-1))
46
+ bv.clear(0)
47
+ assert_equal(0, bv.test(0))
48
+ bv.clear(1<<16-1)
49
+ assert_equal(0, bv.test(1<<16-1))
50
+ end
51
+
52
+ end
@@ -3,6 +3,7 @@ require 'cli/cli_basic_test'
3
3
  require 'algo_test_utils/data_sets_test'
4
4
  require 'misc/misc_pascal_test'
5
5
  require 'misc/binary_search_test'
6
+ require 'misc/bit_vector_test'
6
7
 
7
8
  class TestLilutils < Test::Unit::TestCase
8
9
 
metadata CHANGED
@@ -1,82 +1,71 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: lilutils
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.2
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: 0.0.3
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Kedar Mhaswade
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-03-12 00:00:00.000000000 -08:00
12
+
13
+ date: 2011-05-23 00:00:00 -07:00
13
14
  default_executable: cli-demo
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: shoulda
17
- requirement: &15751660 !ruby/object:Gem::Requirement
18
- none: false
19
- requirements:
20
- - - ! '>='
21
- - !ruby/object:Gem::Version
22
- version: '0'
23
- type: :development
24
- prerelease: false
25
- version_requirements: *15751660
26
- - !ruby/object:Gem::Dependency
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
27
17
  name: bundler
28
- requirement: &15750340 !ruby/object:Gem::Requirement
18
+ requirement: &id001 !ruby/object:Gem::Requirement
29
19
  none: false
30
- requirements:
20
+ requirements:
31
21
  - - ~>
32
- - !ruby/object:Gem::Version
22
+ - !ruby/object:Gem::Version
33
23
  version: 1.0.0
34
24
  type: :development
35
25
  prerelease: false
36
- version_requirements: *15750340
37
- - !ruby/object:Gem::Dependency
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
38
28
  name: jeweler
39
- requirement: &15748560 !ruby/object:Gem::Requirement
29
+ requirement: &id002 !ruby/object:Gem::Requirement
40
30
  none: false
41
- requirements:
31
+ requirements:
42
32
  - - ~>
43
- - !ruby/object:Gem::Version
33
+ - !ruby/object:Gem::Version
44
34
  version: 1.5.2
45
35
  type: :development
46
36
  prerelease: false
47
- version_requirements: *15748560
48
- - !ruby/object:Gem::Dependency
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
49
39
  name: rcov
50
- requirement: &15502600 !ruby/object:Gem::Requirement
40
+ requirement: &id003 !ruby/object:Gem::Requirement
51
41
  none: false
52
- requirements:
53
- - - ! '>='
54
- - !ruby/object:Gem::Version
55
- version: '0'
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
56
46
  type: :development
57
47
  prerelease: false
58
- version_requirements: *15502600
59
- - !ruby/object:Gem::Dependency
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
60
50
  name: test-unit
61
- requirement: &15497500 !ruby/object:Gem::Requirement
51
+ requirement: &id004 !ruby/object:Gem::Requirement
62
52
  none: false
63
- requirements:
64
- - - ! '>='
65
- - !ruby/object:Gem::Version
66
- version: '0'
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
67
57
  type: :development
68
58
  prerelease: false
69
- version_requirements: *15497500
70
- description: Provides little utilties. It's a gem by a newbie, but I think it is quite
71
- useful. As of now, it provides a nicely abstracted out yes/no/cancel dialog box
72
- on a console.
59
+ version_requirements: *id004
60
+ description: Provides little utilties. It's a gem by a newbie, but I think it is quite useful. As of now, it provides a nicely abstracted out yes/no/cancel dialog box on a console.
73
61
  email: kedar.mhaswade@gmail.com
74
- executables:
62
+ executables:
75
63
  - cli-demo
76
64
  extensions: []
77
- extra_rdoc_files:
65
+
66
+ extra_rdoc_files:
78
67
  - README.rdoc
79
- files:
68
+ files:
80
69
  - Gemfile
81
70
  - Gemfile.lock
82
71
  - History.txt
@@ -92,6 +81,7 @@ files:
92
81
  - lib/lilutils/cli/cli.rb
93
82
  - lib/lilutils/cli_entry.rb
94
83
  - lib/lilutils/misc/binary_search.rb
84
+ - lib/lilutils/misc/bit_vector.rb
95
85
  - lib/lilutils/misc/misc.rb
96
86
  - lib/lilutils/misc/pascal.rb
97
87
  - lib/lilutils/misc_entry.rb
@@ -102,42 +92,46 @@ files:
102
92
  - test/algo_test_utils/data_sets_test.rb
103
93
  - test/cli/cli_basic_test.rb
104
94
  - test/misc/binary_search_test.rb
95
+ - test/misc/bit_vector_test.rb
105
96
  - test/misc/misc_pascal_test.rb
106
97
  - test/test_helper.rb
107
98
  - test/test_lilutils.rb
108
99
  has_rdoc: true
109
100
  homepage: http://github.com/kedarmhaswade/lilutils
110
- licenses:
101
+ licenses:
111
102
  - MIT
112
103
  post_install_message:
113
104
  rdoc_options: []
114
- require_paths:
105
+
106
+ require_paths:
115
107
  - lib
116
- required_ruby_version: !ruby/object:Gem::Requirement
108
+ required_ruby_version: !ruby/object:Gem::Requirement
117
109
  none: false
118
- requirements:
119
- - - ! '>='
120
- - !ruby/object:Gem::Version
121
- version: '0'
122
- segments:
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ hash: 2948204278225597080
114
+ segments:
123
115
  - 0
124
- hash: -890236444021516907
125
- required_rubygems_version: !ruby/object:Gem::Requirement
116
+ version: "0"
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
118
  none: false
127
- requirements:
128
- - - ! '>='
129
- - !ruby/object:Gem::Version
130
- version: '0'
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: "0"
131
123
  requirements: []
124
+
132
125
  rubyforge_project:
133
126
  rubygems_version: 1.6.2
134
127
  signing_key:
135
128
  specification_version: 3
136
129
  summary: Little utilities for everyone
137
- test_files:
130
+ test_files:
138
131
  - test/algo_test_utils/data_sets_test.rb
139
132
  - test/cli/cli_basic_test.rb
140
133
  - test/misc/binary_search_test.rb
134
+ - test/misc/bit_vector_test.rb
141
135
  - test/misc/misc_pascal_test.rb
142
136
  - test/test_helper.rb
143
137
  - test/test_lilutils.rb