libpath-ruby 0.2.2 → 0.2.2.2

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.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +33 -0
  3. data/README.md +25 -8
  4. data/examples/path_from_arg0.md +43 -43
  5. data/examples/path_from_arg0.rb +25 -23
  6. data/lib/libpath/constants/unix.rb +74 -74
  7. data/lib/libpath/constants/windows.rb +75 -75
  8. data/lib/libpath/constants.rb +20 -20
  9. data/lib/libpath/diagnostics/parameter_checking.rb +27 -26
  10. data/lib/libpath/diagnostics.rb +1 -1
  11. data/lib/libpath/exceptions/libpath_base_exception.rb +20 -21
  12. data/lib/libpath/exceptions/malformed_name_exception.rb +27 -27
  13. data/lib/libpath/exceptions.rb +1 -1
  14. data/lib/libpath/form/unix.rb +118 -118
  15. data/lib/libpath/form/windows.rb +228 -214
  16. data/lib/libpath/form.rb +20 -21
  17. data/lib/libpath/internal_/array.rb +57 -57
  18. data/lib/libpath/internal_/platform.rb +30 -31
  19. data/lib/libpath/internal_/string.rb +25 -20
  20. data/lib/libpath/internal_/unix/form.rb +124 -119
  21. data/lib/libpath/internal_/windows/drive.rb +80 -75
  22. data/lib/libpath/internal_/windows/form.rb +205 -194
  23. data/lib/libpath/libpath.rb +4 -1
  24. data/lib/libpath/path/unix.rb +120 -118
  25. data/lib/libpath/path/windows.rb +126 -124
  26. data/lib/libpath/path.rb +21 -21
  27. data/lib/libpath/util/unix.rb +261 -261
  28. data/lib/libpath/util/windows.rb +403 -403
  29. data/lib/libpath/util.rb +20 -20
  30. data/lib/libpath/version.rb +25 -26
  31. data/lib/libpath.rb +1 -1
  32. data/test/performance/benchmark_drive_letter.rb +50 -10
  33. data/test/performance/benchmark_gsub_string_or_regex.rb +27 -23
  34. data/test/performance/benchmark_rindex2.rb +56 -48
  35. data/test/performance/benchmark_split.rb +16 -10
  36. data/test/unit/compare/ts_all.rb +4 -4
  37. data/test/unit/equate/ts_all.rb +4 -4
  38. data/test/unit/equate/unix/ts_all.rb +4 -4
  39. data/test/unit/equate/windows/ts_all.rb +4 -4
  40. data/test/unit/exceptions/tc_libpath_base_exception.rb +10 -8
  41. data/test/unit/exceptions/tc_malformed_name_exception.rb +14 -12
  42. data/test/unit/exceptions/ts_all.rb +4 -4
  43. data/test/unit/form/tc_absolute_functions.rb +242 -240
  44. data/test/unit/form/ts_all.rb +4 -4
  45. data/test/unit/form/unix/tc_absolute_functions.rb +158 -155
  46. data/test/unit/form/unix/ts_all.rb +4 -4
  47. data/test/unit/form/windows/tc_absolute_functions.rb +628 -625
  48. data/test/unit/form/windows/ts_all.rb +4 -4
  49. data/test/unit/internal_/tc_array.rb +36 -32
  50. data/test/unit/internal_/ts_all.rb +4 -4
  51. data/test/unit/internal_/unix/form/tc_slash_functions.rb +38 -35
  52. data/test/unit/internal_/unix/form/ts_all.rb +4 -4
  53. data/test/unit/internal_/unix/tc_split_path.rb +387 -384
  54. data/test/unit/internal_/unix/ts_all.rb +4 -4
  55. data/test/unit/internal_/windows/form/tc_get_windows_volume.rb +157 -153
  56. data/test/unit/internal_/windows/form/tc_slash_functions.rb +39 -35
  57. data/test/unit/internal_/windows/form/ts_all.rb +4 -4
  58. data/test/unit/internal_/windows/tc_split_path.rb +874 -869
  59. data/test/unit/internal_/windows/ts_all.rb +4 -4
  60. data/test/unit/parse/ts_all.rb +4 -4
  61. data/test/unit/path/tc_path.rb +732 -732
  62. data/test/unit/path/ts_all.rb +4 -4
  63. data/test/unit/path/unix/tc_path.rb +544 -540
  64. data/test/unit/path/unix/ts_all.rb +4 -4
  65. data/test/unit/path/windows/tc_path.rb +608 -603
  66. data/test/unit/path/windows/ts_all.rb +4 -4
  67. data/test/unit/tc_version.rb +25 -22
  68. data/test/unit/ts_all.rb +4 -4
  69. data/test/unit/util/tc_combine_paths.rb +110 -105
  70. data/test/unit/util/tc_derive_relative_path.rb +8 -3
  71. data/test/unit/util/tc_make_path_canonical.rb +142 -138
  72. data/test/unit/util/ts_all.rb +4 -4
  73. data/test/unit/util/unix/tc_combine_paths.rb +38 -34
  74. data/test/unit/util/unix/tc_derive_relative_path.rb +80 -75
  75. data/test/unit/util/unix/tc_make_path_absolute.rb +74 -70
  76. data/test/unit/util/unix/tc_make_path_canonical.rb +95 -90
  77. data/test/unit/util/unix/ts_all.rb +4 -4
  78. data/test/unit/util/windows/tc_combine_paths.rb +82 -77
  79. data/test/unit/util/windows/tc_derive_relative_path.rb +98 -93
  80. data/test/unit/util/windows/tc_make_path_absolute.rb +105 -101
  81. data/test/unit/util/windows/tc_make_path_canonical.rb +158 -153
  82. data/test/unit/util/windows/ts_all.rb +4 -4
  83. metadata +9 -8
