xqsr3 0.8.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 +7 -0
- data/LICENSE +27 -0
- data/README.md +26 -0
- data/lib/xqsr3/command_line_utilities/map_option_string.rb +137 -0
- data/lib/xqsr3/containers/frequency_map.rb +473 -0
- data/lib/xqsr3/containers/multi_map.rb +383 -0
- data/lib/xqsr3/diagnostics/exception_utilities.rb +216 -0
- data/lib/xqsr3/doc_.rb +116 -0
- data/lib/xqsr3/extensions/enumerable.rb +4 -0
- data/lib/xqsr3/extensions/enumerable/collect_with_index.rb +71 -0
- data/lib/xqsr3/extensions/enumerable/unique.rb +102 -0
- data/lib/xqsr3/extensions/io.rb +3 -0
- data/lib/xqsr3/extensions/io/writelines.rb +66 -0
- data/lib/xqsr3/extensions/kernel.rb +3 -0
- data/lib/xqsr3/extensions/kernel/raise_with_options.rb +68 -0
- data/lib/xqsr3/extensions/string.rb +5 -0
- data/lib/xqsr3/extensions/string/ends_with.rb +8 -0
- data/lib/xqsr3/extensions/string/map_option_string.rb +8 -0
- data/lib/xqsr3/extensions/string/starts_with.rb +8 -0
- data/lib/xqsr3/extensions/string/to_symbol.rb +8 -0
- data/lib/xqsr3/extensions/test/unit.rb +5 -0
- data/lib/xqsr3/extensions/test/unit/assert_eql.rb +18 -0
- data/lib/xqsr3/extensions/test/unit/assert_not.rb +18 -0
- data/lib/xqsr3/extensions/test/unit/assert_not_eql.rb +18 -0
- data/lib/xqsr3/io/writelines.rb +192 -0
- data/lib/xqsr3/quality/parameter_checking.rb +343 -0
- data/lib/xqsr3/string_utilities/ends_with.rb +134 -0
- data/lib/xqsr3/string_utilities/starts_with.rb +127 -0
- data/lib/xqsr3/string_utilities/to_symbol.rb +145 -0
- data/lib/xqsr3/version.rb +68 -0
- data/test/unit/command_line_utilities/tc_map_option_string.rb +39 -0
- data/test/unit/command_line_utilities/ts_all.rb +13 -0
- data/test/unit/containers/tc_frequency_map.rb +738 -0
- data/test/unit/containers/tc_multi_map.rb +640 -0
- data/test/unit/containers/ts_all.rb +13 -0
- data/test/unit/diagnostics/tc_exception_utilities.rb +221 -0
- data/test/unit/diagnostics/ts_all.rb +13 -0
- data/test/unit/extensions/enumerable/tc_collect_with_index.rb +36 -0
- data/test/unit/extensions/enumerable/tc_unique.rb +47 -0
- data/test/unit/extensions/enumerable/ts_all.rb +13 -0
- data/test/unit/extensions/io/tc_writelines.rb +110 -0
- data/test/unit/extensions/io/ts_all.rb +13 -0
- data/test/unit/extensions/kernel/tc_raise_with_options.rb +239 -0
- data/test/unit/extensions/kernel/ts_all.rb +13 -0
- data/test/unit/extensions/string/tc_ends_with.rb +70 -0
- data/test/unit/extensions/string/tc_map_option_string.rb +37 -0
- data/test/unit/extensions/string/tc_starts_with.rb +70 -0
- data/test/unit/extensions/string/tc_to_symbol.rb +51 -0
- data/test/unit/extensions/string/ts_all.rb +13 -0
- data/test/unit/extensions/ts_all.rb +13 -0
- data/test/unit/io/tc_writelines.rb +200 -0
- data/test/unit/io/ts_all.rb +13 -0
- data/test/unit/quality/tc_parameter_checking.rb +181 -0
- data/test/unit/quality/ts_all.rb +13 -0
- data/test/unit/tc_version.rb +37 -0
- data/test/unit/ts_all.rb +13 -0
- metadata +101 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '../../../../lib')
|
4
|
+
|
5
|
+
require 'xqsr3/extensions/string/to_symbol'
|
6
|
+
|
7
|
+
require 'xqsr3/extensions/test/unit'
|
8
|
+
require 'test/unit'
|
9
|
+
|
10
|
+
class Test_String_to_symbol < Test::Unit::TestCase
|
11
|
+
|
12
|
+
def test_empty_string
|
13
|
+
|
14
|
+
assert_nil ''.to_symbol
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_simple_string
|
18
|
+
|
19
|
+
assert_equal :a, 'a'.to_symbol
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_string_with_spaces
|
23
|
+
|
24
|
+
assert_equal :some_symbol, 'some symbol'.to_symbol
|
25
|
+
assert_nil 'some symbol'.to_symbol(reject_spaces: true)
|
26
|
+
assert_nil 'some symbol'.to_symbol(reject_whitespace: true)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_string_with_tabs
|
30
|
+
|
31
|
+
assert_equal :some_symbol, "some\tsymbol".to_symbol
|
32
|
+
assert_nil "some\tsymbol".to_symbol(reject_tabs: true)
|
33
|
+
assert_nil "some\tsymbol".to_symbol(reject_whitespace: true)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_string_with_hyphens
|
37
|
+
|
38
|
+
assert_equal :some_symbol, 'some-symbol'.to_symbol
|
39
|
+
assert_nil 'some-symbol'.to_symbol(reject_hyphens: true)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_string_with_transform_characters
|
43
|
+
|
44
|
+
assert_nil 'some#funky$symbol'.to_symbol
|
45
|
+
assert_nil 'some#funky$symbol'.to_symbol transform_characters: [ ?', ?$ ]
|
46
|
+
assert_nil 'some#funky$symbol'.to_symbol transform_characters: [ ?#, ?' ]
|
47
|
+
assert_equal :some_funky_symbol, 'some#funky$symbol'.to_symbol(transform_characters: [ ?#, ?$ ])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
#
|
3
|
+
# executes all other tests
|
4
|
+
|
5
|
+
this_file = File.expand_path(__FILE__)
|
6
|
+
this_dir = File.expand_path(File.dirname(__FILE__))
|
7
|
+
|
8
|
+
# all tc_*rb in current directory
|
9
|
+
Dir[File.join(this_dir, 'tc_*rb')].each { |file| require file }
|
10
|
+
|
11
|
+
# all ts_*rb in immediate sub-directories
|
12
|
+
Dir[File.join(this_dir, '*', 'ts_*rb')].each { |file| require file }
|
13
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
#
|
3
|
+
# executes all other tests
|
4
|
+
|
5
|
+
this_file = File.expand_path(__FILE__)
|
6
|
+
this_dir = File.expand_path(File.dirname(__FILE__))
|
7
|
+
|
8
|
+
# all tc_*rb in current directory
|
9
|
+
Dir[File.join(this_dir, 'tc_*rb')].each { |file| require file }
|
10
|
+
|
11
|
+
# all ts_*rb in immediate sub-directories
|
12
|
+
Dir[File.join(this_dir, '*', 'ts_*rb')].each { |file| require file }
|
13
|
+
|
@@ -0,0 +1,200 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '../../../lib')
|
4
|
+
|
5
|
+
require 'xqsr3/io/writelines'
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
require 'stringio'
|
9
|
+
|
10
|
+
include ::Xqsr3::IO
|
11
|
+
|
12
|
+
class Test_Xqsr3_IO_writelines < Test::Unit::TestCase
|
13
|
+
|
14
|
+
def test_single_string
|
15
|
+
|
16
|
+
input = 'abc'
|
17
|
+
|
18
|
+
s = StringIO.new '', 'a'
|
19
|
+
|
20
|
+
r = ::Xqsr3::IO.writelines s, input
|
21
|
+
|
22
|
+
assert_equal 1, r
|
23
|
+
assert_equal "abc\n", s.string
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_single_string_in_array
|
27
|
+
|
28
|
+
input = [ 'abc' ]
|
29
|
+
|
30
|
+
s = StringIO.new '', 'a'
|
31
|
+
|
32
|
+
r = ::Xqsr3::IO.writelines s, input
|
33
|
+
|
34
|
+
assert_equal 1, r
|
35
|
+
assert_equal "abc\n", s.string
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_single_string_in_hash
|
39
|
+
|
40
|
+
input = { 'abc' => '' }
|
41
|
+
|
42
|
+
s = StringIO.new '', 'a'
|
43
|
+
|
44
|
+
r = ::Xqsr3::IO.writelines s, input
|
45
|
+
|
46
|
+
assert_equal 1, r
|
47
|
+
assert_equal "abc\n", s.string
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_two_strings_in_array
|
51
|
+
|
52
|
+
input = [ 'abc', 'def' ]
|
53
|
+
|
54
|
+
s = StringIO.new '', 'a'
|
55
|
+
|
56
|
+
r = ::Xqsr3::IO.writelines s, input
|
57
|
+
|
58
|
+
assert_equal 2, r
|
59
|
+
assert_equal "abc\ndef\n", s.string
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_two_strings_in_array_with_suppressed_eol
|
63
|
+
|
64
|
+
input = [ 'abc', 'def' ]
|
65
|
+
|
66
|
+
s = StringIO.new '', 'a'
|
67
|
+
|
68
|
+
r = ::Xqsr3::IO.writelines s, input, line_separator: ''
|
69
|
+
|
70
|
+
assert_equal 2, r
|
71
|
+
assert_equal "abcdef", s.string
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_two_strings_in_hash
|
75
|
+
|
76
|
+
input = { 'ab' => 'c', 'de' => 'f' }
|
77
|
+
|
78
|
+
s = StringIO.new '', 'a'
|
79
|
+
|
80
|
+
r = ::Xqsr3::IO.writelines s, input
|
81
|
+
|
82
|
+
assert_equal 2, r
|
83
|
+
assert_equal "abc\ndef\n", s.string
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_two_strings_in_hash_with_col_sep
|
87
|
+
|
88
|
+
input = { 'ab' => 'c', 'de' => 'f' }
|
89
|
+
|
90
|
+
s = StringIO.new '', 'a'
|
91
|
+
|
92
|
+
r = ::Xqsr3::IO.writelines s, input, column_separator: "\t"
|
93
|
+
|
94
|
+
assert_equal 2, r
|
95
|
+
assert_equal "ab\tc\nde\tf\n", s.string
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_ten_strings_in_array
|
99
|
+
|
100
|
+
input = (0...10).map { |i| i.to_s }
|
101
|
+
|
102
|
+
s = StringIO.new
|
103
|
+
|
104
|
+
r = ::Xqsr3::IO.writelines s, input
|
105
|
+
|
106
|
+
assert_equal 10, r
|
107
|
+
assert_equal "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n", s.string
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_strings_with_cr_in_array
|
111
|
+
|
112
|
+
input = [ "abc\n", "def\n", "ghi\n" ]
|
113
|
+
|
114
|
+
s = StringIO.new
|
115
|
+
|
116
|
+
r = ::Xqsr3::IO.writelines s, input
|
117
|
+
|
118
|
+
assert_equal 3, r
|
119
|
+
assert_equal "abc\ndef\nghi\n", s.string
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_strings_with_cr_in_array_and_line_sep
|
123
|
+
|
124
|
+
input = [ "abc\n", "def\n", "ghi\n" ]
|
125
|
+
|
126
|
+
s = StringIO.new
|
127
|
+
|
128
|
+
r = ::Xqsr3::IO.writelines s, input, line_separator: '|'
|
129
|
+
|
130
|
+
assert_equal 3, r
|
131
|
+
assert_equal "abc\n|def\n|ghi\n|", s.string
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_many_strings_in_array_with_eol
|
135
|
+
|
136
|
+
input = []
|
137
|
+
|
138
|
+
(0...1000).each { |n| input << "entry-#{n.to_s().rjust(4, '0')}\n" }
|
139
|
+
|
140
|
+
assert_equal 1000, input.size
|
141
|
+
|
142
|
+
s = StringIO.new
|
143
|
+
|
144
|
+
r = ::Xqsr3::IO.writelines s, input
|
145
|
+
|
146
|
+
assert_equal 1000, r
|
147
|
+
assert_equal "entry-0000\nentry-0001\n", s.string[0 ... 22]
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_many_strings_in_array_without_eol
|
151
|
+
|
152
|
+
input = []
|
153
|
+
|
154
|
+
(0...1000).each { |n| input << "entry-#{n.to_s().rjust(4, '0')}" }
|
155
|
+
|
156
|
+
assert_equal 1000, input.size
|
157
|
+
|
158
|
+
s = StringIO.new
|
159
|
+
|
160
|
+
r = ::Xqsr3::IO.writelines s, input
|
161
|
+
|
162
|
+
assert_equal 1000, r
|
163
|
+
assert_equal "entry-0000\nentry-0001\n", s.string[0 ... 22]
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_many_strings_in_array_with_eol_and_line_sep
|
167
|
+
|
168
|
+
input = []
|
169
|
+
|
170
|
+
(0...1000).each { |n| input << "entry-#{n.to_s().rjust(4, '0')}\n" }
|
171
|
+
|
172
|
+
assert_equal 1000, input.size
|
173
|
+
|
174
|
+
s = StringIO.new
|
175
|
+
|
176
|
+
r = ::Xqsr3::IO.writelines s, input, line_separator: '|'
|
177
|
+
|
178
|
+
assert_equal 1000, r
|
179
|
+
assert_equal "entry-0000\n|entry-0001\n|", s.string[0 ... 24]
|
180
|
+
end
|
181
|
+
|
182
|
+
def test_many_strings_in_array_without_eol_and_line_sep
|
183
|
+
|
184
|
+
input = []
|
185
|
+
|
186
|
+
(0...1000).each { |n| input << "entry-#{n.to_s().rjust(4, '0')}" }
|
187
|
+
|
188
|
+
assert_equal 1000, input.size
|
189
|
+
|
190
|
+
s = StringIO.new
|
191
|
+
|
192
|
+
r = ::Xqsr3::IO.writelines s, input, line_separator: '|'
|
193
|
+
|
194
|
+
assert_equal 1000, r
|
195
|
+
assert_equal "entry-0000|entry-0001|", s.string[0 ... 22]
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
# ############################## end of file ############################# #
|
200
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
#
|
3
|
+
# executes all other tests
|
4
|
+
|
5
|
+
this_file = File.expand_path(__FILE__)
|
6
|
+
this_dir = File.expand_path(File.dirname(__FILE__))
|
7
|
+
|
8
|
+
# all tc_*rb in current directory
|
9
|
+
Dir[File.join(this_dir, 'tc_*rb')].each { |file| require file }
|
10
|
+
|
11
|
+
# all ts_*rb in immediate sub-directories
|
12
|
+
Dir[File.join(this_dir, '*', 'ts_*rb')].each { |file| require file }
|
13
|
+
|
@@ -0,0 +1,181 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '../../../..', 'lib')
|
4
|
+
|
5
|
+
require 'xqsr3/quality/parameter_checking'
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
class Test_parameter_checks_as_separate_module < Test::Unit::TestCase
|
10
|
+
|
11
|
+
module TestConstants
|
12
|
+
end
|
13
|
+
include TestConstants
|
14
|
+
|
15
|
+
extend ::Xqsr3::Quality::ParameterChecking
|
16
|
+
|
17
|
+
|
18
|
+
# test 1
|
19
|
+
|
20
|
+
def check_method_1 a
|
21
|
+
|
22
|
+
self.class.check_param a, 'a'
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_1
|
26
|
+
|
27
|
+
assert_raise ArgumentError do
|
28
|
+
check_method_1(nil)
|
29
|
+
end
|
30
|
+
|
31
|
+
assert_equal true, check_method_1(true)
|
32
|
+
assert_equal '', check_method_1('')
|
33
|
+
assert_equal [], check_method_1([])
|
34
|
+
assert_equal Hash.new, check_method_1(Hash.new)
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
# test 2
|
39
|
+
|
40
|
+
def check_method_2 a, types, options = {}
|
41
|
+
|
42
|
+
self.class.check_param a, 'a', options.merge({ types: types })
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_2
|
46
|
+
|
47
|
+
assert_equal true, check_method_2(true, [ ::TrueClass ])
|
48
|
+
assert_equal true, check_method_2(true, [ ::TrueClass, ::String, ::Symbol ])
|
49
|
+
assert_raise TypeError do
|
50
|
+
check_method_2(true, [ ::String, ::Symbol, ::FalseClass ])
|
51
|
+
end
|
52
|
+
assert_equal true, check_method_2(true, [ ::TrueClass ], nothrow: true)
|
53
|
+
assert_nil check_method_2(true, [ ::FalseClass ], nothrow: true)
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
# test 3
|
58
|
+
|
59
|
+
def check_method_3 a, types, values, options = {}
|
60
|
+
|
61
|
+
self.class.check_param a, 'a', options.merge({ types: types, values: values })
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_3
|
65
|
+
|
66
|
+
assert_raise RangeError do
|
67
|
+
check_method_3(-1, nil, [ 0..2 ])
|
68
|
+
end
|
69
|
+
assert_equal 0, check_method_3(0, nil, [ 0..2 ])
|
70
|
+
assert_equal 1, check_method_3(1, nil, [ 0..2 ])
|
71
|
+
assert_equal 2, check_method_3(2, nil, [ 0..2 ])
|
72
|
+
assert_raise RangeError do
|
73
|
+
check_method_3(3, nil, [ 0..2 ])
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
# test 4
|
79
|
+
|
80
|
+
def check_method_4 a, types, values, options = {}, &block
|
81
|
+
|
82
|
+
self.class.check_param a, 'a', options.merge({ types: types, values: values }), &block
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_4
|
86
|
+
|
87
|
+
assert_equal 0, check_method_4(0, nil, nil)
|
88
|
+
assert_equal 0, check_method_4(0, nil, nil) { |n| 0 == n }
|
89
|
+
|
90
|
+
assert_raise RangeError do
|
91
|
+
check_method_4(-1, nil, nil) { |n| 0 == n }
|
92
|
+
end
|
93
|
+
|
94
|
+
assert_raise ArgumentError do
|
95
|
+
check_method_4('-1', nil, nil) { |n| 0 == n }
|
96
|
+
end
|
97
|
+
|
98
|
+
assert_raise TypeError do
|
99
|
+
check_method_4('-1', [ ::Numeric ], nil)
|
100
|
+
end
|
101
|
+
assert_raise ArgumentError do
|
102
|
+
check_method_4('-1', [ ::String ], [ '-2', '0', '+1', '+2' ])
|
103
|
+
end
|
104
|
+
assert_equal '-1', check_method_4('-1', [ ::String ], [ '-2', '-1', '0', '+1', '+2' ])
|
105
|
+
# assert_raise RangeError do
|
106
|
+
# check_method_4('-1', [ ::String ], [ '-2', '0', '+1', '+2' ]) {
|
107
|
+
# end
|
108
|
+
|
109
|
+
# check_param(id, 'id', types: ::Integer) { |v| raise ArgumentError, "'id' must be a positive integer" unless v > 0 }
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
# test 5
|
116
|
+
|
117
|
+
def check_method_5 a, options = {}
|
118
|
+
|
119
|
+
self.class.check_param a, 'a', options
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_5
|
123
|
+
|
124
|
+
assert_equal "", check_method_5("", require_empty: true)
|
125
|
+
assert_equal "a", check_method_5("a", reject_empty: true)
|
126
|
+
|
127
|
+
assert_raise ArgumentError do
|
128
|
+
check_method_5("", reject_empty: true)
|
129
|
+
end
|
130
|
+
|
131
|
+
if false
|
132
|
+
assert_raise ArgumentError do
|
133
|
+
check_method_5(nil)
|
134
|
+
end
|
135
|
+
|
136
|
+
assert_equal true, check_method_5(true)
|
137
|
+
assert_equal '', check_method_5('')
|
138
|
+
assert_equal [], check_method_5([])
|
139
|
+
assert_equal Hash.new, check_method_5(Hash.new)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
|
144
|
+
# test 6
|
145
|
+
|
146
|
+
def check_method_6 a, types, values, options = {}, &block
|
147
|
+
|
148
|
+
self.class.check_param a, 'a', options.merge({ types: types, values: values }), &block
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_6
|
152
|
+
|
153
|
+
begin
|
154
|
+
check_method_6 '', [ ::Hash ], []
|
155
|
+
|
156
|
+
assert(false, 'should not get here')
|
157
|
+
rescue TypeError => ax
|
158
|
+
|
159
|
+
assert_match /^parameter 'a' \(String\) must be an instance of Hash$/, ax.message
|
160
|
+
rescue => x
|
161
|
+
|
162
|
+
assert(false, "wrong exception type (#{x.class})")
|
163
|
+
end
|
164
|
+
|
165
|
+
|
166
|
+
begin
|
167
|
+
check_method_6 '', [ ::String ], [ 'b', 'c', 'd' ]
|
168
|
+
|
169
|
+
assert(false, 'should not get here')
|
170
|
+
rescue ArgumentError => ax
|
171
|
+
|
172
|
+
assert_match /^parameter 'a' value '' not found equal\/within any of required values or ranges$/, ax.message
|
173
|
+
rescue => x
|
174
|
+
|
175
|
+
assert(false, "wrong exception type (#{x.class})")
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
181
|
+
|