diff --git a/benchmarks.yml b/benchmarks.yml index a4fa9e07..cd388de9 100644 --- a/benchmarks.yml +++ b/benchmarks.yml @@ -51,6 +51,24 @@ shipit: # # Other Benchmarks # +addressable-equality: + desc: addressable URI equality comparison +addressable-getters: + desc: addressable URI component getters (scheme, host, port, path, query, fragment) +addressable-join: + desc: addressable URI joining/merging paths +addressable-merge: + desc: addressable URI merging options +addressable-new: + desc: addressable URI construction from hash +addressable-normalize: + desc: addressable URI normalization +addressable-parse: + desc: addressable URI parsing (simple and complex URIs) +addressable-setters: + desc: addressable URI component setters (scheme, host, path modification) +addressable-to-s: + desc: addressable URI to string conversion binarytrees: desc: binarytrees from the Computer Language Benchmarks Game. blurhash: diff --git a/benchmarks/addressable-equality/Gemfile b/benchmarks/addressable-equality/Gemfile new file mode 100644 index 00000000..55401701 --- /dev/null +++ b/benchmarks/addressable-equality/Gemfile @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "addressable" diff --git a/benchmarks/addressable-equality/Gemfile.lock b/benchmarks/addressable-equality/Gemfile.lock new file mode 100644 index 00000000..75a6aa88 --- /dev/null +++ b/benchmarks/addressable-equality/Gemfile.lock @@ -0,0 +1,16 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + public_suffix (6.0.2) + +PLATFORMS + aarch64-linux + ruby + +DEPENDENCIES + addressable + +BUNDLED WITH + 2.6.9 diff --git a/benchmarks/addressable-equality/benchmark.rb b/benchmarks/addressable-equality/benchmark.rb new file mode 100644 index 00000000..ca48dffe --- /dev/null +++ b/benchmarks/addressable-equality/benchmark.rb @@ -0,0 +1,15 @@ +require_relative "../../harness/loader" + +Dir.chdir __dir__ +use_gemfile + +require "addressable/uri" + +run_benchmark(100) do + 10000.times do + # URI equality comparison + uri1 = Addressable::URI.parse("http://example.com") + uri2 = Addressable::URI.parse("http://example.com:80/") + uri1 == uri2 + end +end diff --git a/benchmarks/addressable-getters/Gemfile b/benchmarks/addressable-getters/Gemfile new file mode 100644 index 00000000..55401701 --- /dev/null +++ b/benchmarks/addressable-getters/Gemfile @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "addressable" diff --git a/benchmarks/addressable-getters/Gemfile.lock b/benchmarks/addressable-getters/Gemfile.lock new file mode 100644 index 00000000..75a6aa88 --- /dev/null +++ b/benchmarks/addressable-getters/Gemfile.lock @@ -0,0 +1,16 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + public_suffix (6.0.2) + +PLATFORMS + aarch64-linux + ruby + +DEPENDENCIES + addressable + +BUNDLED WITH + 2.6.9 diff --git a/benchmarks/addressable-getters/benchmark.rb b/benchmarks/addressable-getters/benchmark.rb new file mode 100644 index 00000000..301439f2 --- /dev/null +++ b/benchmarks/addressable-getters/benchmark.rb @@ -0,0 +1,21 @@ +require_relative "../../harness/loader" + +Dir.chdir __dir__ +use_gemfile + +require "addressable/uri" + +COMPLEX_URI = "https://user:pass@example.com:8080/path/to/resource?query=value&foo=bar#fragment" + +run_benchmark(100) do + 10000.times do + # Component access + uri = Addressable::URI.parse(COMPLEX_URI) + uri.scheme + uri.host + uri.port + uri.path + uri.query + uri.fragment + end +end diff --git a/benchmarks/addressable-join/Gemfile b/benchmarks/addressable-join/Gemfile new file mode 100644 index 00000000..55401701 --- /dev/null +++ b/benchmarks/addressable-join/Gemfile @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "addressable" diff --git a/benchmarks/addressable-join/Gemfile.lock b/benchmarks/addressable-join/Gemfile.lock new file mode 100644 index 00000000..75a6aa88 --- /dev/null +++ b/benchmarks/addressable-join/Gemfile.lock @@ -0,0 +1,16 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + public_suffix (6.0.2) + +PLATFORMS + aarch64-linux + ruby + +DEPENDENCIES + addressable + +BUNDLED WITH + 2.6.9 diff --git a/benchmarks/addressable-join/benchmark.rb b/benchmarks/addressable-join/benchmark.rb new file mode 100644 index 00000000..a4df7b39 --- /dev/null +++ b/benchmarks/addressable-join/benchmark.rb @@ -0,0 +1,14 @@ +require_relative "../../harness/loader" + +Dir.chdir __dir__ +use_gemfile + +require "addressable/uri" + +run_benchmark(100) do + 10000.times do + # URI joining + base = Addressable::URI.parse("http://example.com/a/b/c") + base.join("../d") + end +end diff --git a/benchmarks/addressable-merge/Gemfile b/benchmarks/addressable-merge/Gemfile new file mode 100644 index 00000000..55401701 --- /dev/null +++ b/benchmarks/addressable-merge/Gemfile @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "addressable" diff --git a/benchmarks/addressable-merge/Gemfile.lock b/benchmarks/addressable-merge/Gemfile.lock new file mode 100644 index 00000000..75a6aa88 --- /dev/null +++ b/benchmarks/addressable-merge/Gemfile.lock @@ -0,0 +1,16 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + public_suffix (6.0.2) + +PLATFORMS + aarch64-linux + ruby + +DEPENDENCIES + addressable + +BUNDLED WITH + 2.6.9 diff --git a/benchmarks/addressable-merge/benchmark.rb b/benchmarks/addressable-merge/benchmark.rb new file mode 100644 index 00000000..39c07f2d --- /dev/null +++ b/benchmarks/addressable-merge/benchmark.rb @@ -0,0 +1,16 @@ +require_relative "../../harness/loader" + +Dir.chdir __dir__ +use_gemfile + +require "addressable/uri" + +SIMPLE_URI = "http://example.com/path" + +run_benchmark(100) do + 10000.times do + # URI merging + uri = Addressable::URI.parse(SIMPLE_URI) + uri.merge(scheme: "https", port: 8080) + end +end diff --git a/benchmarks/addressable-new/Gemfile b/benchmarks/addressable-new/Gemfile new file mode 100644 index 00000000..55401701 --- /dev/null +++ b/benchmarks/addressable-new/Gemfile @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "addressable" diff --git a/benchmarks/addressable-new/Gemfile.lock b/benchmarks/addressable-new/Gemfile.lock new file mode 100644 index 00000000..75a6aa88 --- /dev/null +++ b/benchmarks/addressable-new/Gemfile.lock @@ -0,0 +1,16 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + public_suffix (6.0.2) + +PLATFORMS + aarch64-linux + ruby + +DEPENDENCIES + addressable + +BUNDLED WITH + 2.6.9 diff --git a/benchmarks/addressable-new/benchmark.rb b/benchmarks/addressable-new/benchmark.rb new file mode 100644 index 00000000..5fd9731e --- /dev/null +++ b/benchmarks/addressable-new/benchmark.rb @@ -0,0 +1,19 @@ +require_relative "../../harness/loader" + +Dir.chdir __dir__ +use_gemfile + +require "addressable/uri" + +run_benchmark(100) do + 10000.times do + # URI construction from hash + Addressable::URI.new( + scheme: "https", + host: "example.com", + port: 443, + path: "/path", + query: "foo=bar" + ) + end +end diff --git a/benchmarks/addressable-normalize/Gemfile b/benchmarks/addressable-normalize/Gemfile new file mode 100644 index 00000000..55401701 --- /dev/null +++ b/benchmarks/addressable-normalize/Gemfile @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "addressable" diff --git a/benchmarks/addressable-normalize/Gemfile.lock b/benchmarks/addressable-normalize/Gemfile.lock new file mode 100644 index 00000000..75a6aa88 --- /dev/null +++ b/benchmarks/addressable-normalize/Gemfile.lock @@ -0,0 +1,16 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + public_suffix (6.0.2) + +PLATFORMS + aarch64-linux + ruby + +DEPENDENCIES + addressable + +BUNDLED WITH + 2.6.9 diff --git a/benchmarks/addressable-normalize/benchmark.rb b/benchmarks/addressable-normalize/benchmark.rb new file mode 100644 index 00000000..121a8ad0 --- /dev/null +++ b/benchmarks/addressable-normalize/benchmark.rb @@ -0,0 +1,14 @@ +require_relative "../../harness/loader" + +Dir.chdir __dir__ +use_gemfile + +require "addressable/uri" + +run_benchmark(100) do + 10000.times do + # URI normalization + uri = Addressable::URI.parse("HTTP://EXAMPLE.COM:80/path") + uri.normalize + end +end diff --git a/benchmarks/addressable-parse/Gemfile b/benchmarks/addressable-parse/Gemfile new file mode 100644 index 00000000..55401701 --- /dev/null +++ b/benchmarks/addressable-parse/Gemfile @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "addressable" diff --git a/benchmarks/addressable-parse/Gemfile.lock b/benchmarks/addressable-parse/Gemfile.lock new file mode 100644 index 00000000..75a6aa88 --- /dev/null +++ b/benchmarks/addressable-parse/Gemfile.lock @@ -0,0 +1,16 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + public_suffix (6.0.2) + +PLATFORMS + aarch64-linux + ruby + +DEPENDENCIES + addressable + +BUNDLED WITH + 2.6.9 diff --git a/benchmarks/addressable-parse/benchmark.rb b/benchmarks/addressable-parse/benchmark.rb new file mode 100644 index 00000000..02d29a83 --- /dev/null +++ b/benchmarks/addressable-parse/benchmark.rb @@ -0,0 +1,18 @@ +require_relative "../../harness/loader" + +Dir.chdir __dir__ +use_gemfile + +require "addressable/uri" + +# Sample URIs for testing +SIMPLE_URI = "http://example.com/path" +COMPLEX_URI = "https://user:pass@example.com:8080/path/to/resource?query=value&foo=bar#fragment" + +run_benchmark(100) do + 10000.times do + # URI parsing - simple and complex + Addressable::URI.parse(SIMPLE_URI) + Addressable::URI.parse(COMPLEX_URI) + end +end diff --git a/benchmarks/addressable-setters/Gemfile b/benchmarks/addressable-setters/Gemfile new file mode 100644 index 00000000..55401701 --- /dev/null +++ b/benchmarks/addressable-setters/Gemfile @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "addressable" diff --git a/benchmarks/addressable-setters/Gemfile.lock b/benchmarks/addressable-setters/Gemfile.lock new file mode 100644 index 00000000..75a6aa88 --- /dev/null +++ b/benchmarks/addressable-setters/Gemfile.lock @@ -0,0 +1,16 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + public_suffix (6.0.2) + +PLATFORMS + aarch64-linux + ruby + +DEPENDENCIES + addressable + +BUNDLED WITH + 2.6.9 diff --git a/benchmarks/addressable-setters/benchmark.rb b/benchmarks/addressable-setters/benchmark.rb new file mode 100644 index 00000000..41ee88b3 --- /dev/null +++ b/benchmarks/addressable-setters/benchmark.rb @@ -0,0 +1,18 @@ +require_relative "../../harness/loader" + +Dir.chdir __dir__ +use_gemfile + +require "addressable/uri" + +SIMPLE_URI = "http://example.com/path" + +run_benchmark(100) do + 10000.times do + # Component modification + uri = Addressable::URI.parse(SIMPLE_URI) + uri.scheme = "https" + uri.host = "newhost.com" + uri.path = "/newpath" + end +end diff --git a/benchmarks/addressable-to-s/Gemfile b/benchmarks/addressable-to-s/Gemfile new file mode 100644 index 00000000..55401701 --- /dev/null +++ b/benchmarks/addressable-to-s/Gemfile @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "addressable" diff --git a/benchmarks/addressable-to-s/Gemfile.lock b/benchmarks/addressable-to-s/Gemfile.lock new file mode 100644 index 00000000..75a6aa88 --- /dev/null +++ b/benchmarks/addressable-to-s/Gemfile.lock @@ -0,0 +1,16 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + public_suffix (6.0.2) + +PLATFORMS + aarch64-linux + ruby + +DEPENDENCIES + addressable + +BUNDLED WITH + 2.6.9 diff --git a/benchmarks/addressable-to-s/benchmark.rb b/benchmarks/addressable-to-s/benchmark.rb new file mode 100644 index 00000000..355d931f --- /dev/null +++ b/benchmarks/addressable-to-s/benchmark.rb @@ -0,0 +1,16 @@ +require_relative "../../harness/loader" + +Dir.chdir __dir__ +use_gemfile + +require "addressable/uri" + +COMPLEX_URI = "https://user:pass@example.com:8080/path/to/resource?query=value&foo=bar#fragment" + +run_benchmark(100) do + 10000.times do + # URI to string conversion + uri = Addressable::URI.parse(COMPLEX_URI) + uri.to_s + end +end