data/lib/libpath/util.rb CHANGED
@@ -3,40 +3,40 @@ require 'libpath/internal_/platform'
3
3
 
4
4
  if ::LibPath::Internal_::Platform::Constants::PLATFORM_IS_WINDOWS then
5
5
 
6
- require 'libpath/util/windows'
6
+ require 'libpath/util/windows'
7
7
  else
8
8
 
9
- require 'libpath/util/unix'
9
+ require 'libpath/util/unix'
10
10
  end
11
11
 
12
- module LibPath # :nodoc:
13
- module Util # :nodoc:
14
12
 
15
- if ::LibPath::Internal_::Platform::Constants::PLATFORM_IS_WINDOWS then
13
+ module LibPath
14
+ module Util
16
15
 
17
- extend ::LibPath::Util::Windows
18
- include ::LibPath::Util::Windows
19
- else
16
+ if ::LibPath::Internal_::Platform::Constants::PLATFORM_IS_WINDOWS then
20
17
 
21
- extend ::LibPath::Util::Unix
22
- include ::LibPath::Util::Unix
23
- end
18
+ extend ::LibPath::Util::Windows
19
+ include ::LibPath::Util::Windows
20
+ else
24
21
 
25
- # @!visibility private
26
- def self.extended receiver # :nodoc:
22
+ extend ::LibPath::Util::Unix
23
+ include ::LibPath::Util::Unix
24
+ end
27
25
 
28
- $stderr.puts "#{receiver} extended by #{self}" if $DEBUG
29
- end
26
+ # @!visibility private
27
+ def self.extended receiver # :nodoc:
30
28
 
31
- # @!visibility private
32
- def self.included receiver # :nodoc:
29
+ $stderr.puts "#{receiver} extended by #{self}" if $DEBUG
30
+ end
33
31
 
34
- $stderr.puts "#{receiver} included #{self}" if $DEBUG
35
- end
32
+ # @!visibility private
33
+ def self.included receiver # :nodoc:
36
34
 
35
+ $stderr.puts "#{receiver} included #{self}" if $DEBUG
36
+ end
37
37
  end # module Util
38
38
  end # module LibPath
39
39
 
40
- # ############################## end of file ############################# #
41
40
 
41
+ # ############################## end of file ############################# #
42
42
 
@@ -1,16 +1,16 @@
1
-
2
1
  # ######################################################################## #
3
- # File: libpath/version.rb
2
+ # File: libpath/version.rb
4
3
  #
5
- # Purpose: Version for libpath.Ruby library
4
+ # Purpose: Version for libpath.Ruby library
6
5
  #
7
- # Created: 8th January 2019
8
- # Updated: 18th May 2019
6
+ # Created: 8th January 2019
7
+ # Updated: 7th April 2024
9
8
  #
10
- # Home: http://github.com/synesissoftware/libpath.Ruby
9
+ # Home: http://github.com/synesissoftware/libpath.Ruby
11
10
  #
12
- # Author: Matthew Wilson
11
+ # Author: Matthew Wilson
13
12
  #
13
+ # Copyright (c) 2019-2024, Matthew Wilson and Synesis Information Systems
14
14
  # Copyright (c) 2019, Matthew Wilson and Synesis Software
15
15
  # All rights reserved.
16
16
  #
@@ -44,31 +44,30 @@
44
44
  # ######################################################################## #
45
45
 
46
46
 
47
-
48
47
  =begin
49
48
  =end
50
49
 
51
- module LibPath # :nodoc:
52
-
53
- # Current version of the libpath.Ruby library
54
- VERSION = '0.2.2'
50
+ module LibPath
55
51
 
56
- private
57
- VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i } # :nodoc:
58
- public
59
- # Major version of the libpath.Ruby library
60
- VERSION_MAJOR = VERSION_PARTS_[0] # :nodoc:
61
- # Minor version of the libpath.Ruby library
62
- VERSION_MINOR = VERSION_PARTS_[1] # :nodoc:
63
- # Patch version of the libpath.Ruby library
64
- VERSION_PATCH = VERSION_PARTS_[2] # :nodoc:
65
- # Revision version of the libpath.Ruby library
66
- VERSION_REVISION = VERSION_PATCH # :nodoc:
67
- # Sub-patch version of the libpath.Ruby library
68
- VERSION_SUBPATCH = VERSION_PARTS_[3] # :nodoc:
52
+ # Current version of the libpath.Ruby library
53
+ VERSION = '0.2.2.2'
69
54
 
55
+ private
56
+ # @!visibility private
57
+ VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i } # :nodoc:
58
+ public
59
+ # Major version of the libpath.Ruby library
60
+ VERSION_MAJOR = VERSION_PARTS_[0]
61
+ # Minor version of the libpath.Ruby library
62
+ VERSION_MINOR = VERSION_PARTS_[1]
63
+ # Patch version of the libpath.Ruby library
64
+ VERSION_PATCH = VERSION_PARTS_[2]
65
+ # Revision version of the libpath.Ruby library
66
+ VERSION_REVISION = VERSION_PATCH
67
+ # Sub-patch version of the libpath.Ruby library
68
+ VERSION_SUBPATCH = VERSION_PARTS_[3]
70
69
  end # module LibPath
71
70
 
72
- # ############################## end of file ############################# #
73
71
 
72
+ # ############################## end of file ############################# #
74
73
 
data/lib/libpath.rb CHANGED
@@ -7,6 +7,6 @@ require 'libpath/util'
7
7
 
8
8
  require 'libpath/version'
9
9
 
10
- # ############################## end of file ############################# #
11
10
 
11
+ # ############################## end of file ############################# #
12
12
 
@@ -1,31 +1,71 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
3
  #############################################################################
4
- # File: test/performance/benchmark_drive_letter.rb
4
+ # File: test/performance/benchmark_drive_letter.rb
5
5
  #
6
- # Purpose: Determines whether it's better to use String-case of regex
7
- # to match Windows-drive letters
6
+ # Purpose: Determines whether it's better to use String-case of regex to
7
+ # match Windows-drive letters
8
8
  #
9
- # Created: 8th January 2019
10
- # Updated: 9th January 2019
9
+ # Created: 8th January 2019
10
+ # Updated: 6th April 2024
11
11
  #
12
- # Author: Matthew Wilson
12
+ # Author: Matthew Wilson
13
13
  #
14
14
  #############################################################################
15
15
 
16
+
16
17
  $:.unshift File.join(File.dirname(__FILE__), *(['..'] * 2), 'lib')
17
18
 
19
+
18
20
  require 'libpath/internal_/windows/drive'
19
21
 
20
22
  require 'benchmark'
21
23
 
