es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón por la que @test x_init(2,3) == mystruct(2.0, 3) esfalso es porque, aunque mystruct(2.0, 3) yx_init(2,3) tienen los mismos valores de atributos, son instancias diferentes del tipo mystruct.

    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:

    @test x_init(2,3) === mystruct(2.0, 3)
    

    Esto se evaluará comoverdadero 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 tipo mystruct de la siguiente manera:

    function x_init(x::Number, i::Int)::mystruct
        return mystruct(x::Float64, i::Int)
    end
    

    Esto creará una nueva instancia utilizando el constructor new() para tipos mutable struct. Con esta modificación, su prueba original se evaluará como verdadera:

    julia> @test x_init(2,3) == mystruct(2.0, 3)
    Test Passed
    

Comments are closed.