Hi, Following the QA patch set just merged, here are a couple more.
1) Add tests on SHAPE_POLY_SET::Distance and a few geometry helpers for concisely constructing test objects. Notably: this test would have caught the bug just fixed in 90178eb68. 2) Some internal QA tidy up to make the qa-internal includes clearer. (These tests do not concern, conflict with or affect the recent SHAPE_POLY_SET Collision problems.) Cheers, John
From f2df038f45edc6c88ec0f506fe7d604002ea8701 Mon Sep 17 00:00:00 2001 From: John Beard <john.j.be...@gmail.com> Date: Mon, 28 Jan 2019 10:36:54 +0000 Subject: [PATCH 2/2] QA: Tidy qa_utils headers Move into own include directory for clarity. Also allows qa_utils to use its own private headers in qa/qa_utils without exposing them through the target_include_directories directive. --- qa/common_tools/main.cpp | 2 +- qa/common_tools/tools/coroutines/coroutine_tools.h | 2 +- qa/common_tools/tools/io_benchmark/io_benchmark.cpp | 4 ++-- qa/common_tools/tools/io_benchmark/io_benchmark.h | 10 +++++----- qa/pcbnew_tools/pcbnew_tools.cpp | 2 +- qa/pcbnew_tools/tools/drc_tool/drc_tool.cpp | 4 ++-- qa/pcbnew_tools/tools/drc_tool/drc_tool.h | 2 +- qa/pcbnew_tools/tools/pcb_parser/pcb_parser_tool.cpp | 4 ++-- qa/pcbnew_tools/tools/pcb_parser/pcb_parser_tool.h | 2 +- .../tools/polygon_generator/polygon_generator.h | 2 +- .../polygon_triangulation/polygon_triangulation.h | 2 +- qa/pcbnew_utils/board_file_utils.cpp | 2 +- qa/qa_utils/CMakeLists.txt | 1 - qa/qa_utils/{ => include/qa_utils}/scoped_timer.h | 9 +++------ .../{ => include/qa_utils}/stdstream_line_reader.h | 10 ++++------ qa/qa_utils/{ => include/qa_utils}/utility_program.h | 0 qa/qa_utils/stdstream_line_reader.cpp | 2 +- qa/qa_utils/utility_program.cpp | 2 +- 18 files changed, 28 insertions(+), 34 deletions(-) rename qa/qa_utils/{ => include/qa_utils}/scoped_timer.h (91%) rename qa/qa_utils/{ => include/qa_utils}/stdstream_line_reader.h (94%) rename qa/qa_utils/{ => include/qa_utils}/utility_program.h (100%) diff --git a/qa/common_tools/main.cpp b/qa/common_tools/main.cpp index f42f83d40..f537fd826 100644 --- a/qa/common_tools/main.cpp +++ b/qa/common_tools/main.cpp @@ -21,7 +21,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#include <utility_program.h> +#include <qa_utils/utility_program.h> #include "tools/coroutines/coroutine_tools.h" #include "tools/io_benchmark/io_benchmark.h" diff --git a/qa/common_tools/tools/coroutines/coroutine_tools.h b/qa/common_tools/tools/coroutines/coroutine_tools.h index 89f54501e..221a57b11 100644 --- a/qa/common_tools/tools/coroutines/coroutine_tools.h +++ b/qa/common_tools/tools/coroutines/coroutine_tools.h @@ -2,7 +2,7 @@ #ifndef COROUTINES_UTILTY_H #define COROUTINES_UTILTY_H -#include <utility_program.h> +#include <qa_utils/utility_program.h> /// A tool to test a simple coroutine extern KI_TEST::UTILITY_PROGRAM coroutine_tool; diff --git a/qa/common_tools/tools/io_benchmark/io_benchmark.cpp b/qa/common_tools/tools/io_benchmark/io_benchmark.cpp index a1df3f280..23c557857 100644 --- a/qa/common_tools/tools/io_benchmark/io_benchmark.cpp +++ b/qa/common_tools/tools/io_benchmark/io_benchmark.cpp @@ -1,7 +1,7 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 2017 KiCad Developers, see AUTHORS.txt for contributors. + * Copyright (C) 2017-2019 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 @@ -36,7 +36,7 @@ #include <wx/wfstream.h> #include <wx/filename.h> -#include "stdstream_line_reader.h" +#include <qa_utils/stdstream_line_reader.h> using CLOCK = std::chrono::steady_clock; diff --git a/qa/common_tools/tools/io_benchmark/io_benchmark.h b/qa/common_tools/tools/io_benchmark/io_benchmark.h index b115ce744..6f16d9668 100644 --- a/qa/common_tools/tools/io_benchmark/io_benchmark.h +++ b/qa/common_tools/tools/io_benchmark/io_benchmark.h @@ -1,7 +1,7 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 2018 KiCad Developers, see CHANGELOG.TXT for contributors. + * Copyright (C) 2018-2019 KiCad Developers, see CHANGELOG.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 @@ -21,11 +21,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifndef IO_BENCHMARK_H -#define IO_BENCHMARK_H +#ifndef QA_COMMON_TOOLS_IO_BENCHMARK__H +#define QA_COMMON_TOOLS_IO_BENCHMARK__H -#include <utility_program.h> +#include <qa_utils/utility_program.h> extern KI_TEST::UTILITY_PROGRAM io_benchmark_tool; -#endif // IO_BENCHMARK_H \ No newline at end of file +#endif // QA_COMMON_TOOLS_IO_BENCHMARK__H \ No newline at end of file diff --git a/qa/pcbnew_tools/pcbnew_tools.cpp b/qa/pcbnew_tools/pcbnew_tools.cpp index 4b810b8b9..1d57cd41d 100644 --- a/qa/pcbnew_tools/pcbnew_tools.cpp +++ b/qa/pcbnew_tools/pcbnew_tools.cpp @@ -21,7 +21,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#include <utility_program.h> +#include <qa_utils/utility_program.h> #include "tools/drc_tool/drc_tool.h" #include "tools/pcb_parser/pcb_parser_tool.h" diff --git a/qa/pcbnew_tools/tools/drc_tool/drc_tool.cpp b/qa/pcbnew_tools/tools/drc_tool/drc_tool.cpp index 28b3acd93..83ded9fa6 100644 --- a/qa/pcbnew_tools/tools/drc_tool/drc_tool.cpp +++ b/qa/pcbnew_tools/tools/drc_tool/drc_tool.cpp @@ -36,8 +36,8 @@ #include <drc/courtyard_overlap.h> #include <drc/drc_marker_factory.h> -#include <scoped_timer.h> -#include <stdstream_line_reader.h> +#include <qa_utils/scoped_timer.h> +#include <qa_utils/stdstream_line_reader.h> using DRC_DURATION = std::chrono::microseconds; diff --git a/qa/pcbnew_tools/tools/drc_tool/drc_tool.h b/qa/pcbnew_tools/tools/drc_tool/drc_tool.h index accb2e97b..da5ab20c4 100644 --- a/qa/pcbnew_tools/tools/drc_tool/drc_tool.h +++ b/qa/pcbnew_tools/tools/drc_tool/drc_tool.h @@ -24,7 +24,7 @@ #ifndef PCBNEW_TOOLS_DRC_TOOL_H #define PCBNEW_TOOLS_DRC_TOOL_H -#include <utility_program.h> +#include <qa_utils/utility_program.h> /// A tool to run DRC tools on KiCad PCBs from the command line extern KI_TEST::UTILITY_PROGRAM drc_tool; diff --git a/qa/pcbnew_tools/tools/pcb_parser/pcb_parser_tool.cpp b/qa/pcbnew_tools/tools/pcb_parser/pcb_parser_tool.cpp index e29447bc8..2bf77679f 100644 --- a/qa/pcbnew_tools/tools/pcb_parser/pcb_parser_tool.cpp +++ b/qa/pcbnew_tools/tools/pcb_parser/pcb_parser_tool.cpp @@ -37,8 +37,8 @@ #include <wx/cmdline.h> -#include <scoped_timer.h> -#include <stdstream_line_reader.h> +#include <qa_utils/scoped_timer.h> +#include <qa_utils/stdstream_line_reader.h> using PARSE_DURATION = std::chrono::microseconds; diff --git a/qa/pcbnew_tools/tools/pcb_parser/pcb_parser_tool.h b/qa/pcbnew_tools/tools/pcb_parser/pcb_parser_tool.h index cfbe4fb57..cd574f728 100644 --- a/qa/pcbnew_tools/tools/pcb_parser/pcb_parser_tool.h +++ b/qa/pcbnew_tools/tools/pcb_parser/pcb_parser_tool.h @@ -24,7 +24,7 @@ #ifndef PCBNEW_TOOLS_PCB_PARSER_UTILITY_H #define PCBNEW_TOOLS_PCB_PARSER_UTILITY_H -#include <utility_program.h> +#include <qa_utils/utility_program.h> /// A tool to parse kicad PCBs from the command line extern KI_TEST::UTILITY_PROGRAM pcb_parser_tool; diff --git a/qa/pcbnew_tools/tools/polygon_generator/polygon_generator.h b/qa/pcbnew_tools/tools/polygon_generator/polygon_generator.h index bab141224..f2b3d575c 100644 --- a/qa/pcbnew_tools/tools/polygon_generator/polygon_generator.h +++ b/qa/pcbnew_tools/tools/polygon_generator/polygon_generator.h @@ -24,7 +24,7 @@ #ifndef PCBNEW_TOOLS_POLYGON_GENERATOR_UTILITY_H #define PCBNEW_TOOLS_POLYGON_GENERATOR_UTILITY_H -#include <utility_program.h> +#include <qa_utils/utility_program.h> /// A tool to parse kicad PCBs from the command line extern KI_TEST::UTILITY_PROGRAM polygon_generator_tool; diff --git a/qa/pcbnew_tools/tools/polygon_triangulation/polygon_triangulation.h b/qa/pcbnew_tools/tools/polygon_triangulation/polygon_triangulation.h index b3410db60..8b1b560f4 100644 --- a/qa/pcbnew_tools/tools/polygon_triangulation/polygon_triangulation.h +++ b/qa/pcbnew_tools/tools/polygon_triangulation/polygon_triangulation.h @@ -24,7 +24,7 @@ #ifndef PCBNEW_TOOLS_POLYGON_TRIANGULATION_UTILITY_H #define PCBNEW_TOOLS_POLYGON_TRIANGULATION_UTILITY_H -#include <utility_program.h> +#include <qa_utils/utility_program.h> /// A tool to parse kicad PCBs from the command line extern KI_TEST::UTILITY_PROGRAM polygon_triangulation_tool; diff --git a/qa/pcbnew_utils/board_file_utils.cpp b/qa/pcbnew_utils/board_file_utils.cpp index d4969ae91..395bfa708 100644 --- a/qa/pcbnew_utils/board_file_utils.cpp +++ b/qa/pcbnew_utils/board_file_utils.cpp @@ -30,7 +30,7 @@ #include <class_board.h> -#include <stdstream_line_reader.h> +#include <qa_utils/stdstream_line_reader.h> namespace KI_TEST { diff --git a/qa/qa_utils/CMakeLists.txt b/qa/qa_utils/CMakeLists.txt index 1e8bcffe2..20fed4511 100644 --- a/qa/qa_utils/CMakeLists.txt +++ b/qa/qa_utils/CMakeLists.txt @@ -42,5 +42,4 @@ target_link_libraries( qa_utils target_include_directories( qa_utils PUBLIC include - ${CMAKE_CURRENT_SOURCE_DIR} ) \ No newline at end of file diff --git a/qa/qa_utils/scoped_timer.h b/qa/qa_utils/include/qa_utils/scoped_timer.h similarity index 91% rename from qa/qa_utils/scoped_timer.h rename to qa/qa_utils/include/qa_utils/scoped_timer.h index 028bfef46..78a855d5c 100644 --- a/qa/qa_utils/scoped_timer.h +++ b/qa/qa_utils/include/qa_utils/scoped_timer.h @@ -32,15 +32,13 @@ * ON construction, a timer is started, and on destruction, the timer is * ended, and the time difference is written into the given duration */ -template<typename DURATION> -class SCOPED_TIMER +template <typename DURATION> class SCOPED_TIMER { using CLOCK = std::chrono::steady_clock; using TIME_PT = std::chrono::time_point<CLOCK>; public: - SCOPED_TIMER( DURATION& aDuration ): - m_duration( aDuration ) + SCOPED_TIMER( DURATION& aDuration ) : m_duration( aDuration ) { m_start = CLOCK::now(); } @@ -54,9 +52,8 @@ public: } private: - DURATION& m_duration; - TIME_PT m_start; + TIME_PT m_start; }; #endif // SCOPED_TIMER_h \ No newline at end of file diff --git a/qa/qa_utils/stdstream_line_reader.h b/qa/qa_utils/include/qa_utils/stdstream_line_reader.h similarity index 94% rename from qa/qa_utils/stdstream_line_reader.h rename to qa/qa_utils/include/qa_utils/stdstream_line_reader.h index 81c238dc6..491e3a010 100644 --- a/qa/qa_utils/stdstream_line_reader.h +++ b/qa/qa_utils/include/qa_utils/stdstream_line_reader.h @@ -28,8 +28,8 @@ #include <richio.h> -#include <istream> #include <fstream> +#include <istream> /** * LINE_READER that wraps a given std::istream instance. @@ -37,21 +37,20 @@ class STDISTREAM_LINE_READER : public LINE_READER { public: - STDISTREAM_LINE_READER(); ~STDISTREAM_LINE_READER(); - char* ReadLine() override; + char* ReadLine() override; /** * Set the stream for this line reader. * @param aStream a stream to read */ - void SetStream( std::istream& aStream ); + void SetStream( std::istream& aStream ); private: - std::string m_buffer; + std::string m_buffer; std::istream* m_stream; }; @@ -62,7 +61,6 @@ private: class IFSTREAM_LINE_READER : public STDISTREAM_LINE_READER { public: - IFSTREAM_LINE_READER( const wxFileName& aFileName ); void Rewind(); diff --git a/qa/qa_utils/utility_program.h b/qa/qa_utils/include/qa_utils/utility_program.h similarity index 100% rename from qa/qa_utils/utility_program.h rename to qa/qa_utils/include/qa_utils/utility_program.h diff --git a/qa/qa_utils/stdstream_line_reader.cpp b/qa/qa_utils/stdstream_line_reader.cpp index d473f3442..ededd0ca3 100644 --- a/qa/qa_utils/stdstream_line_reader.cpp +++ b/qa/qa_utils/stdstream_line_reader.cpp @@ -21,7 +21,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "stdstream_line_reader.h" +#include <qa_utils/stdstream_line_reader.h> #include <ios> diff --git a/qa/qa_utils/utility_program.cpp b/qa/qa_utils/utility_program.cpp index 39457c44a..47908d253 100644 --- a/qa/qa_utils/utility_program.cpp +++ b/qa/qa_utils/utility_program.cpp @@ -20,7 +20,7 @@ * or you may write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "utility_program.h" +#include <qa_utils/utility_program.h> #include <wx/msgout.h> -- 2.20.1
From ad9b2a07b395eb782277c28e04d5edd83c7fc8e7 Mon Sep 17 00:00:00 2001 From: John Beard <john.j.be...@gmail.com> Date: Mon, 28 Jan 2019 10:28:02 +0000 Subject: [PATCH 1/2] QA: Add some tests on SHAPE_POLY_SET::Distance These tests pick up the bug fixed in: 90178eb6812eead81a2523fbb7cce665413637eb (as it is already fixed there is no failure). --- qa/common/CMakeLists.txt | 1 + .../geometry/test_shape_poly_set_distance.cpp | 149 ++++++++++++++++++ qa/qa_utils/CMakeLists.txt | 5 + .../geometry/line_chain_construction.cpp | 49 ++++++ .../geometry/poly_set_construction.cpp | 54 +++++++ qa/qa_utils/geometry/seg_construction.cpp | 39 +++++ .../geometry/line_chain_construction.h | 56 +++++++ .../qa_utils/geometry/poly_set_construction.h | 59 +++++++ .../qa_utils/geometry/seg_construction.h | 56 +++++++ 9 files changed, 468 insertions(+) create mode 100644 qa/common/geometry/test_shape_poly_set_distance.cpp create mode 100644 qa/qa_utils/geometry/line_chain_construction.cpp create mode 100644 qa/qa_utils/geometry/poly_set_construction.cpp create mode 100644 qa/qa_utils/geometry/seg_construction.cpp create mode 100644 qa/qa_utils/include/qa_utils/geometry/line_chain_construction.h create mode 100644 qa/qa_utils/include/qa_utils/geometry/poly_set_construction.h create mode 100644 qa/qa_utils/include/qa_utils/geometry/seg_construction.h diff --git a/qa/common/CMakeLists.txt b/qa/common/CMakeLists.txt index 5b105f139..24b065141 100644 --- a/qa/common/CMakeLists.txt +++ b/qa/common/CMakeLists.txt @@ -50,6 +50,7 @@ set( common_srcs geometry/test_segment.cpp geometry/test_shape_arc.cpp geometry/test_shape_poly_set_collision.cpp + geometry/test_shape_poly_set_distance.cpp geometry/test_shape_poly_set_iterator.cpp view/test_zoom_controller.cpp diff --git a/qa/common/geometry/test_shape_poly_set_distance.cpp b/qa/common/geometry/test_shape_poly_set_distance.cpp new file mode 100644 index 000000000..79de9620a --- /dev/null +++ b/qa/common/geometry/test_shape_poly_set_distance.cpp @@ -0,0 +1,149 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2017 CERN + * @author Alejandro GarcĂa Montoro <alejandro.garciamont...@gmail.com> + * + * 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 2 + * 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, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <unit_test_utils/unit_test_utils.h> + +#include <convert_to_biu.h> + +#include <geometry/shape_poly_set.h> + +#include <qa_utils/geometry/poly_set_construction.h> +#include <qa_utils/geometry/seg_construction.h> + +/** + * Declares the Boost test suite fixture. + */ +BOOST_AUTO_TEST_SUITE( SPSDistance ) + +struct SPS_DISTANCE_TO_SEG_CASE +{ + std::string m_case_name; + + /// list of lists of polygon points + SHAPE_POLY_SET m_polyset; + + /// the segment to check distance to + SEG m_seg; + int m_seg_width; + + /// The expected answer + int m_exp_dist; +}; + +static std::vector<SPS_DISTANCE_TO_SEG_CASE> GetSPSSegDistCases() +{ + namespace KT = KI_TEST; + std::vector<SPS_DISTANCE_TO_SEG_CASE> cases; + + // Single 10mm square at origin + const SHAPE_POLY_SET square_10mm_0_0 = KT::BuildPolyset( { + KT::BuildSquareChain( Millimeter2iu( 10 ) ), + } ); + + // Double square: 10mm each, one at (0, 0), one at (10, 0) + const SHAPE_POLY_SET squares_10mm_0_0_and_20_0 = KT::BuildPolyset( { + KT::BuildSquareChain( Millimeter2iu( 10 ) ), + KT::BuildSquareChain( Millimeter2iu( 10 ), // + { Millimeter2iu( 20 ), Millimeter2iu( 0 ) } ), + } ); + + // Hollow square: 10mm hole in 20mm square, at origin + const SHAPE_POLY_SET hollow_square_20_10_at_0_0 = + KT::BuildHollowSquare( Millimeter2iu( 20 ), Millimeter2iu( 10 ) ); + + cases.push_back( { + "Square poly -> 1D segment", + square_10mm_0_0, + KT::BuildHSeg( { Millimeter2iu( 0 ), Millimeter2iu( 15 ) }, Millimeter2iu( 10 ) ), + Millimeter2iu( 0 ), // 1-d segment + Millimeter2iu( 10 ), + } ); + + cases.push_back( { + "Square poly -> 2D (thick) segment", + square_10mm_0_0, + KT::BuildHSeg( { Millimeter2iu( 0 ), Millimeter2iu( 15 ) }, Millimeter2iu( 10 ) ), + Millimeter2iu( 2 ), // thick segment + Millimeter2iu( 9 ), + } ); + + cases.push_back( { + "Two Squares poly -> 2D segment (nearest second square)", squares_10mm_0_0_and_20_0, + KT::BuildHSeg( { Millimeter2iu( 15 ), Millimeter2iu( 15 ) }, Millimeter2iu( 10 ) ), + Millimeter2iu( 2 ), // thick segment + Millimeter2iu( 9 ), // from line to second square + } ); + + cases.push_back( { + "Square poly -> one intersect", square_10mm_0_0, + KT::BuildHSeg( { Millimeter2iu( -5 ), Millimeter2iu( 0 ) }, Millimeter2iu( 10 ) ), + Millimeter2iu( 0 ), // 1-d segment + Millimeter2iu( 0 ), // intersect + } ); + + cases.push_back( { + "Square poly -> multiple intersection", square_10mm_0_0, + KT::BuildHSeg( { Millimeter2iu( -5 ), Millimeter2iu( 0 ) }, Millimeter2iu( 20 ) ), + Millimeter2iu( 0 ), // 1-d segment + Millimeter2iu( 0 ), // intersect + } ); + + cases.push_back( { + "Square poly -> 1D seg touching", square_10mm_0_0, + // touch left side at (-5, 0) + KT::BuildHSeg( { Millimeter2iu( -10 ), Millimeter2iu( 0 ) }, Millimeter2iu( 5 ) ), + Millimeter2iu( 0 ), // 2D segment + Millimeter2iu( 0 ), // intersect + } ); + + cases.push_back( { + "Square poly -> 2D seg (end cap is nearest)", square_10mm_0_0, + KT::BuildHSeg( { Millimeter2iu( -20 ), Millimeter2iu( 0 ) }, Millimeter2iu( 10 ) ), + Millimeter2iu( 2 ), // 2D segment, 1mm cap radius + Millimeter2iu( 4 ), // 4mm short, 5mm to wire end, -1mm radius + } ); + + return cases; +}; + +/** + * Check segment distances + */ +BOOST_AUTO_TEST_CASE( SegDistance ) +{ + for( const auto& c : GetSPSSegDistCases() ) + { + BOOST_TEST_CONTEXT( c.m_case_name ) + { + SHAPE_POLY_SET polyset = c.m_polyset; + + int dist = polyset.Distance( c.m_seg, c.m_seg_width ); + + // right answer? + BOOST_CHECK_EQUAL( dist, c.m_exp_dist ); + } + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/qa/qa_utils/CMakeLists.txt b/qa/qa_utils/CMakeLists.txt index bc04b72ca..1e8bcffe2 100644 --- a/qa/qa_utils/CMakeLists.txt +++ b/qa/qa_utils/CMakeLists.txt @@ -22,6 +22,10 @@ set( QA_UTIL_COMMON_SRC stdstream_line_reader.cpp utility_program.cpp + + geometry/line_chain_construction.cpp + geometry/poly_set_construction.cpp + geometry/seg_construction.cpp ) # A generic library of useful functions for various testing purposes @@ -37,5 +41,6 @@ target_link_libraries( qa_utils ) target_include_directories( qa_utils PUBLIC + include ${CMAKE_CURRENT_SOURCE_DIR} ) \ No newline at end of file diff --git a/qa/qa_utils/geometry/line_chain_construction.cpp b/qa/qa_utils/geometry/line_chain_construction.cpp new file mode 100644 index 000000000..56d1b906d --- /dev/null +++ b/qa/qa_utils/geometry/line_chain_construction.cpp @@ -0,0 +1,49 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2019 KiCad Developers, see CHANGELOG.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 2 + * 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, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <qa_utils/geometry/line_chain_construction.h> + +namespace KI_TEST +{ + +SHAPE_LINE_CHAIN BuildRectChain( const VECTOR2I& aSize, const VECTOR2I& aCentre ) +{ + const std::vector<VECTOR2I> pts = { + { aCentre.x - aSize.x / 2, aCentre.y - aSize.y / 2 }, + { aCentre.x - aSize.x / 2, aCentre.y + aSize.y / 2 }, + { aCentre.x + aSize.x / 2, aCentre.y + aSize.y / 2 }, + { aCentre.x + aSize.x / 2, aCentre.y - aSize.y / 2 }, + }; + + SHAPE_LINE_CHAIN chain( pts.data(), pts.size() ); + chain.SetClosed( true ); + + return chain; +} + +SHAPE_LINE_CHAIN BuildSquareChain( int aSize, const VECTOR2I& aCentre ) +{ + return BuildRectChain( { aSize, aSize }, aCentre ); +} + +} // namespace KI_TEST \ No newline at end of file diff --git a/qa/qa_utils/geometry/poly_set_construction.cpp b/qa/qa_utils/geometry/poly_set_construction.cpp new file mode 100644 index 000000000..ab2326b7c --- /dev/null +++ b/qa/qa_utils/geometry/poly_set_construction.cpp @@ -0,0 +1,54 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2019 KiCad Developers, see CHANGELOG.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 2 + * 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, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <qa_utils/geometry/poly_set_construction.h> + +#include <qa_utils/geometry/line_chain_construction.h> + +namespace KI_TEST +{ + +SHAPE_POLY_SET BuildPolyset( const std::vector<SHAPE_LINE_CHAIN>& aOutlines ) +{ + SHAPE_POLY_SET polyset; + + for( const auto& outline : aOutlines ) + { + polyset.AddOutline( outline ); + } + + return polyset; +} + + +SHAPE_POLY_SET BuildHollowSquare( int aOuterSize, int aInnerSize, const VECTOR2I& aCentre ) +{ + SHAPE_POLY_SET polyset; + + polyset.AddOutline( BuildRectChain( { aOuterSize, aOuterSize }, aCentre ) ); + polyset.AddHole( BuildRectChain( { aInnerSize, aInnerSize }, aCentre ) ); + + return polyset; +} + +} // namespace KI_TEST \ No newline at end of file diff --git a/qa/qa_utils/geometry/seg_construction.cpp b/qa/qa_utils/geometry/seg_construction.cpp new file mode 100644 index 000000000..bf77eb9d6 --- /dev/null +++ b/qa/qa_utils/geometry/seg_construction.cpp @@ -0,0 +1,39 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2019 KiCad Developers, see CHANGELOG.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 2 + * 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, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <qa_utils/geometry/seg_construction.h> + +namespace KI_TEST +{ + +SEG BuildHSeg( const VECTOR2I& aStart, int aLength ) +{ + return SEG{ { aStart.x, aStart.y }, { aStart.x + aLength, aStart.y } }; +} + +SEG BuildVSeg( const VECTOR2I& aStart, int aLength ) +{ + return SEG{ { aStart.x, aStart.y }, { aStart.x, aStart.y + aLength } }; +} + +} // namespace KI_TEST \ No newline at end of file diff --git a/qa/qa_utils/include/qa_utils/geometry/line_chain_construction.h b/qa/qa_utils/include/qa_utils/geometry/line_chain_construction.h new file mode 100644 index 000000000..ef35b0541 --- /dev/null +++ b/qa/qa_utils/include/qa_utils/geometry/line_chain_construction.h @@ -0,0 +1,56 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2019 KiCad Developers, see CHANGELOG.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 2 + * 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, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/** + * @file + * Utilities for creating useful line chain idioms commonly founds in + * QA utilities and tests + */ + +#ifndef QA_UTILS_GEOMETRY_LINE_CHAIN_CONSTRUCTION__H +#define QA_UTILS_GEOMETRY_LINE_CHAIN_CONSTRUCTION__H + +#include <geometry/shape_line_chain.h> + +namespace KI_TEST +{ + +/** + * Builds a rectangular #SHAPE_LINE_CHAIN of a certain size at a certain centre + * @param aSize the rectangle size + * @param aCentre centre of the rectangle + * @return a closed line chain of the rectangle + */ +SHAPE_LINE_CHAIN BuildRectChain( const VECTOR2I& aSize, const VECTOR2I& aCentre = { 0, 0 } ); + +/** + * Builds a square #SHAPE_LINE_CHAIN of a certain size at a certain centre + * @param aSize the square size (x == y) + * @param aCentre centre of the square + * @return a closed line chain of the square + */ +SHAPE_LINE_CHAIN BuildSquareChain( int aSize, const VECTOR2I& aCentre = { 0, 0 } ); + +} // namespace KI_TEST + +#endif // QA_UTILS_GEOMETRY_LINE_CHAIN_CONSTRUCTION__H \ No newline at end of file diff --git a/qa/qa_utils/include/qa_utils/geometry/poly_set_construction.h b/qa/qa_utils/include/qa_utils/geometry/poly_set_construction.h new file mode 100644 index 000000000..71a67a2e4 --- /dev/null +++ b/qa/qa_utils/include/qa_utils/geometry/poly_set_construction.h @@ -0,0 +1,59 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2019 KiCad Developers, see CHANGELOG.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 2 + * 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, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/** + * @file + * Utilities for creating useful polygon shapes that are commonly + * found in QA utilities and tests. + */ + +#ifndef QA_UTILS_GEOMETRY_POLY_SET_CONSTRUCTION__H +#define QA_UTILS_GEOMETRY_POLY_SET_CONSTRUCTION__H + +#include <geometry/shape_poly_set.h> + +#include <qa_utils/geometry/line_chain_construction.h> + +namespace KI_TEST +{ + +/** + * Construct a #SHAPE_POLY_SET from a list of points for each of outlines + * (no holes) + */ +SHAPE_POLY_SET BuildPolyset( const std::vector<SHAPE_LINE_CHAIN>& aOutlines ); + +/** + * Build a #SHAPE_POLY_SET in the shape of a square outline, with a square + * hole, both centred at the given point. + * @param aOuterSize the size (x and y) of the outer square + * @param aInnerSize the size (x and y) of the hole + * @param aCentre the centre point of both squares (default: origin) + * @return a SHAPE_POLY_SET of the desired shape + */ +SHAPE_POLY_SET BuildHollowSquare( + int aOuterSize, int aInnerSize, const VECTOR2I& aCentre = { 0, 0 } ); + +} // namespace KI_TEST + +#endif // QA_UTILS_GEOMETRY_POLY_SET_CONSTRUCTION__H \ No newline at end of file diff --git a/qa/qa_utils/include/qa_utils/geometry/seg_construction.h b/qa/qa_utils/include/qa_utils/geometry/seg_construction.h new file mode 100644 index 000000000..f2c4b1b1c --- /dev/null +++ b/qa/qa_utils/include/qa_utils/geometry/seg_construction.h @@ -0,0 +1,56 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2019 KiCad Developers, see CHANGELOG.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 2 + * 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, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/** + * @file + * Utilities for creating useful line chain idioms commonly founds in + * QA utilities and tests + */ + +#ifndef QA_UTILS_GEOMETRY_SEG_CONSTRUCTION__H +#define QA_UTILS_GEOMETRY_SEG_CONSTRUCTION__H + +#include <geometry/seg.h> + +namespace KI_TEST +{ + +/** + * Build a horizontal segment from a point with a length + * @param aStart the starting point + * @param aLength the segment length + * @return the resulting segment + */ +SEG BuildHSeg( const VECTOR2I& aStart, int aLength ); + +/** + * Build a vertical segment from a point with a length + * @param aStart the starting point + * @param aLength the segment length + * @return the resulting segment + */ +SEG BuildVSeg( const VECTOR2I& aStart, int aLength ); + +} // namespace KI_TEST + +#endif // QA_UTILS_GEOMETRY_SEG_CONSTRUCTION__H \ No newline at end of file -- 2.20.1
_______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : kicad-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp