Runtime assertions for Ruby literal.fun
ruby
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 96 lines 2.0 kB view raw
1#!/usr/bin/env ruby 2# frozen_string_literal: true 3 4require "literal" 5require "benchmark/ips" 6require "dry-initializer" 7require "dry-types" 8require "dry-struct" 9 10module Types 11 include Dry.Types() 12end 13 14class NormalClass 15 def initialize(first_name:, last_name:, age:) 16 @first_name = first_name 17 @last_name = last_name 18 @age = age 19 end 20end 21 22class DryClass 23 extend Dry::Initializer 24 25 option :first_name, Types::Strict::String 26 option :last_name, Types::Strict::String 27 option :age, Types::Strict::Integer 28end 29 30class LiteralClass 31 extend Literal::Properties 32 33 prop :first_name, String 34 prop :last_name, String 35 prop :age, Integer 36end 37 38NormalStruct = Struct.new(:first_name, :last_name, :age, keyword_init: true) 39 40class DryStruct < Dry::Struct 41 attribute :first_name, Types::Strict::String 42 attribute :last_name, Types::Strict::String 43 attribute :age, Types::Strict::Integer 44end 45 46class LiteralStruct < Literal::Struct 47 prop :first_name, String 48 prop :last_name, String 49 prop :age, Integer 50end 51 52NormalData = Data.define(:first_name, :last_name, :age) 53 54class LiteralData < Literal::Data 55 prop :first_name, String 56 prop :last_name, String 57 prop :age, Integer 58end 59 60RubyVM::YJIT.enable 61 62Benchmark.ips do |x| 63 # x.report "Ruby Class" do 64 # NormalClass.new(first_name: "Joel", last_name: "Drapper", age: 29) 65 # end 66 67 x.report "Dry::Initializer" do 68 DryClass.new(first_name: "Joel", last_name: "Drapper", age: 29) 69 end 70 71 x.report "Literal::Properties" do 72 LiteralClass.new(first_name: "Joel", last_name: "Drapper", age: 29) 73 end 74 75 x.compare! 76end 77 78Benchmark.ips do |x| 79 # x.report "Ruby Struct" do 80 # NormalStruct.new(first_name: "Joel", last_name: "Drapper", age: 29) 81 # end 82 83 x.report "Dry::Struct" do 84 DryStruct.new(first_name: "Joel", last_name: "Drapper", age: 29) 85 end 86 87 x.report "Literal::Struct" do 88 LiteralStruct.new(first_name: "Joel", last_name: "Drapper", age: 29) 89 end 90 91 x.report "Literal::Data" do 92 LiteralData.new(first_name: "Joel", last_name: "Drapper", age: 29) 93 end 94 95 x.compare! 96end