@@ -469,36 +469,54 @@ end
469
469
470
470
471
471
# Recursively compare contents of similar fieldvectors
472
- _rcompare (pass, x:: T , y:: T ) where {T <: Field } =
473
- pass && _rcompare (pass, field_values (x), field_values (y))
474
- _rcompare (pass, x:: T , y:: T ) where {T <: DataLayouts.AbstractData } =
472
+ _rcompare (pass, x:: T , y:: T ; strict ) where {T <: Field } =
473
+ pass && _rcompare (pass, field_values (x), field_values (y); strict )
474
+ _rcompare (pass, x:: T , y:: T ; strict ) where {T <: DataLayouts.AbstractData } =
475
475
pass && (parent (x) == parent (y))
476
- _rcompare (pass, x:: T , y:: T ) where {T} = pass && (x == y)
476
+ _rcompare (pass, x:: T , y:: T ; strict ) where {T} = pass && (x == y)
477
477
478
- function _rcompare (pass, x:: T , y:: T ) where {T <: Union{FieldVector, NamedTuple} }
478
+ _rcompare (pass, x:: NamedTuple , y:: NamedTuple ; strict) =
479
+ _rcompare_nt (pass, x, y; strict)
480
+ _rcompare (pass, x:: FieldVector , y:: FieldVector ; strict) =
481
+ _rcompare_nt (pass, x, y; strict)
482
+
483
+ function _rcompare_nt (pass, x, y; strict)
484
+ length (propertynames (x)) ≠ length (propertynames (y)) && return false
485
+ if strict
486
+ typeof (x) == typeof (y) || return false
487
+ end
479
488
for pn in propertynames (x)
480
- pass &= _rcompare (pass, getproperty (x, pn), getproperty (y, pn))
489
+ pass &= _rcompare (pass, getproperty (x, pn), getproperty (y, pn); strict )
481
490
end
482
491
return pass
483
492
end
484
493
485
494
"""
486
- rcompare(x::T, y::T) where {T <: Union{FieldVector, NamedTuple}}
495
+ rcompare(x::T, y::T; strict = true ) where {T <: Union{FieldVector, NamedTuple}}
487
496
488
497
Recursively compare given fieldvectors via `==`.
489
498
Returns `true` if `x == y` recursively.
490
499
491
500
FieldVectors with different types are considered different.
492
501
"""
493
- rcompare (x:: T , y:: T ) where {T <: Union{FieldVector, NamedTuple} } =
494
- _rcompare (true , x, y)
502
+ rcompare (
503
+ x:: T ,
504
+ y:: T ;
505
+ strict = true ,
506
+ ) where {T <: Union{FieldVector, NamedTuple} } = _rcompare (true , x, y; strict)
495
507
496
- rcompare (x:: T , y:: T ) where {T <: FieldVector } = _rcompare (true , x, y)
508
+ rcompare (x:: T , y:: T ; strict = true ) where {T <: FieldVector } =
509
+ _rcompare (true , x, y; strict)
497
510
498
- rcompare (x:: T , y:: T ) where {T <: NamedTuple } = _rcompare (true , x, y)
511
+ rcompare (x:: T , y:: T ; strict = true ) where {T <: NamedTuple } =
512
+ _rcompare (true , x, y; strict)
499
513
500
514
# FieldVectors with different types are always different
501
- rcompare (x:: FieldVector , y:: FieldVector ) = false
515
+ rcompare (x:: FieldVector , y:: FieldVector ; strict:: Bool = true ) =
516
+ strict ? false : _rcompare (true , x, y; strict)
517
+
518
+ rcompare (x:: NamedTuple , y:: NamedTuple ; strict:: Bool = true ) =
519
+ strict ? false : _rcompare (true , x, y; strict)
502
520
503
521
# Define == to call rcompare for two fieldvectors
504
- Base.:(== )(x:: FieldVector , y:: FieldVector ) = rcompare (x, y)
522
+ Base.:(== )(x:: FieldVector , y:: FieldVector ) = rcompare (x, y; strict = true )
0 commit comments