fsfifo 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 1873cb49b135d37167ccf99dee689680af2db32e
4
- data.tar.gz: 7f444b3acba163fcaf2a559c715531829bc36cc6
2
+ SHA256:
3
+ metadata.gz: 8748caec92e8256a6c0aa81f7fa10ef2ea1a81597e2e87688faa355bd7fa1755
4
+ data.tar.gz: 2add29fd90ad7d7292ec5dbb3d8df5208bd19ecaef948092580bc08500494262
5
5
  SHA512:
6
- metadata.gz: c392f2a447179efda3885bef1599ba26826890fc5a326f000bfec3b46f96f3c0126312d23a78610e5562b8c3a3c4d08cccdee3b7f38ad10148609d67a0770cdb
7
- data.tar.gz: f05d3151607942b4fceb4638e91200813140182ac67d8976fa672d3defe7ed0ec84d6b45e45fc1a88f8a1edfddb3e6c2f3dff6ae2e04d29735f6ed62a5e48109
6
+ metadata.gz: 8a878c617f55ac3da93397e11724de0888470166d36a5bdc5ee91f4161a7622345bad3adb5f3f3a9c5726b8521e4ad1fb2183ad832cbf7389606774a3a70fbba
7
+ data.tar.gz: 06ba48adc9619477dd8d1a34651bba0582b7ae6eb9f1326f92504d538495cf9fcd0f1ebbb71529ff08d4bf3939ac8b8e53ba4d7948d83f2543c5046728d204df
data/Gemfile CHANGED
@@ -7,8 +7,10 @@ source "http://rubygems.org"
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  group :development do
9
9
  gem "shoulda", ">= 0"
10
- gem "rdoc", "~> 3.12"
11
- gem "bundler", "~> 1.3.5"
12
- gem "jeweler", "~> 1.8.4"
10
+ # gem "rdoc", "~> 6.3.1"
11
+ # gem "bundler", "~> 2.2.33"
12
+ gem "bundler", "~> 2.3.1"
13
+ gem "jeweler", "~> 2.3.9"
13
14
  gem "simplecov-rcov", ">= 0"
15
+ gem "test-unit", ">= 0"
14
16
  end
data/Rakefile CHANGED
@@ -25,7 +25,9 @@ Jeweler::Tasks.new do |gem|
25
25
  end
26
26
  Jeweler::RubygemsDotOrgTasks.new
27
27
 
28
+ # $stderr.puts "LOAD_PATH in Rakefile (size: #{$LOAD_PATH.size}): #{$LOAD_PATH}"
28
29
  require 'rake/testtask'
30
+ require 'test-unit'
29
31
  Rake::TestTask.new(:test) do |test|
30
32
  test.libs << 'lib' << 'test'
31
33
  #test.pattern = 'test/**/test_*.rb'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.3
data/fsfifo.gemspec ADDED
@@ -0,0 +1,56 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: fsfifo 0.0.3 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "fsfifo".freeze
9
+ s.version = "0.0.3"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["YAMAMOTO, Masayuki".freeze]
14
+ s.date = "2023-02-12"
15
+ s.description = "Fixed size FIFO, LIFO, and Array.".freeze
16
+ s.email = "martin.route66.blues+github@gmail.com".freeze
17
+ s.extra_rdoc_files = [
18
+ "LICENSE.txt",
19
+ "ReadMe.md"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ "Gemfile",
24
+ "LICENSE.txt",
25
+ "Rakefile",
26
+ "ReadMe.md",
27
+ "VERSION",
28
+ "fsfifo.gemspec",
29
+ "lib/fsfifo.rb",
30
+ "test/helper.rb",
31
+ "test/test_fsfifo.rb"
32
+ ]
33
+ s.homepage = "http://github.com/mephistobooks/fsfifo".freeze
34
+ s.licenses = ["MIT".freeze]
35
+ s.rubygems_version = "3.3.7".freeze
36
+ s.summary = "Fixed size FIFO.".freeze
37
+
38
+ if s.respond_to? :specification_version then
39
+ s.specification_version = 4
40
+ end
41
+
42
+ if s.respond_to? :add_runtime_dependency then
43
+ s.add_development_dependency(%q<shoulda>.freeze, [">= 0"])
44
+ s.add_development_dependency(%q<bundler>.freeze, ["~> 2.3.1"])
45
+ s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
46
+ s.add_development_dependency(%q<simplecov-rcov>.freeze, [">= 0"])
47
+ s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
48
+ else
49
+ s.add_dependency(%q<shoulda>.freeze, [">= 0"])
50
+ s.add_dependency(%q<bundler>.freeze, ["~> 2.3.1"])
51
+ s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
52
+ s.add_dependency(%q<simplecov-rcov>.freeze, [">= 0"])
53
+ s.add_dependency(%q<test-unit>.freeze, [">= 0"])
54
+ end
55
+ end
56
+
data/lib/fsfifo.rb CHANGED
@@ -10,28 +10,50 @@
10
10
  #
