Add hashing to and unit tests for some low level objects.
This commit is contained in:
parent
8dfe8e595c
commit
c3e6825d62
|
@ -1000,6 +1000,14 @@ wxString EDA_TEXT::GotoPageHref( const wxString& aDestination )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::ostream& operator<<( std::ostream& aStream, const EDA_TEXT& aText )
|
||||||
|
{
|
||||||
|
aStream << aText.GetText();
|
||||||
|
|
||||||
|
return aStream;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static struct EDA_TEXT_DESC
|
static struct EDA_TEXT_DESC
|
||||||
{
|
{
|
||||||
EDA_TEXT_DESC()
|
EDA_TEXT_DESC()
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
* Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||||
* Copyright (C) 2004-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2004-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -95,7 +95,10 @@ public:
|
||||||
* for intance a title, a prefix for texts in display functions.
|
* for intance a title, a prefix for texts in display functions.
|
||||||
* False to disable any added text (for instance when writing the shown text in netlists).
|
* False to disable any added text (for instance when writing the shown text in netlists).
|
||||||
*/
|
*/
|
||||||
virtual wxString GetShownText( int aDepth = 0, bool aAllowExtraText = true ) const { return m_shown_text; }
|
virtual wxString GetShownText( int aDepth = 0, bool aAllowExtraText = true ) const
|
||||||
|
{
|
||||||
|
return m_shown_text;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates the ShownText has text var references which need to be processed.
|
* Indicates the ShownText has text var references which need to be processed.
|
||||||
|
@ -330,6 +333,10 @@ public:
|
||||||
|
|
||||||
int Compare( const EDA_TEXT* aOther ) const;
|
int Compare( const EDA_TEXT* aOther ) const;
|
||||||
|
|
||||||
|
bool operator==( const EDA_TEXT& aRhs ) const { return Compare( &aRhs ) == 0; }
|
||||||
|
bool operator<( const EDA_TEXT& aRhs ) const { return Compare( &aRhs ) < 0; }
|
||||||
|
bool operator>( const EDA_TEXT& aRhs ) const { return Compare( &aRhs ) > 0; }
|
||||||
|
|
||||||
virtual bool HasHyperlink() const { return !m_hyperlink.IsEmpty(); }
|
virtual bool HasHyperlink() const { return !m_hyperlink.IsEmpty(); }
|
||||||
wxString GetHyperlink() const { return m_hyperlink; }
|
wxString GetHyperlink() const { return m_hyperlink; }
|
||||||
void SetHyperlink( wxString aLink ) { m_hyperlink = aLink; }
|
void SetHyperlink( wxString aLink ) { m_hyperlink = aLink; }
|
||||||
|
@ -408,4 +415,21 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
extern std::ostream& operator<<( std::ostream& aStream, const EDA_TEXT& aAttributes );
|
||||||
|
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct std::hash<EDA_TEXT>
|
||||||
|
{
|
||||||
|
std::size_t operator()( const EDA_TEXT& aText ) const
|
||||||
|
{
|
||||||
|
std::size_t seed;
|
||||||
|
|
||||||
|
hash_combine( seed, aText.GetText(), aText.GetAttributes(), aText.GetTextPos().x,
|
||||||
|
aText.GetTextPos().y );
|
||||||
|
|
||||||
|
return seed;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
#endif // EDA_TEXT_H_
|
#endif // EDA_TEXT_H_
|
||||||
|
|
|
@ -92,4 +92,22 @@ public:
|
||||||
extern std::ostream& operator<<( std::ostream& aStream, const TEXT_ATTRIBUTES& aAttributes );
|
extern std::ostream& operator<<( std::ostream& aStream, const TEXT_ATTRIBUTES& aAttributes );
|
||||||
|
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct std::hash<TEXT_ATTRIBUTES>
|
||||||
|
{
|
||||||
|
std::size_t operator()( const TEXT_ATTRIBUTES& aAttributes ) const
|
||||||
|
{
|
||||||
|
std::size_t seed;
|
||||||
|
|
||||||
|
hash_combine( seed, aAttributes.m_Font, aAttributes.m_Halign, aAttributes.m_Valign,
|
||||||
|
aAttributes.m_Angle.AsDegrees(), aAttributes.m_LineSpacing,
|
||||||
|
aAttributes.m_StrokeWidth, aAttributes.m_Italic, aAttributes.m_Bold,
|
||||||
|
aAttributes.m_Underlined, aAttributes.m_Color, aAttributes.m_Visible,
|
||||||
|
aAttributes.m_Mirrored, aAttributes.m_Multiline, aAttributes.m_Size.x,
|
||||||
|
aAttributes.m_Size.y );
|
||||||
|
|
||||||
|
return seed;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
#endif //TEXT_ATTRIBUTES_H
|
#endif //TEXT_ATTRIBUTES_H
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include <wx/debug.h>
|
#include <wx/debug.h>
|
||||||
#include <wx/colour.h>
|
#include <wx/colour.h>
|
||||||
#include <wx/string.h>
|
#include <wx/string.h>
|
||||||
|
#include <hash.h>
|
||||||
#include <nlohmann/json_fwd.hpp>
|
#include <nlohmann/json_fwd.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
@ -404,4 +405,17 @@ void from_json( const nlohmann::json& aJson, COLOR4D& aColor );
|
||||||
|
|
||||||
} // namespace KIGFX
|
} // namespace KIGFX
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct std::hash<KIGFX::COLOR4D>
|
||||||
|
{
|
||||||
|
std::size_t operator()( const KIGFX::COLOR4D& aColor ) const
|
||||||
|
{
|
||||||
|
std::size_t seed;
|
||||||
|
|
||||||
|
hash_combine( seed, aColor.r, aColor.b, aColor.g, aColor.a );
|
||||||
|
|
||||||
|
return seed;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* COLOR4D_H_ */
|
#endif /* COLOR4D_H_ */
|
||||||
|
|
|
@ -35,6 +35,7 @@ set( QA_COMMON_SRCS
|
||||||
test_color4d.cpp
|
test_color4d.cpp
|
||||||
test_coroutine.cpp
|
test_coroutine.cpp
|
||||||
test_eda_shape.cpp
|
test_eda_shape.cpp
|
||||||
|
test_eda_text.cpp
|
||||||
test_lib_table.cpp
|
test_lib_table.cpp
|
||||||
test_markup_parser.cpp
|
test_markup_parser.cpp
|
||||||
test_kicad_string.cpp
|
test_kicad_string.cpp
|
||||||
|
|
|
@ -307,17 +307,21 @@ BOOST_AUTO_TEST_CASE( FromWx )
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check the Compare method.
|
* Check the Compare method and hashing.
|
||||||
*/
|
*/
|
||||||
BOOST_AUTO_TEST_CASE( Compare )
|
BOOST_AUTO_TEST_CASE( Compare )
|
||||||
{
|
{
|
||||||
|
std::hash<COLOR4D> colorHasher;
|
||||||
|
|
||||||
COLOR4D a( 0.5, 0.5, 0.5, 0.5 );
|
COLOR4D a( 0.5, 0.5, 0.5, 0.5 );
|
||||||
COLOR4D b( 0.5, 0.5, 0.5, 0.5 );
|
COLOR4D b( 0.5, 0.5, 0.5, 0.5 );
|
||||||
|
|
||||||
BOOST_CHECK_EQUAL( a.Compare( b ), 0 );
|
BOOST_CHECK_EQUAL( a.Compare( b ), 0 );
|
||||||
|
BOOST_CHECK_EQUAL( colorHasher( a ), colorHasher( b ) );
|
||||||
|
|
||||||
b.r = 0.25;
|
b.r = 0.25;
|
||||||
BOOST_CHECK_GT( a.Compare( b ), 0 );
|
BOOST_CHECK_GT( a.Compare( b ), 0 );
|
||||||
|
BOOST_CHECK_NE( colorHasher( a ), colorHasher( b ) );
|
||||||
|
|
||||||
b.r = 0.75;
|
b.r = 0.75;
|
||||||
BOOST_CHECK_LT( a.Compare( b ), 0 );
|
BOOST_CHECK_LT( a.Compare( b ), 0 );
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2023 Wayne Stambaugh <stambaughw@gmail.com>
|
||||||
|
* Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <boost/test/unit_test.hpp>
|
||||||
|
#include <base_units.h>
|
||||||
|
#include <eda_text.h>
|
||||||
|
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE( EdaText )
|
||||||
|
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE( Compare )
|
||||||
|
{
|
||||||
|
std::hash<EDA_TEXT> hasher;
|
||||||
|
EDA_TEXT a( unityScale );
|
||||||
|
EDA_TEXT b( unityScale );
|
||||||
|
|
||||||
|
BOOST_CHECK_EQUAL( a, b );
|
||||||
|
BOOST_CHECK_EQUAL( hasher( a ), hasher( b ) );
|
||||||
|
|
||||||
|
a.SetText( wxS( "A" ) );
|
||||||
|
BOOST_CHECK_GT( a, b );
|
||||||
|
BOOST_CHECK_NE( hasher( a ), hasher( b ) );
|
||||||
|
|
||||||
|
b.SetText( wxS( "B" ) );
|
||||||
|
BOOST_CHECK_LT( a, b );
|
||||||
|
BOOST_CHECK_NE( hasher( a ), hasher( b ) );
|
||||||
|
|
||||||
|
a.SetText( wxS( "B" ) );
|
||||||
|
a.SetTextPos( VECTOR2I( 1, 0 ) );
|
||||||
|
BOOST_CHECK_GT( a, b );
|
||||||
|
|
||||||
|
a.SetTextPos( VECTOR2I( -1, 0 ) );
|
||||||
|
BOOST_CHECK_LT( a, b );
|
||||||
|
|
||||||
|
a.SetTextPos( VECTOR2I( 0, 0 ) );
|
||||||
|
b.SetTextPos( VECTOR2I( 0, 1 ) );
|
||||||
|
BOOST_CHECK_LT( a, b );
|
||||||
|
|
||||||
|
b.SetTextPos( VECTOR2I( 0, -1 ) );
|
||||||
|
BOOST_CHECK_GT( a, b );
|
||||||
|
|
||||||
|
// Text attributes are tested in the TEXT_ATTRIBUTES unit tests.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE_END()
|
|
@ -29,13 +29,16 @@ BOOST_AUTO_TEST_SUITE( TextAttributes )
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE( Compare )
|
BOOST_AUTO_TEST_CASE( Compare )
|
||||||
{
|
{
|
||||||
|
std::hash<TEXT_ATTRIBUTES> hasher;
|
||||||
TEXT_ATTRIBUTES a;
|
TEXT_ATTRIBUTES a;
|
||||||
TEXT_ATTRIBUTES b;
|
TEXT_ATTRIBUTES b;
|
||||||
|
|
||||||
BOOST_CHECK_EQUAL( a, b );
|
BOOST_CHECK_EQUAL( a, b );
|
||||||
|
BOOST_CHECK_EQUAL( hasher( a ), hasher( b ) );
|
||||||
|
|
||||||
a.m_Font = KIFONT::FONT::GetFont();
|
a.m_Font = KIFONT::FONT::GetFont();
|
||||||
BOOST_CHECK_GT( a, b );
|
BOOST_CHECK_GT( a, b );
|
||||||
|
BOOST_CHECK_NE( hasher( a ), hasher( b ) );
|
||||||
|
|
||||||
a.m_Font = nullptr;
|
a.m_Font = nullptr;
|
||||||
b.m_Font = KIFONT::FONT::GetFont();
|
b.m_Font = KIFONT::FONT::GetFont();
|
||||||
|
|
Loading…
Reference in New Issue