22
- ITERATIONS = 100000
23
24
 
24
- ITEMS = (0...ITERATIONS).map { rand(0...100) }.map { |n| n > 51 ? ' ' : (n % 26 + (n < 26 ? 'A' : 'a').ord).chr }
25
+ include ::LibPath::Internal_::Windows
26
+
27
+
28
+ ITERATIONS = 100000
29
+
30
+ ITEMS = (0...ITERATIONS).map { rand(0...100) }.map { |n| n > 51 ? ' ' : (n % 26 + (n < 26 ? 'A' : 'a').ord).chr }
31
+
32
+ def is_drive_letter_1? c
33
+
34
+ if c.valid_encoding?
35
+
36
+ co = c.ord
37
+
38
+ return true if co >= 65 && co <= 90
39
+
40
+ return true if co >= 97 && co <= 122
41
+
42
+ return false
43
+ end
44
+ end
45
+
46
+ def is_drive_letter_2? c
47
+
48
+ co = c.ord
49
+
50
+ return true if (64..90).include? co
51
+
52
+ return true if (97..122).include? co
53
+
54
+ return false
55
+ end
56
+
57
+
58
+ # benchmark
25
59
 
26
60
  Benchmark.bm(10) do |x|
27
61
 
28
- x.report('Regex:') { ITEMS.each { |ch| /^[a-z]/i =~ ch } }
29
- x.report('cidl?:') { ITEMS.each { |ch| ::LibPath::Internal_::Windows::Drive.character_is_drive_letter?(ch) } }
62
+ x.report('Regex:') { ITEMS.each { |ch| /^[a-zA-Z]/ =~ ch } }
63
+ x.report('Regex/i:') { ITEMS.each { |ch| /^[a-z]/i =~ ch } }
64
+ x.report('cidl?:') { ITEMS.each { |ch| Drive.character_is_drive_letter?(ch) } }
65
+ x.report('idl-1?:') { ITEMS.each { |ch| is_drive_letter_1?(ch) } }
66
+ x.report('idl-2?:') { ITEMS.each { |ch| is_drive_letter_2?(ch) } }
30
67
  end
31
68
 
69
+
70
+ # ############################## end of file ############################# #
71
+
@@ -1,45 +1,49 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
3
  #############################################################################
4
- # File: test/performance/benchmark_gsub_string_or_regex.rb
4
+ # File: test/performance/benchmark_gsub_string_or_regex.rb
5
5
  #
6
- # Purpose: Determine whether gsub using a string is faster than using a
7
- # regex
6
+ # Purpose: Determine whether gsub using a string is faster than using regex
8
7
  #
9
- # Created: 27th January 2019
10
- # Updated: 27th January 2019
8
+ # Created: 27th January 2019
9
+ # Updated: 6th April 2024
11
10
  #
12
- # Author: Matthew Wilson
11
+ # Author: Matthew Wilson
13
12
  #
14
13
  #############################################################################
15
14
 
15
+
16
16
  $:.unshift File.join(File.dirname(__FILE__), *(['..'] * 2), 'lib')
17
17
 
18
+
18
19
  require 'benchmark'
19
20
 
20
- ITERATIONS = 100000
21
21
 
