#include "mediapipe/framework/api2/contract.h" #include #include "mediapipe/framework/port/gmock.h" #include "mediapipe/framework/port/gtest.h" namespace mediapipe { namespace api2 { namespace { struct ProcessItem { absl::Status Process(CalculatorContext* cc) { return {}; } }; struct ItemWithNested { constexpr auto nested_items() { return std::make_tuple(Input{"FWD"}); } }; static constexpr auto kTestContract = internal::MakeContract( Input{"BASE"}, Input::Optional{"SCALE"}, Output{"OUT"}, SideInput::Optional{"BIAS"}, SideOutput{"SIDE"}, ProcessItem{}); static_assert(std::tuple_size_v == 2, ""); static_assert(std::tuple_size_v == 1, ""); static_assert(std::tuple_size_v == 1, ""); static_assert(std::tuple_size_v == 1, ""); static_assert(internal::HasProcessMethod{}, ""); static_assert(!internal::HasProcessMethod>{}, ""); static_assert(std::tuple_size_v == 1, ""); static constexpr auto kExtractNested1 = internal::ExtractNestedItems( std::make_tuple(Input{"BASE"}, Input::Optional{"SCALE"}, Output{"OUT"})); static_assert(std::tuple_size_v == 3, ""); static constexpr auto kExtractNested2 = internal::ExtractNestedItems( std::make_tuple(Input{"BASE"}, Input::Optional{"SCALE"}, Output{"OUT"}, ItemWithNested{})); static_assert(std::tuple_size_v == 5, ""); using TaggedTestContract = internal::TaggedContract; static constexpr auto kBASE = MPP_TAG("BASE"); static constexpr auto kSCALE = MPP_TAG("SCALE"); static constexpr auto kBIAS = MPP_TAG("BIAS"); static constexpr auto kOUT = MPP_TAG("OUT"); static constexpr auto kSIDE = MPP_TAG("SIDE"); static_assert(TaggedTestContract::TaggedInputs::get(kBASE).tag_ == kBASE.kStr, ""); static_assert(TaggedTestContract::TaggedInputs::get(kSCALE).tag_ == kSCALE.kStr, ""); static_assert(TaggedTestContract::TaggedOutputs::get(kOUT).tag_ == kOUT.kStr, ""); static_assert(TaggedTestContract::TaggedSideInputs::get(kBIAS).tag_ == kBIAS.kStr, ""); static_assert(TaggedTestContract::TaggedSideOutputs::get(kSIDE).tag_ == kSIDE.kStr, ""); } // namespace } // namespace api2 } // namespace mediapipe