11
11
  class FSArray < Array
12
12
 
13
- #
14
- # FSArray#new( n )
15
- # FSArray#new( size: n, of_enbl: true, of_proc: Proc.new{...} )
16
- #
17
- def initialize( args = {} )
18
-
19
- if args.class == Fixnum
20
- args = { size: args, wm_size: args }
21
- end
22
-
13
+ FSARRAY_SIZE_DEFAULT = 1
14
+
15
+ # Fixed-size Array.
16
+ # ==== Args
17
+ # _size :: size of FSArray.
18
+ # size: :: same above.
19
+ # of_enable: :: Overflow proc enable: true (enable)/false (disable)
20
+ # of_proc: :: Overflow proc itself.
21
+ # uf_enable: :: Underflow proc enable: true (enable)/false (disable)
22
+ # uf_proc: :: Underflow proc itself.
23
+ # wm_size: Water mark ( <= fsarray size )
24
+ # wm_proc: Water mark proc.
25
+ # ==== Usage
26
+ # * FSArray#new( n )
27
+ # * FSArray#new( size: n, of_enable: true, of_proc: Proc.new{...} )
28
+ # * FSArray.new[ -1 ] :: newly pushed data.
29
+ # * FSArray.new[ 0 ] :: first-out data.
30
+ # ==== Return
31
+ # Object of FSArray.
32
+ def initialize( _size = FSARRAY_SIZE_DEFAULT,
33
+ size: FSARRAY_SIZE_DEFAULT,
34
+ of_enable: false, of_proc: Proc.new{ raise "Overflow!" },
35
+ uf_enable: false, uf_proc: Proc.new{ raise "Underflow!" },
36
+ push_enable: false, push_proc: Proc.new{},
37
+ wm_size: 1,
38
+ wm_enable: false, wm_proc: Proc.new{ raise "Reached WM!" }
39
+ )
40
+
41
+ raise "Watermark #{wm_size} is out of range[0,#{size}]" if
42
+ wm_size < 0 or wm_size > size
43
+
44
+ size = _size if _size != FSARRAY_SIZE_DEFAULT
23
45
  @opt = {
24
- :size => 1,
25
- :of_enbl => false,
26
- :of_proc => Proc.new{},
27
- :uf_enbl => false,
28
- :uf_proc => Proc.new{},
29
- :push_enbl => false, #TODO.
30
- :push_proc => Proc.new{},
31
- :wm_size => 1,
32
- :wm_enbl => false,
33
- :wm_proc => Proc.new{},
34
- }.merge( args )
46
+ :size => size,
47
+ :of_enable => of_enable,
48
+ :of_proc => of_proc,
49
+ :uf_enable => uf_enable,
50
+ :uf_proc => uf_proc,
51
+ :push_enable => push_enable, #TODO.
52
+ :push_proc => push_proc,
53
+ :wm_size => wm_size,
54
+ :wm_enable => wm_enable,
55
+ :wm_proc => wm_proc,
56
+ }
35
57
 
36
58
  @shifted = nil #TODO.
37
59
 
@@ -41,19 +63,15 @@ class FSArray < Array
41
63
  end
42
64
 
43
65
  #
44
- # Over/underflow callback methods getter/setter, etc.
66
+ # Over/Underflow callback methods getter/setter, etc.
45
67
  #
