laneemden.cpp concepts expected format string serif/utils/laneemden/laneemden.hpp #include<concepts> #include<expected> #include<format> #include<string> #include"serif/utils/laneemden/laneemden.hpp" namespace{ namespacelaneemden=serif::utils::laneemden; namespacedimensions=serif::dimensions; template<typenameMass,typenameDensity,typenameGravity> conceptCanScaleMass=requires(constlaneemden::Solution&solution,Massmass,Densitydensity,Gravitygravity){ {laneemden::scale_from_mass(solution,mass,density,gravity)}->std::same_as<std::expected<laneemden::PhysicalScales,std::string>>; }; static_assert(CanScaleMass<dimensions::QuantityValue<dimensions::Mass>,dimensions::QuantityValue<dimensions::MassDensity>,dimensions::QuantityValue<dimensions::GravitationalConstant>>); static_assert(!CanScaleMass<double, double, double>); static_assert(!CanScaleMass<dimensions::QuantityValue<dimensions::Length>,dimensions::QuantityValue<dimensions::MassDensity>,dimensions::QuantityValue<dimensions::GravitationalConstant>>); static_assert(!CanScaleMass<dimensions::QuantityValue<dimensions::Mass>,dimensions::QuantityValue<dimensions::Length>,dimensions::QuantityValue<dimensions::GravitationalConstant>>); static_assert(std::same_as<decltype(laneemden::solve(3.0)),std::expected<laneemden::Solution,std::string>>); static_assert(std::equality_comparable<laneemden::IntegrationOptions>); static_assert(std::formattable<laneemden::Sample,char>); static_assert(std::formattable<laneemden::Solution,char>); constexprstd::format_string<laneemden::Sample,laneemden::Sample,laneemden::Sample,laneemden::Sample,laneemden::Sample> sample_formats{"{}{:all}{:xi}{:theta}{:derivative}"}; constexprstd::format_string<laneemden::Solution,laneemden::Solution,laneemden::Solution,laneemden::Solution,laneemden::Solution> solution_formats{"{}{:all}{:xi}{:theta}{:derivative}"}; }