22
- STRINGS = [
22
+ ITERATIONS = 100000
23
+
24
+ STRINGS = [
23
25
 
24
- 'abcdefghijklmnopqrstuvwxyz',
25
- 'a\\b/c\\d/e\\f/g\\h/i\\j/k\\l/m\\n/o\\p/q\\r/s\\t/u\\v/w\\x/y\\z/',
26
- ''
26
+ 'abcdefghijklmnopqrstuvwxyz',
27
+ 'a\\b/c\\d/e\\f/g\\h/i\\j/k\\l/m\\n/o\\p/q\\r/s\\t/u\\v/w\\x/y\\z/',
28
+ ''
27
29
  ]
28
30
 
29
- h = {
30
- '/' => '\\'
31
- }
32
31
 
33
- Benchmark.bm(24) do |x|
32
+ # benchmark
34
33
 
35
- x.report('gsub by str:') { (0...ITERATIONS).each { STRINGS.each { |s| s.gsub('/', '\\') }}}
36
- x.report('gsub by str (?):') { (0...ITERATIONS).each { STRINGS.each { |s| s.gsub('/', '\\') if s.include?('/') }}}
37
- x.report('gsub by regex:') { (0...ITERATIONS).each { STRINGS.each { |s| s.gsub(/\//, '\\') }}}
38
- x.report('gsub by regex (?):') { (0...ITERATIONS).each { STRINGS.each { |s| s.gsub(/\//, '\\') if s.include?('/') }}}
39
- x.report('tr:') { (0...ITERATIONS).each { STRINGS.each { |s| s.tr('/', '\\') }}}
40
- x.report('tr (?):') { (0...ITERATIONS).each { STRINGS.each { |s| s.tr('/', '\\') if s.include?('/') }}}
41
- x.report('tr!:') { (0...ITERATIONS).each { STRINGS.each { |s| s.tr!('/', '\\') }}}
34
+ Benchmark.bm(20) do |x|
42
35
 
43
- puts
36
+ x.report('gsub by str:') { (0...ITERATIONS).each { STRINGS.each { |s| s.gsub('/', '\\') }}}
37
+ x.report('gsub by str (?):') { (0...ITERATIONS).each { STRINGS.each { |s| s.gsub('/', '\\') if s.include?('/') }}}
38
+ x.report('gsub by regex:') { (0...ITERATIONS).each { STRINGS.each { |s| s.gsub(/\//, '\\') }}}
39
+ x.report('gsub by regex (?):') { (0...ITERATIONS).each { STRINGS.each { |s| s.gsub(/\//, '\\') if s.include?('/') }}}
40
+ x.report('tr:') { (0...ITERATIONS).each { STRINGS.each { |s| s.tr('/', '\\') }}}
41
+ x.report('tr (?):') { (0...ITERATIONS).each { STRINGS.each { |s| s.tr('/', '\\') if s.include?('/') }}}
42
+ x.report('tr!:') { (0...ITERATIONS).each { STRINGS.each { |s| s.tr!('/', '\\') }}}
43
+
44
+ puts
44
45
  end
45
46
 
47
+
48
+ # ############################## end of file ############################# #
49
+
@@ -1,109 +1,117 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
3
  #############################################################################
4
- # File: test/performance/benchmark_rindex2.rb
4
+ # File: test/performance/benchmark_rindex2.rb
5
5
  #
6
- # Purpose: Determines whether it's better to use rindex() twice for
7
- # Windows-slashes or once with a regex
6
+ # Purpose: Determines whether it's better to use rindex() twice for
7
+ # Windows-slashes or once with a regex
8
8
  #
9
- # Created: 8th January 2019
10
- # Updated: 8th January 2019
9
+ # Created: 8th January 2019
10
+ # Updated: 6th April 2024
11
11
  #
12
- # Author: Matthew Wilson
12
+ # Author: Matthew Wilson
13
13
  #
14
14
  #############################################################################
15
15
 
16
+
16
17
  $:.unshift File.join(File.dirname(__FILE__), *(['..'] * 2), 'lib')
17
18
 
19
+
18
20
  require 'benchmark'
19
21
 
20
- ITERATIONS = 100000
21
22
 
22
- SMALL_STRINGS = [
23
+ ITERATIONS = 100000
23
24
 
24
- 'C:\dir0\dir1/dir2',
25
- 'C:\dir0\dir1/dir2\dir3\dir4/',
26
- 'C:/dir0/dir1\dir2',
25
+ LONG_STRINGS = [
26
+
27
+ 'C:' + '\dir' * 1000,
28
+ 'C:' + '/dir' * 1000,
29
+ 'C:' + '\dir/dir' * 500,
27
30
  ]
28
31
 
29
- LONG_STRINGS = [
32
+ SMALL_STRINGS = [
30
33
 
31
- 'C:' + '\dir' * 1000,
32
- 'C:' + '/dir' * 1000,
33
- 'C:' + '\dir/dir' * 500,
34
+ 'C:\dir0\dir1/dir2',
35
+ 'C:\dir0\dir1/dir2\dir3\dir4/',
36
+ 'C:/dir0/dir1\dir2',
34
37
  ]
35
38
 
39
+
36
40
  def by_two_calls(s)
37
41
 
38
- ri_backward = s.rindex('\\')
39
- ri_forward = s.rindex('/')
42
+ ri_backward = s.rindex('\\')
43
+ ri_forward = s.rindex('/')
40
44
 
41
- if ri_backward
45
+ if ri_backward
42
46
 
43
- if ri_forward
47
+ if ri_forward
44
48
 
45
- ri_forward > ri_backward ? ri_forward : ri_backward
46
- else
49
+ ri_forward > ri_backward ? ri_forward : ri_backward
50
+ else
47
51
 
48
- ri_backward
49
- end
50
- else
52
+ ri_backward
53
+ end
54
+ else
51
55
 
52
- ri_forward
53
- end
56
+ ri_forward
57
+ end
54
58
  end
55
59
 
56
60
  def by_regex(s)
57
61
 
58
- s.rindex(/[\\\/]/)
62
+ s.rindex(/[\\\/]/)
59
63
  end
60
64
 
61
65
  def by_manual(s)
62
66
 
63
- (1..s.size).each do |ix|
67
+ (1..s.size).each do |ix|
64
68
 
65
- ch = s[-ix]
69
+ ch = s[-ix]
66
70
 
67
- if '/' == ch || '\\' == ch
71
+ if '/' == ch || '\\' == ch
68
72
 
69
- return s.size - ix
70
- end
71
- end
73
+ return s.size - ix
74
+ end
75
+ end
72
76
  end
73
77
 
78
+
74
79
  # check
75
80
 
76
81
  SMALL_STRINGS.each do |ss|
77
82
 
78
- r_2c = by_two_calls(ss)
79
- r_re = by_regex(ss)
80
- r_man = by_manual(ss)
83
+ r_2c = by_two_calls(ss)
84
+ r_re = by_regex(ss)
85
+ r_man = by_manual(ss)
81
86
 
82
- if r_2c != r_re || r_2c != r_man
87
+ if r_2c != r_re || r_2c != r_man
83
88
 
84
- abort "For string '#{ss}' results differ: by_two_calls()=#{r_2c}; by_regex()=#{r_re}; by_manual()=#{r_man}"
85
- end
89
+ abort "For string '#{ss}' results differ: by_two_calls()=#{r_2c}; by_regex()=#{r_re}; by_manual()=#{r_man}"
90
+ end
86
91
  end
87
92
 
88
93
  LONG_STRINGS.each do |ss|
89
94
 
90
- r_2c = by_two_calls(ss)
91
- r_re = by_regex(ss)
92
- r_man = by_manual(ss)
95
+ r_2c = by_two_calls(ss)
96
+ r_re = by_regex(ss)
97
+ r_man = by_manual(ss)
93
98
 
94
- if r_2c != r_re || r_2c != r_man
99
+ if r_2c != r_re || r_2c != r_man
95
100
 
96
- abort "For string '#{ss}' results differ: by_two_calls()=#{r_2c}; by_regex()=#{r_re}; by_manual()=#{r_man}"
97
- end
101
+ abort "For string '#{ss}' results differ: by_two_calls()=#{r_2c}; by_regex()=#{r_re}; by_manual()=#{r_man}"
102
+ end
98
103
  end
99
104
 
105
+
100
106
  # benchmark
101
107
 
102
108
  Benchmark.bm(12) do |x|
103
109
 
104
- x.report('rindex x 2:') { (0...ITERATIONS).each { SMALL_STRINGS.each { |ss| by_two_calls(ss) } } }
105
- x.report('Regex:') { (0...ITERATIONS).each { SMALL_STRINGS.each { |ss| by_regex(ss) } } }
106
- x.report('manual:') { (0...ITERATIONS).each { SMALL_STRINGS.each { |ss| by_manual(ss) } } }
110
+ x.report('rindex x 2:') { (0...ITERATIONS).each { SMALL_STRINGS.each { |ss| by_two_calls(ss) } } }
111
+ x.report('Regex:') { (0...ITERATIONS).each { SMALL_STRINGS.each { |ss| by_regex(ss) } } }
112
+ x.report('manual:') { (0...ITERATIONS).each { SMALL_STRINGS.each { |ss| by_manual(ss) } } }
107
113
  end
108
114
 
109
115
 
116
+ # ############################## end of file ############################# #
117
+
@@ -1,32 +1,38 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
3
  #############################################################################
4
- # File: test/performance/benchmark_split.rb
4
+ # File: test/performance/benchmark_split.rb
5
5
  #
6
- # Purpose: Determines whether split is faster without regex
6
+ # Purpose: Determines whether split is faster without regex
7
7
  #
8
- # Created: 15th January 2019
9
- # Updated: 15th January 2019
8
+ # Created: 15th January 2019
9
+ # Updated: 6th April 2024
10
10
  #
11
- # Author: Matthew Wilson
11
+ # Author: Matthew Wilson
12
12
  #
13
13
  #############################################################################
14
14
 
15
+
15
16
  $:.unshift File.join(File.dirname(__FILE__), *(['..'] * 2), 'lib')
16
17
 
18
+
17
19
  require 'benchmark'
18
20
 
19
- ITERATIONS = 10
20
21
 
21
- STRINGS = (1..1000).map { |n| '/abc' * n }
22
+ ITERATIONS = 10
23
+
24
+ STRINGS = (1..1000).map { |n| '/abc' * n }
25
+
22
26
 
23
27
  # benchmark
24
28
 
25
29
  Benchmark.bm(15) do |x|
26
30
 
27
- x.report('by char:') { (0...ITERATIONS).each { STRINGS.each { |s| s.split('/') } } }
28
- x.report('by regex:') { (0...ITERATIONS).each { STRINGS.each { |s| s.split(/\//) } } }
29
- x.report('by regex (sl):') { (0...ITERATIONS).each { STRINGS.each { |s| s.split(/[\\\/]/) } } }
31
+ x.report('by char:') { (0...ITERATIONS).each { STRINGS.each { |s| s.split('/') } } }
32
+ x.report('by regex:') { (0...ITERATIONS).each { STRINGS.each { |s| s.split(/\//) } } }
33
+ x.report('by regex (sl):') { (0...ITERATIONS).each { STRINGS.each { |s| s.split(/[\\\/]/) } } }
30
34
  end
31
35
 
32
36
 
37
+ # ############################## end of file ############################# #
38
+
@@ -7,16 +7,16 @@ this_dir = File.expand_path(File.dirname(__FILE__))
7
7
  # all tc_*rb in current directory
8
8
  Dir[File.join(this_dir, 'tc_*rb')].each do |file|
9
9
 
10
- $stderr.puts "requiring file '#{file}'" if $DEBUG
10
+ $stderr.puts "requiring file '#{file}'" if $DEBUG
11
11
 
12
- require file
12
+ require file
13
13
  end
14
14
 
15
15
  # all ts_*rb in immediate sub-directories
16
16
  Dir[File.join(this_dir, '*', 'ts_*rb')].each do |file|
17
17
 
18
- $stderr.puts "requiring file '#{file}'" if $DEBUG
18
+ $stderr.puts "requiring file '#{file}'" if $DEBUG
19
19
 
20
- require file
20
+ require file
21
21
  end
22
22
 
@@ -7,16 +7,16 @@ this_dir = File.expand_path(File.dirname(__FILE__))
7
7
  # all tc_*rb in current directory
8
8
  Dir[File.join(this_dir, 'tc_*rb')].each do |file|
9
9
 
10
- $stderr.puts "requiring file '#{file}'" if $DEBUG
10
+ $stderr.puts "requiring file '#{file}'" if $DEBUG
11
11
 
12
- require file
12
+ require file
13
13
  end
14
14
 
15
15
  # all ts_*rb in immediate sub-directories
16
16
  Dir[File.join(this_dir, '*', 'ts_*rb')].each do |file|
17
17
 
18
- $stderr.puts "requiring file '#{file}'" if $DEBUG
18
+ $stderr.puts "requiring file '#{file}'" if $DEBUG
19
19
 
20
- require file
20
+ require file
21
21
  end
22
22
 
@@ -7,16 +7,16 @@ this_dir = File.expand_path(File.dirname(__FILE__))
7
7
  # all tc_*rb in current directory
8
8
  Dir[File.join(this_dir, 'tc_*rb')].each do |file|
9
9
 
10
- $stderr.puts "requiring file '#{file}'" if $DEBUG
10
+ $stderr.puts "requiring file '#{file}'" if $DEBUG
11
11
 
12
- require file
12
+ require file
13
13
  end
14
14
 
15
15
  # all ts_*rb in immediate sub-directories
16
16
  Dir[File.join(this_dir, '*', 'ts_*rb')].each do |file|
17
17
 
18
- $stderr.puts "requiring file '#{file}'" if $DEBUG
18
+ $stderr.puts "requiring file '#{file}'" if $DEBUG
19
19
 
20
- require file
20
+ require file
21
21
  end
22
22
 
@@ -7,16 +7,16 @@ this_dir = File.expand_path(File.dirname(__FILE__))
7
7
  # all tc_*rb in current directory
8
8
  Dir[File.join(this_dir, 'tc_*rb')].each do |file|
9
9
 
10
- $stderr.puts "requiring file '#{file}'" if $DEBUG
10
+ $stderr.puts "requiring file '#{file}'" if $DEBUG
11
11
 
12
- require file
12
+ require file
13
13
  end
14
14
 
15
15
  # all ts_*rb in immediate sub-directories
16
16
  Dir[File.join(this_dir, '*', 'ts_*rb')].each do |file|
17
17
 
18
- $stderr.puts "requiring file '#{file}'" if $DEBUG
18
+ $stderr.puts "requiring file '#{file}'" if $DEBUG
19
19
 
20
- require file
20
+ require file
21
21
  end
22
22
 
@@ -9,19 +9,21 @@ require 'xqsr3/extensions/test/unit'
9
9
 
10
10
  class Test_LibPathBaseException < Test::Unit::TestCase
11
11
 
12
- include ::LibPath::Exceptions
12
+ include ::LibPath::Exceptions
13
13
 
14
- def test_exception_exists_and_is_a_class
14
+ def test_exception_exists_and_is_a_class
15
15
 
16
- assert defined?(LibPathBaseException)
16
+ assert defined?(LibPathBaseException)
17
17
 
18
- assert LibPathBaseException.is_a?(::Class)
19
- end
18
+ assert LibPathBaseException.is_a?(::Class)
19
+ end
20
20
 
21
- def test_cannot_be_initialised
21
+ def test_cannot_be_initialised
22
22
 
23
- assert_raise_with_message(::NoMethodError, /private.*method.*new.*LibPathBaseException/) { LibPathBaseException.new(nil) }
24
- end
23
+ assert_raise_with_message(::NoMethodError, /private.*method.*new.*LibPathBaseException/) { LibPathBaseException.new(nil) }
24
+ end
25
25
  end
26
26
 
27
27
 
28
+ # ############################## end of file ############################# #
29
+
@@ -8,24 +8,26 @@ require 'test/unit'
8
8
 
9
9
  class Test_MalformedNameException < Test::Unit::TestCase
10
10
 
11
- include ::LibPath::Exceptions
11
+ include ::LibPath::Exceptions
12
12
 
13
- def test_class_exists
13
+ def test_class_exists
14
14
 
15
- assert defined?(MalformedNameException)
15
+ assert defined?(MalformedNameException)
16
16
 
17
- assert MalformedNameException.is_a?(::Class)
18
- end
17
+ assert MalformedNameException.is_a?(::Class)
18
+ end
19
19
 
20
- def test_can_be_initialised
20
+ def test_can_be_initialised
21
21
 
22
- mnx = MalformedNameException.new("abc\0def")
22
+ mnx = MalformedNameException.new("abc\0def")
23
23
 
24
- assert_not_nil mnx
25
- assert_not_nil mnx.name
26
- assert_match /abc.*def/, mnx.name
27
- assert_match /malformed name 'abc.*def'/, mnx.message
28
- end
24
+ assert_not_nil mnx
25
+ assert_not_nil mnx.name
26
+ assert_match /abc.*def/, mnx.name
27
+ assert_match /malformed name 'abc.*def'/, mnx.message
28
+ end
29
29
  end
30
30
 
31
31
 
32
+ # ############################## end of file ############################# #
33
+