46
- def of_proc; @opt[:of_proc]; end
47
- def of_proc=( newp ); @opt[:of_proc] = newp; end
48
- def of_enable; @opt[:of_enbl] = true; end
49
- def of_disable; @opt[:of_enbl] = false; end
50
- def of_enable?; @opt[:of_enbl] ; end
51
-
52
- def uf_proc; @opt[:uf_proc]; end
53
- def uf_proc=( newp ); @opt[:uf_proc] = newp; end
54
- def uf_enable; @opt[:uf_enbl] = true; end
55
- def uf_disable; @opt[:uf_enbl] = false; end
56
- def uf_enable?; @opt[:uf_enbl] ; end
68
+ ["o", "u"].each{|which|
69
+ eval("def #{which}f_proc; @opt[:#{which}f_proc]; end")
70
+ eval("def #{which}f_proc=(newp); @opt[:#{which}f_proc] = newp; end")
71
+ eval("def #{which}f_enable?; @opt[:#{which}f_enable]; end")
72
+ eval("def #{which}f_enable; @opt[:#{which}f_enable] = true; end")
73
+ eval("def #{which}f_disable; @opt[:#{which}f_enable] = false; end")
74
+ }
57
75
 
58
76
  #
59
77
  # FIFO and data size-related methods.
@@ -77,14 +95,11 @@ class FSArray < Array
77
95
  # shift and push - main methods of FSFIFO.
78
96
  #
79
97
  def shift
80
- ret = shift_org
81
98
 
82
99
  # callback method when under flow is enabled.
83
- if self.size == 0
84
- if @opt[:uf_enbl]
85
- @opt[:uf_proc].call
86
- end
87
- end
100
+ @opt[:uf_proc].call if self.size == 0 and @opt[:uf_enable]
101
+
102
+ ret = shift_org
88
103
 
89
104
  return ret
90
105
  end
@@ -93,7 +108,7 @@ class FSArray < Array
93
108
 
94
109
  #
95
110
  push_org( obj )
96
-
111
+
97
112
  #
98
113
  of_called = false
99
114
  wm_called = false
@@ -102,13 +117,13 @@ class FSArray < Array
102
117
  shift_org
103
118
 
104
119
  # overflow callback.
105
- if @opt[:of_enbl] and not(of_called)
120
+ if @opt[:of_enable] and not(of_called)
106
121
  @opt[:of_proc].call
107
122
  of_called = true
108
123
  end
109
124
 
110
125
  # TODO.watermark callback.
111
- if @opt[:wm_enbl] and not(wm_called)
126
+ if @opt[:wm_enable] and not(wm_called)
112
127
  @opt[:wm_proc].call
113
128
  wm_called = true
114
129
  else
data/test/helper.rb CHANGED
@@ -11,12 +11,14 @@ rescue Bundler::BundlerError => e
11
11
  $stderr.puts "Run `bundle install` to install missing gems"
12
12
  exit e.status_code
13
13
  end
14
- require 'test/unit'
14
+ # require 'test-unit'
15
15
  require 'shoulda'
16
16
 
17
17
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
18
18
  $LOAD_PATH.unshift(File.dirname(__FILE__))
19
+ # $stdout.puts "LOAD_PATH (size: #{$LOAD_PATH.size}): #{$LOAD_PATH}"
19
20
  require 'fsfifo'
21
+ require 'test-unit'
20
22
 
21
23
  class Test::Unit::TestCase
22
24
  end
data/test/test_fsfifo.rb CHANGED
@@ -4,9 +4,6 @@
4
4
  #
5
5
 
6
6
  # Unit Test Lib.
7
- #require "rubygems"
8
- #gem "test-unit"
9
- #require "test/unit"
10
7
  require 'helper'
11
8
  require 'test/unit'
12
9
 
@@ -26,8 +23,8 @@ class TestFSArray < Test::Unit::TestCase
26
23
  @of_proc_called = false
27
24
  @uf_proc_called = false
28
25
 
29
- @fifo.of_proc = Proc.new { p "of called."; @of_proc_called ^= true }
30
- @fifo.uf_proc = Proc.new { p "uf called."; @uf_proc_called ^= true }
26
+ @fifo.of_proc = Proc.new { p "of called."; @of_proc_called = true }
27
+ @fifo.uf_proc = Proc.new { p "uf called."; @uf_proc_called = true }
31
28
  end
32
29
 
33
30
  def teardown
