fsfifo 0.0.1 → 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.
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: []