fastruby / fastruby/fast-ruby

Remove `String#casecmp` part

Abierto
#123 6 comentarios 2 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Ruby
Estrellas
5.7k
Forks
371
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

The `String#casecmp` method does not work with Unicode (even in Ruby 2.4.1), this is written in the [documentation](http://ruby-doc.org/core-2.4.1/String.html#method-i-casecmp).

Example:

```ruby
'Привет'.casecmp('привет') # => -1
```

There is a method `String#casecmp?`, which [works with Unicode](http://ruby-doc.org/core-2.4.1/String.html#method-i-casecmp-3F).

Example:

```ruby
'Привет'.casecmp?('привет') # => true
```

But `String.casecmp?` is slower:

```
Warming up --------------------------------------
String#downcase + == 233.440k i/100ms
String#casecmp 274.247k i/100ms
String#casecmp? 219.906k i/100ms
Calculating -------------------------------------
String#downcase + == 5.746M (± 1.7%) i/s - 28.947M in 5.039252s
String#casecmp 6.942M (± 1.8%) i/s - 34.829M in 5.019073s
String#casecmp? 4.517M (± 2.6%) i/s - 22.650M in 5.017864s

Comparison:
String#casecmp: 6941676.9 i/s
String#downcase + ==: 5745893.8 i/s - 1.21x slower
String#casecmp?: 4517314.3 i/s - 1.54x slower
```

Code

```ruby
require 'benchmark/ips'

SLUG = 'ABCD'

def slow
SLUG.downcase == 'abcd'
end

def fast
SLUG.casecmp('abcd') == 0
end

def another
SLUG.casecmp?('abcd')
end

Benchmark.ips do |x|
x.report('String#downcase + ==') { slow }
x.report('String#casecmp') { fast }
x.report('String#casecmp?') { another }
x.compare!
end
```

So, `String#downcase + ==` is good compromise.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.