@@ -35,13 +32,17 @@ class TestFSArray < Test::Unit::TestCase
35
32
  end
36
33
 
37
34
  ####
38
-
35
+
39
36
  def test_new
40
37
 
41
38
  ff = FSFIFO.new( size: 10 )
42
39
  assert_equal( 0, ff.size )
43
40
  assert_equal( 10, ff.fifosize )
44
41
 
42
+ ff = FSFIFO.new( 2 )
43
+ assert_equal( 0, ff.size )
44
+ assert_equal( 2, ff.fifosize )
45
+
45
46
  end
46
47
 
47
48
  def test_size
@@ -76,6 +77,7 @@ class TestFSArray < Test::Unit::TestCase
76
77
  assert_equal( 1, @fifo.size )
77
78
  assert_equal( 1, @fifo.fifosize )
78
79
  assert_equal( 'a', @fifo[0] )
80
+ assert_equal( 'a', @fifo[-1] )
79
81
 
80
82
  ret = @fifo.shift
81
83
  assert_equal( 0, @fifo.size )
@@ -87,6 +89,7 @@ class TestFSArray < Test::Unit::TestCase
87
89
  assert_equal( 1, @fifo.size )
88
90
  assert_equal( 1, @fifo.fifosize )
89
91
  assert_equal( 'c', @fifo[0] )
92
+ assert_equal( 'c', @fifo[-1] )
90
93
 
91
94
  end
92
95
 
@@ -102,31 +105,39 @@ class TestFSArray < Test::Unit::TestCase
102
105
  assert_equal( 1, @fifo.size )
103
106
  assert_equal( 4, @fifo.fifosize )
104
107
  assert_equal( 'm', ret.join )
108
+ assert_equal( 'm', @fifo[-1] )
105
109
 
106
110
  @fifo.push( 'o' )
107
111
  assert_equal( 2, @fifo.size )
108
112
  assert_equal( 4, @fifo.fifosize )
109
113
  assert_equal( 'mo', @fifo.join )
114
+ assert_equal( 'o', @fifo[-1] )
110
115
 
111
116
  @fifo.push( 'e' )
112
117
  assert_equal( 3, @fifo.size )
113
118
  assert_equal( 4, @fifo.fifosize )
114
119
  assert_equal( 'moe', @fifo.join )
120
+ assert_equal( 'm', @fifo[0] )
121
+ assert_equal( 'e', @fifo[-1] )
115
122
 
116
123
  @fifo.push( 'm' )
117
124
  assert_equal( 4, @fifo.size )
118
125
  assert_equal( 4, @fifo.fifosize )
119
126
  assert_equal( 'moem', @fifo.join )
127
+ assert_equal( 'm', @fifo[0] )
128
+ assert_equal( 'm', @fifo[-1] )
120
129
 
121
130
  @fifo.push( 'o' )
122
131
  assert_equal( 4, @fifo.size )
123
132
  assert_equal( 4, @fifo.fifosize )
124
133
  assert_equal( 'oemo', @fifo.join )
134
+ assert_equal( 'o', @fifo[-1] )
125
135
 
126
136
  @fifo.push( 'e' )
127
137
  assert_equal( 4, @fifo.size )
128
138
  assert_equal( 4, @fifo.fifosize )
129
139
  assert_equal( 'emoe', @fifo.join )
140
+ assert_equal( 'e', @fifo[-1] )
130
141
 
131
142
  end
132
143
 
@@ -159,9 +170,26 @@ class TestFSArray < Test::Unit::TestCase
159
170
  end
160
171
 
161
172
  ####
162
-
173
+
174
+ def test_default_uo
175
+
176
+ ff = FSFIFO.new( size: 3, of_enable: true, uf_enable: true )
177
+ assert_equal( 0, ff.size )
178
+ assert_equal( 3, ff.fifosize )
179
+
180
+ ff.push( 1 ); ff.push( 2 ); ff.push( 3 )
181
+ e = assert_raise( RuntimeError ){ ff.push( 4 ); }
182
+
183
+ 3.times { ff.shift; }
184
+ e = assert_raise( RuntimeError ){ ff.shift; }
185
+
186
+ end
187
+
163
188
  def test_of
164
189
 
190
+ assert_equal( 0, @fifo.size )
191
+ assert_equal( 1, @fifo.fifosize )
192
+
165
193
  @fifo.of_enable
166
194
  assert_equal( true, @fifo.of_enable? )
167
195
 
@@ -169,10 +197,12 @@ class TestFSArray < Test::Unit::TestCase
169
197
  @fifo.push( 2 )
170
198
  assert_equal( true, @of_proc_called )
171
199
 
200
+ @of_proc_called = false
172
201
  @fifo.push( 3 )
173
- assert_equal( false, @of_proc_called )
202
+ assert_equal( true, @of_proc_called )
174
203
 
175
204
  @fifo.of_disable
205
+ @of_proc_called = false
176
206
  @fifo.push( 4 )
177
207
  assert_equal( false, @of_proc_called )
178
208
 
@@ -180,17 +210,23 @@ class TestFSArray < Test::Unit::TestCase
180
210
 
181
211
  def test_uf
182
212
 
213
+ assert_equal( 0, @fifo.size )
214
+ assert_equal( 1, @fifo.fifosize )
215
+
183
216
  @fifo.uf_enable
184
217
  assert_equal( true, @fifo.uf_enable? )
185
218
 
219
+ @uf_proc_called = false
186
220
  @fifo.push( 1 )
187
221
  @fifo.shift
188
- assert_equal( true, @uf_proc_called )
189
-
190
- @fifo.push( 2 )
191
- @fifo.shift
192
222
  assert_equal( false, @uf_proc_called )
193
223
 
224
+ @uf_proc_called = false
225
+ @fifo.push( 1 )
226
+ 2.times{ @fifo.shift }
227
+ assert_equal( true, @uf_proc_called )
228
+
229
+ @uf_proc_called = false
194
230
  @fifo.push( 3 )
195
231
  @fifo.uf_disable
196
232
  @fifo.shift
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fsfifo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - YAMAMOTO, Masayuki
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-31 00:00:00.000000000 Z
11
+ date: 2023-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shoulda
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rdoc
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.12'
33
+ version: 2.3.1
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '3.12'
40
+ version: 2.3.1
41
41
  - !ruby/object:Gem::Dependency
42
- name: bundler
42
+ name: jeweler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.3.5
47
+ version: 2.3.9
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.3.5
54
+ version: 2.3.9
55
55
  - !ruby/object:Gem::Dependency
56
- name: jeweler
56
+ name: simplecov-rcov
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 1.8.4
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 1.8.4
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: simplecov-rcov
70
+ name: test-unit
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  description: Fixed size FIFO, LIFO, and Array.
@@ -86,13 +86,15 @@ executables: []
86
86
  extensions: []
87
87
  extra_rdoc_files:
88
88
  - LICENSE.txt
89
+ - ReadMe.md
89
90
  files:
90
- - .document
91
+ - ".document"
91
92
  - Gemfile
92
93
  - LICENSE.txt
93
94
  - Rakefile
94
95
  - ReadMe.md
95
96
  - VERSION
97
+ - fsfifo.gemspec
96
98
  - lib/fsfifo.rb
97
99
  - test/helper.rb
98
100
  - test/test_fsfifo.rb
@@ -100,24 +102,23 @@ homepage: http://github.com/mephistobooks/fsfifo
100
102
  licenses:
101
103
  - MIT
102
104
  metadata: {}
103
- post_install_message:
105
+ post_install_message:
104
106
  rdoc_options: []
105
107
  require_paths:
106
108
  - lib
107
109
  required_ruby_version: !ruby/object:Gem::Requirement
108
110
  requirements:
109
- - - '>='
111
+ - - ">="
110
112
  - !ruby/object:Gem::Version
111
113
  version: '0'
112
114
  required_rubygems_version: !ruby/object:Gem::Requirement
113
115
  requirements:
114
- - - '>='
116
+ - - ">="
115
117
  - !ruby/object:Gem::Version
116
118
  version: '0'
117
119
  requirements: []
118
- rubyforge_project:
119
- rubygems_version: 2.0.6
120
- signing_key:
120
+ rubygems_version: 3.3.7
121
+ signing_key:
121
122
  specification_version: 4
122
123
  summary: Fixed size FIFO.
123
124
  test_files: []