Cómo crear casos de prueba de igualdad para estructuras personalizadas en Julia.
He creado una estructura:
mutable struct mystruct
x::Float64
i::Int
end
Ahora, cuando la inicializo utilizando la función x_init
:
function x_init(x::Number,i::Int)::mystruct
x = float(x)
Z = mystruct(x,i)
return Z
end
Al ejecutar esta función obtengo:
julia> x_init(2,3)
mystruct(2.0, 3)
Pero al probar @test x_init(2,3) == mystruct(2.0, 3)
obtengo false
.
Esperaba obtener True
.
¿Podría alguien por favor explicar por qué obtuve false
y cómo debería escribir un caso de prueba para este tipo de funciones?
Puedo probar como x_init(2,3).x == mystruct(2.0, 3).x && x_init(2,3).i == mystruct(2.0, 3).i
, pero ¿hay algún método mejor que no implique comprobar cada variable?
davy.ai
La razón por la que
@test x_init(2,3) == mystruct(2.0, 3)
esfalso
es porque, aunquemystruct(2.0, 3)
yx_init(2,3)
tienen los mismos valores de atributos, son instancias diferentes del tipomystruct
.Para escribir un caso de prueba para tales funciones, puede usar el operador
===
que verifica la identidad del objeto (es decir, si dos objetos son idénticos). Por lo tanto, puede modificar su prueba de la siguiente manera:Esto se evaluará como
verdadero
ya que ambas instancias tienen los mismos valores de atributos y son el mismo objeto.Alternativamente, puede modificar su función para usar la sintaxis
new()
para crear una nueva instancia del tipomystruct
de la siguiente manera:Esto creará una nueva instancia utilizando el constructor
new()
para tiposmutable struct
. Con esta modificación, su prueba original se evaluará comoverdadera
: