From 141e70f8f6edda26a6ed6668a1f0fb1b48a564cc Mon Sep 17 00:00:00 2001 From: Dalton-V Date: Thu, 20 Aug 2026 15:09:22 -0500 Subject: [PATCH] Added tests for home origin mark. Fixed detection for Galar --- .../PokemonHome_OriginMarkReader.cpp | 79 ++++++++++++++++++- .../Inference/PokemonHome_OriginMarkReader.h | 3 + .../Source/PokemonHome/PokemonHome_Tests.cpp | 2 + 3 files changed, 83 insertions(+), 1 deletion(-) diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_OriginMarkReader.cpp b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_OriginMarkReader.cpp index 51589cf3ac..aab7e09396 100644 --- a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_OriginMarkReader.cpp +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_OriginMarkReader.cpp @@ -7,6 +7,7 @@ #include #include #include "CommonTools/Images/WaterfillUtilities.h" +#include "CommonFramework/GlobalAutoPaths.h" #include "CommonFramework/ImageTools/ImageStats.h" #include "CommonTools/DetectedBoxes.h" #include "CommonTools/ImageMatch/WaterfillTemplateMatcher.h" @@ -18,6 +19,8 @@ namespace PokemonAutomation{ namespace NintendoSwitch{ namespace PokemonHome{ +using Pokemon::ORIGIN_MARK_SLUGS; + class MarkIconMatcher : public ImageMatch::WaterfillTemplateMatcher{ public: MarkIconMatcher( @@ -136,7 +139,7 @@ const MarkIconMatcher& MarkIcon_Galar(){ "galar", Color(0xff5e6453), Color(0xff757870), 10, - 45.0, + 60.0, { {0xff5e6453, 0xff757870}, {0xff47503d, 0xfffffff8} @@ -301,6 +304,80 @@ OriginMark OriginMarkReader::read_mark( return OriginMark::NONE; } +class Test_OriginMarkReader : public UnitTest{ +public: + + Test_OriginMarkReader( + const std::string& image, + OriginMark expected + ) + : UnitTest("PokemonHome::OriginMarkReader - " + image) + , m_image(UNIT_TEST_RESOURCE_PATH() + image) + , m_expected(expected) + {} + + virtual UnitTestResult run(Logger& logger, CancellableScope& scope) const override{ + ImageRGB32 image(m_image); + OriginMark result = OriginMarkReader().read_mark(image, ImageFloatBox(0.617, 0.084, 0.044, 0.069)); + + if (result == m_expected) + return true; + + return "Expected: " + ORIGIN_MARK_SLUGS().get_string(m_expected) + ", received: " + ORIGIN_MARK_SLUGS().get_string(result); + }; + +private: + std::string m_image; + OriginMark m_expected; +}; + +//TODO: Missing multiple positive test cases for TeraTypeReader. +void add_tests_OriginMarkReader(UnitTestDatabase& database){ + database.add("PokemonHome/BoxView/BoxView-1.png", OriginMark::NONE); + database.add("PokemonHome/SummaryScreen/annihilape_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/bidoof_Regular.png", OriginMark::NONE); + database.add("PokemonHome/SummaryScreen/bulbasaur_Regular.png", OriginMark::LGPE); + database.add("PokemonHome/SummaryScreen/bulbasuar_Shiny_Go.png", OriginMark::GO); + database.add("PokemonHome/SummaryScreen/bulbasuar_Shiny_Lza.png", OriginMark::LZA); + database.add("PokemonHome/SummaryScreen/capskid_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/castform_Regular.png", OriginMark::GO); + database.add("PokemonHome/SummaryScreen/cyclizar_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/dudunsparce_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/dudunsparce_Regular_Sv.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/enamorus_Shiny.png", OriginMark::LA); + database.add("PokemonHome/SummaryScreen/gimmighoul_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/glimmet_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/gogoat_Regular.png", OriginMark::KALOS); + database.add("PokemonHome/SummaryScreen/greatTusk_Shiny.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/hatterne_Regular.png", OriginMark::GALAR); + database.add("PokemonHome/SummaryScreen/houndstone_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/ironBunde_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/ironBundle_Regular_Sv.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/ironJugulis_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/ironThorns_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/kilowattrel_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/kingler_Shiny.png", OriginMark::GALAR); + database.add("PokemonHome/SummaryScreen/komala_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/krabby_Shiny.png", OriginMark::GALAR); + database.add("PokemonHome/SummaryScreen/machamp_Regular.png", OriginMark::GALAR); + database.add("PokemonHome/SummaryScreen/pancham_Shiny.png", OriginMark::GALAR); + database.add("PokemonHome/SummaryScreen/rapidash_Regular.png", OriginMark::LGPE); + database.add("PokemonHome/SummaryScreen/rellor_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/riolu_Regular.png", OriginMark::LZA); + database.add("PokemonHome/SummaryScreen/rowlet_ShinyAlpha.png", OriginMark::LA); + database.add("PokemonHome/SummaryScreen/scovillain_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/slitherWing_Shiny.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/squirtle_Shiny.png", OriginMark::GO); + database.add("PokemonHome/SummaryScreen/tapuLele_Shiny.png", OriginMark::ALOLA); + database.add("PokemonHome/SummaryScreen/tatsugiri_Regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/teddiursa_Regular.png", OriginMark::LA); + database.add("PokemonHome/SummaryScreen/terapagos_regular.png", OriginMark::SV); + database.add("PokemonHome/SummaryScreen/vulpix_Regular.png", OriginMark::GALAR); + database.add("PokemonHome/SummaryScreen/vulpix_Shiny.png", OriginMark::GALAR); + database.add("PokemonHome/SummaryScreen/wartortle_Regular.png", OriginMark::GO); + database.add("PokemonHome/SummaryScreen/wurmple_Regular.png", OriginMark::BDSP); +} + } } diff --git a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_OriginMarkReader.h b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_OriginMarkReader.h index 2d817ea989..23cce3bcc8 100644 --- a/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_OriginMarkReader.h +++ b/SerialPrograms/Source/PokemonHome/Inference/PokemonHome_OriginMarkReader.h @@ -8,6 +8,7 @@ #define PokemonAutomation_PokemonHome_OriginMarkReader_H #include +#include "Common/Cpp/TestRunners/UnitTestDatabase.h" #include "CommonFramework/ImageTypes/ImageViewRGB32.h" #include "CommonFramework/ImageTools/ImageBoxes.h" #include "CommonTools/DetectedBoxes.h" @@ -32,6 +33,8 @@ class OriginMarkReader{ }; +void add_tests_OriginMarkReader(UnitTestDatabase& database); + } } } diff --git a/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.cpp b/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.cpp index da6ce0a59e..922e95583b 100644 --- a/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.cpp +++ b/SerialPrograms/Source/PokemonHome/PokemonHome_Tests.cpp @@ -6,6 +6,7 @@ #include "Common/Cpp/TestRunners/UnitTestDatabase.h" #include "Inference/PokemonHome_BoxViewDetector.h" +#include "Inference/PokemonHome_OriginMarkReader.h" #include "Inference/PokemonHome_SummaryScreenDetector.h" #include "Inference/PokemonHome_TeraTypeReader.h" #include "PokemonHome_Tests.h" @@ -17,6 +18,7 @@ namespace PokemonHome{ void add_tests(UnitTestDatabase& database){ add_tests_BoxViewDetector(database); + add_tests_OriginMarkReader(database); add_tests_SummaryScreenDetector(database); add_tests_TeraTypeReader(database); }