d7ee248df5
* Updated the SFINAE checks in concepts.h and range.h To use conjunction and disjunction for short-circuiting behavior. Replaced AZStd::optional implementation with std::optional alias Added range adaptor support and the following views: ref_view, owning_view Added bitwise or(|) overload for chaining range adaptor closures together Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding indirectly invocable concepts. These concepts are used to determine whether a callable can be invoked with a dereferenced iterator instance. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Add implementation of range relational function objects Add implementation of range min max functions which uses the range relation function objects(ranges::less, ranges::equal_to, etc...) This is needed to implement ranges::zip_view Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding interface for zip_view which compiles successfully The implementation for the zip view functions still need to be filled. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding function definitions for zip_view classes. Adding empty header of subrange.h for the ranges::subrange class Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding additional view implementations. The following range and view classes have been added: empty_view, single_view and subrange. Moved the AZ_NO_UNIQUE_ADDRESS macro to PlatformDef.h to allow other code to specify the [[no_unique_address]] attribute. Added additional test for view structures. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding missing includes for non-unity builds Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Workaround for NDK21 clang 9.0.9 compile issue. The AZStd::ranges::zip_view::iterator::iter_swap friend function is in the AZStd::ranges namespace, while the customization point object of `AZStd::ranges::customization_point_object::iter_swap` is in the regular namespace of `AZStd::ranges` and the inline namespace of `customization_point`. This issue is fixed in NDK23, but as Jenkins uses NDK21 at the time, the entire zip_view implementation has moved to inline namespace of `zip_view_internal` Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Added iterator algorithm requiremetn concepts Fixed the ambiguity in the ranges::iter_swap exchange overload to exclude itself as a candidate if the iterator reference types are swappable with each other. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding type alias for borrowed_subrange_t Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fixed convertible to ref_view check in the ranges::all customization_point Updated SFINAE detection of whether AZStd::to_address is invocable Moved the Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fixed private variable access in ranges::subrange get specialization. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removing ranges::view constraint from the ranges::views::single customization_point. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding C++23 range overload for string_view. It is detailed in the [C++draft strings](https://eel.is/c++draft/strings#lib:basic_string_view,constructor____) section Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding implementations of ranges, find, search, mismatch and equal functions. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding implementation of ranges split_view along with test. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding const overloads to SceneAPI ProxyPointer container The Proxy Pointer class operator* and operator-> was unable to be invoked with a const instance before. Now it returns a const view of the pointer it contains. This allows it to be invoked in `AZStd::to_address` as part of an SINAE context for the contiguous_iterator concept Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Refactored the to_address implementation to better work with SFINAE. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding general non-unity build fixes This is unrelated to the RangeAdaptor changes. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Allow range algorithms to be used with rvalue ranges Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Workaround MSVC Internal Compiler erroy by removing enable_if condition in the operator bool of the view_interface class. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Corrected the non_propagating_cache helper class to have public functions Fixed the order of creating the perfect forwarding call wrapper for an outer closure around another closure. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Specialized the borrowed_range and view concepts For the AZ PathView class, since it is a immutable view around a path. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removed inline namespace around the zip_view class. It was needed to workaround a clang 10 or below issue where a friend function in a namespace and a variable within underneath an inline namespace within the function namespace would cause an improper symbol redefinition. The workaround is to create a placeholder namespace containing the inline namespace and then bring that placeholder namespace into the parent scope. https://bugs.llvm.org/show_bug.cgi?id=37556 Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding implementation of the elemetns_view and join_view classes It is up to date with the standard as of the current draft: https://eel.is/c++draft/ranges. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Separated definitions of concepts out of concepts.h This allows the ranges::iter_swap and ranges::swap customization point to be moved outside of the concepts folder and into the ranges folder. The concepts.h header previously had to define those objects to avoid circular dependencies. Added the work around for ranges::iter_swap and ranges::iter_move customization_point causing an improper symbol redefinition in clang 10 or below: https://bugs.llvm.org/show_bug.cgi?id=37556 Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Alias more std:: names into the AZStd namespace. Removed our custom implementation of toaddress. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding more range view test. The join_view and elements_view classes now have UnitTest. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding deduction guides for AZStd associative containers Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Moved zip_view::sentinel iterator accessor function to zip_view.inl Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fixed variable shadowing issues with clang 12+ Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
120 lines
5.5 KiB
C++
120 lines
5.5 KiB
C++
/*
|
|
* Copyright (c) Contributors to the Open 3D Engine Project.
|
|
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <TestImpactFramework/TestImpactTestSequence.h>
|
|
#include <TestImpactFramework/TestImpactRepoPath.h>
|
|
|
|
#include <AzCore/std/chrono/chrono.h>
|
|
#include <AzCore/std/string/string.h>
|
|
#include <AzCore/std/optional.h>
|
|
#include <AzCore/std/containers/vector.h>
|
|
|
|
namespace TestImpact
|
|
{
|
|
//! The type of test sequence to run.
|
|
enum class TestSequenceType
|
|
{
|
|
None, //!< Runs no tests and will report all tests successful.
|
|
Seed, //!< Removes any prior coverage data and runs all test targets with instrumentation to reseed the data from scratch.
|
|
Regular, //!< Runs all of the test targets without any instrumentation to generate coverage data (any prior coverage data is left intact).
|
|
ImpactAnalysis, //!< Uses any prior coverage data to run the instrumented subset of selected tests (if no prior coverage data a regular run is performed instead).
|
|
ImpactAnalysisNoWrite, //!< Uses any prior coverage data to run the uninstrumented subset of selected tests (if no prior coverage data a regular run is performed instead).
|
|
//!< The coverage data is not updated with the subset of selected tests.
|
|
ImpactAnalysisOrSeed //!< Uses any prior coverage data to run the instrumented subset of selected tests (if no prior coverage data a seed run is performed instead).
|
|
};
|
|
|
|
//! Representation of the command line options supplied to the console frontend application.
|
|
class CommandLineOptions
|
|
{
|
|
public:
|
|
CommandLineOptions(int argc, char** argv);
|
|
static AZStd::string GetCommandLineUsageString();
|
|
|
|
//! Returns true if a test impact data file path has been supplied, otherwise false.
|
|
bool HasDataFilePath() const;
|
|
|
|
//! Returns true if a change list file path has been supplied, otherwise false.
|
|
bool HasChangeListFilePath() const;
|
|
|
|
//! Returns true if a sequence report file path has been supplied, otherwise false.
|
|
bool HasSequenceReportFilePath() const;
|
|
|
|
//! Returns true if the safe mode option has been enabled, otherwise false.
|
|
bool HasSafeMode() const;
|
|
|
|
//! Returns the path to the runtime configuration file.
|
|
const RepoPath& GetConfigurationFilePath() const;
|
|
|
|
//! Returns the path to the data file (if any).
|
|
const AZStd::optional<RepoPath>& GetDataFilePath() const;
|
|
|
|
//! Returns the path to the change list file (if any).
|
|
const AZStd::optional<RepoPath>& GetChangeListFilePath() const;
|
|
|
|
//! Returns the path to the sequence report file (if any).
|
|
const AZStd::optional<RepoPath>& GetSequenceReportFilePath() const;
|
|
|
|
//! Returns the test sequence type to run.
|
|
TestSequenceType GetTestSequenceType() const;
|
|
|
|
//! Returns the test prioritization policy to use.
|
|
Policy::TestPrioritization GetTestPrioritizationPolicy() const;
|
|
|
|
//! Returns the test execution failure policy to use.
|
|
Policy::ExecutionFailure GetExecutionFailurePolicy() const;
|
|
|
|
//! Returns failed test coverage drafting policy to use.
|
|
Policy::FailedTestCoverage GetFailedTestCoveragePolicy() const;
|
|
|
|
//! Returns the test failure policy to use.
|
|
Policy::TestFailure GetTestFailurePolicy() const;
|
|
|
|
//! Returns the integration failure policy to use.
|
|
Policy::IntegrityFailure GetIntegrityFailurePolicy() const;
|
|
|
|
//! Returns the test sharding policy to use.
|
|
Policy::TestSharding GetTestShardingPolicy() const;
|
|
|
|
//! Returns the test target standard output capture policy to use.
|
|
Policy::TargetOutputCapture GetTargetOutputCapture() const;
|
|
|
|
//! Returns the maximum number of test targets to be in flight at any given time.
|
|
const AZStd::optional<size_t>& GetMaxConcurrency() const;
|
|
|
|
//! Returns the individual test target timeout to use (if any).
|
|
const AZStd::optional<AZStd::chrono::milliseconds>& GetTestTargetTimeout() const;
|
|
|
|
//! Returns the global test sequence timeout to use (if any).
|
|
const AZStd::optional<AZStd::chrono::milliseconds>& GetGlobalTimeout() const;
|
|
|
|
//! Returns the filter for test suite that will be allowed to be run.
|
|
SuiteType GetSuiteFilter() const;
|
|
|
|
private:
|
|
RepoPath m_configurationFile;
|
|
AZStd::optional<RepoPath> m_dataFile;
|
|
AZStd::optional<RepoPath> m_changeListFile;
|
|
AZStd::optional<RepoPath> m_sequenceReportFile;
|
|
TestSequenceType m_testSequenceType;
|
|
Policy::TestPrioritization m_testPrioritizationPolicy = Policy::TestPrioritization::None;
|
|
Policy::ExecutionFailure m_executionFailurePolicy = Policy::ExecutionFailure::Continue;
|
|
Policy::FailedTestCoverage m_failedTestCoveragePolicy = Policy::FailedTestCoverage::Keep;
|
|
Policy::TestFailure m_testFailurePolicy = Policy::TestFailure::Abort;
|
|
Policy::IntegrityFailure m_integrityFailurePolicy = Policy::IntegrityFailure::Abort;
|
|
Policy::TestSharding m_testShardingPolicy = Policy::TestSharding::Never;
|
|
Policy::TargetOutputCapture m_targetOutputCapture = Policy::TargetOutputCapture::None;
|
|
AZStd::optional<size_t> m_maxConcurrency;
|
|
AZStd::optional<AZStd::chrono::milliseconds> m_testTargetTimeout;
|
|
AZStd::optional<AZStd::chrono::milliseconds> m_globalTimeout;
|
|
SuiteType m_suiteFilter;
|
|
bool m_safeMode = false;
|
|
};
|
|
} // namespace TestImpact
|