From 003c9ed1bf2523f13268ef7d973365301446818a Mon Sep 17 00:00:00 2001 From: Ashar Fuadi Date: Fri, 1 Nov 2024 21:28:11 +0700 Subject: [PATCH] Validator: implement eachCharacterOf(S).isBetween() --- include/tcframe/validator/core.hpp | 36 ++++++++++++++----- .../tcframe/validator/CoreValidatorTests.cpp | 7 ++++ 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/include/tcframe/validator/core.hpp b/include/tcframe/validator/core.hpp index 3770ccc..5a89b05 100644 --- a/include/tcframe/validator/core.hpp +++ b/include/tcframe/validator/core.hpp @@ -1,9 +1,13 @@ +#pragma once +#include #include +#include using std::enable_if_t; using std::is_arithmetic_v; using std::size_t; +using std::string; using std::vector; namespace tcframe { @@ -25,7 +29,7 @@ struct ScalarValidator { }; template> -ScalarValidator valueOf(T val) { +inline ScalarValidator valueOf(T val) { return ScalarValidator(val); } @@ -48,12 +52,7 @@ struct VectorElementValidator { }; template> -VectorElementValidator eachElementOf(const vector& val) { - return VectorElementValidator(val); -} - -template> -VectorElementValidator eachElementOf(vector&& val) { +inline VectorElementValidator eachElementOf(const vector& val) { return VectorElementValidator(val); } @@ -110,8 +109,29 @@ struct VectorElementsValidator { }; template> -VectorElementsValidator elementsOf(const vector& val) { +inline VectorElementsValidator elementsOf(const vector& val) { return VectorElementsValidator(val); } +struct StringElementValidator { +private: + const string& val; + +public: + explicit StringElementValidator(const string& _val) : val(_val) {} + + bool isBetween(char minVal, char maxVal) { + for (char v : val) { + if (!valueOf(v).isBetween(minVal, maxVal)) { + return false; + } + } + return true; + } +}; + +inline StringElementValidator eachCharacterOf(const string& val) { + return StringElementValidator(val); +} + } diff --git a/test/unit/tcframe/validator/CoreValidatorTests.cpp b/test/unit/tcframe/validator/CoreValidatorTests.cpp index 03034fa..c3cf87f 100644 --- a/test/unit/tcframe/validator/CoreValidatorTests.cpp +++ b/test/unit/tcframe/validator/CoreValidatorTests.cpp @@ -66,4 +66,11 @@ TEST_F(CoreValidatorTests, elementsOf_areUnique) { EXPECT_TRUE(elementsOf(vector{'a', 'x', 'd', 'g', 'h'}).areUnique()); } +TEST_F(CoreValidatorTests, eachCharacterOf_isBetween) { + EXPECT_FALSE(eachCharacterOf("BCDEF").isBetween('B', 'E')); + EXPECT_FALSE(eachCharacterOf("BCDEF").isBetween('C', 'F')); + EXPECT_TRUE(eachCharacterOf("BCDEF").isBetween('B', 'F')); + EXPECT_TRUE(eachCharacterOf("BCDEF").isBetween('A', 'G')); +} + }