Time objects fail to round-trip with equality
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 45/100
Direção de pesquisa
Execute o script Ruby fornecido e inspecione o round trip de YAML.dump/YAML.load para objetos Time, comparando Time#==, Time#to_f e Time#nsec conforme mostrado. Considera-se concluído quando as instâncias Time original e carregada forem iguais, incluindo o caso de fração de segundo relatado.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
I ran the following script:
require 'yaml'
puts Psych::VERSION
def compare(time)
dumped = YAML.dump(time)
loaded = YAML.load(YAML.dump(time))
equal = loaded == time
pp(
original: time,
loaded: loaded,
equal: equal,
# nsec: { original: time.nsec, loaded: loaded.nsec, equal: time.nsec == loaded.nsec }
float: { original: time.to_f, loaded: loaded.to_f, equal: time.to_f == loaded.to_f }
)
end
compare(Time.new(2002, 4, 5, 6, 7, 8.9992321))
compare(YAML.load YAML.dump Time.new(2002, 4, 5, 6, 7, 8.9992321))
And got the following output:
3.0.2
{:original=>2002-04-05 06:07:08 -0800,
:loaded=>2002-04-05 06:07:08 -0800,
:equal=>false,
:float=>
{:original=>1018015628.999232, :loaded=>1018015628.9992322, :equal=>false}}
{:original=>2002-04-05 06:07:08 -0800,
:loaded=>2002-04-05 06:07:08 -0800,
:equal=>true,
:float=>
{:original=>1018015628.9992322, :loaded=>1018015628.9992322, :equal=>true}}
I would expect both Time instances to compare equal to their dumped & loaded counterpart, but the first does not. By inspection, we can see that the Time#to_f of the original & loaded instances are different, which I'd guess is what's breaking Time#==. Curiously, the Time#nsec property is preserved properly.
- Linguagem predominante
- Ruby
- Estrelas
- 596
- Forks
- 223
- Merge médio
- 8h 38min
- PRs com merge (30d)
- 2
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de ruby/psych
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
-
Documentation
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 72/100
-
Psych.dump raises Encoding::CompatibilityError for UTF-16/UTF-32 stringsTalvez já em andamento @Halvanhelv assumiu há 54 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 55/100
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 68/100
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 52/100
Issues semelhantes
-
JWT::EncodedToken raises TypeError for a non-object headerTalvez já em andamento @anakinj assumiu hoje. Abertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
zold-io/zold-ruby-sdk#85 ·
-
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 62/100