From 397e9e593684b1f011423a8a1174725687ee267d Mon Sep 17 00:00:00 2001 From: Salomon Charabati Date: Mon, 13 Nov 2023 14:56:12 -0800 Subject: [PATCH] Fix #2851 Add benchmark rake task for evaluating time execution. Fixes Co-authored-by: Rubens Fernandes --- tasks/benchmark.rake | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 tasks/benchmark.rake diff --git a/tasks/benchmark.rake b/tasks/benchmark.rake new file mode 100644 index 0000000000..212ecb599c --- /dev/null +++ b/tasks/benchmark.rake @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'benchmark' +require 'faker' + +desc 'Benchmarking every Faker generator' +task :benchmark do + count = BenchmarkHelper.all_methods.count + Benchmark.bmbm do |x| + x.report("Number of generators: #{count}") do + 100.times do + BenchmarkHelper.all_methods.each{ |method_name| eval(method_name) } + end + end + end +end + +class BenchmarkHelper + class << self + def all_methods + subclasses.map do |subclass| + subclass_methods(subclass).flatten + end.flatten.sort + end + + def subclasses + Faker.constants.delete_if do |subclass| + %i[Base Bank Books Cat Char Base58 ChileRut CLI Config Creature Date Dog DragonBall Dota ElderScrolls Fallout Games GamesHalfLife HeroesOfTheStorm Internet JapaneseMedia LeagueOfLegends Movies Myst Overwatch OnePiece Pokemon Religion Sports SwordArtOnline TvShows Time VERSION Witcher WorldOfWarcraft Zelda].include?(subclass) + end.sort + end + + def subclass_methods(subclass) + eval("Faker::#{subclass}.public_methods(false) - Faker::Base.public_methods(false)").sort.map do |method| + "Faker::#{subclass}.#{method}" + end.sort + end + end +end