Skip to content

Commit

Permalink
Merge branch 'main' into feature/image_module
Browse files Browse the repository at this point in the history
  • Loading branch information
Kubaaa96 authored Nov 8, 2023
2 parents 84979ae + 52ca738 commit 5e43f1b
Show file tree
Hide file tree
Showing 6 changed files with 266 additions and 1 deletion.
12 changes: 11 additions & 1 deletion include/faker-cxx/Color.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,16 @@ class Color
* Color::lch(true) // "lcha(0, 0, 100, 0.50)"
* @endcode
*/
static std::string lch(bool includeAlpha = false);
static std::string lch(bool includeAlpha = false);

/**
* @brief Return a CMYK color
*
* @returns CMYK color formatted with cmyk(X,X,X,X)
* @code
* Color::cmyk() // "cmyk(0.72, 0.88, 0.00, 0.06)"
* @endcode
*/
static std::string cmyk();
};
}
44 changes: 44 additions & 0 deletions include/faker-cxx/Commerce.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,5 +85,49 @@ class Commerce
* @endcode
*/
static std::string productFullName();

/**
* @brief Returns a random valid ean13 code.
*
* @returns Ean13 code.
*
* @code
* Commerce::EAN13() // "1234567890128"
* @endcode
*/
static std::string EAN13();

/**
* @brief Returns a random valid ean8 code.
*
* @returns Ean8 code.
*
* @code
* Commerce::EAN8() // "90311017"
* @endcode
*/
static std::string EAN8();

/**
* @brief Returns a random valid isbn13 code.
*
* @returns Isbn13 code.
*
* @code
* Commerce::ISBN13() // "9781234567897"
* @endcode
*/
static std::string ISBN13();

/**
* @brief Returns a random valid ISBN10 code.
*
* @returns Isbn10 code.
*
* @code
* Commerce::ISBN10() // "0200716018"
* @endcode
*/
static std::string ISBN10();
};
}
10 changes: 10 additions & 0 deletions src/modules/color/Color.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,14 @@ std::string Color::lch(bool includeAlpha)
return fmt::format("lcha({}, {}, {}, {})", luminance, chroma, hue, formattedAlpha);
}

std::string Color::cmyk()
{
const std::floating_point auto cyan = Number::decimal<double>(1.);
const std::floating_point auto magenta = Number::decimal<double>(1.);
const std::floating_point auto yellow = Number::decimal<double>(1.);
const std::floating_point auto key = Number::decimal<double>(1.);

return fmt::format("cmyk({:.2f}, {:.2f}, {:.2f}, {:.2f})", cyan, magenta, yellow, key);
}

}
23 changes: 23 additions & 0 deletions src/modules/color/ColorTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -168,3 +168,26 @@ TEST_F(ColorTest, shouldGenerateLchWithAlpha)
ASSERT_TRUE(hue >= 0 && hue <= 360);
ASSERT_TRUE(alpha >= 0 && alpha <= 1);
}

TEST_F(ColorTest, shouldGenerateCmykColor)
{
const auto generatedCmykColor = faker::Color::cmyk();
const auto cmykValues =
faker::StringHelper::split(generatedCmykColor.substr(5, generatedCmykColor.size() - 1), " ");

auto offset = cmykValues[0].size();
const auto cyan = std::stod(cmykValues[0].data(), &offset);
offset = cmykValues[1].size();
const auto magenta = std::stod(cmykValues[1].data(), &offset);
offset = cmykValues[2].size();
const auto yellow = std::stod(cmykValues[2].data(), &offset);
offset = cmykValues[3].size();
const auto key = std::stod(cmykValues[3].data(), &offset);

ASSERT_TRUE(generatedCmykColor.starts_with("cmyk("));
ASSERT_TRUE(generatedCmykColor.ends_with(")"));
ASSERT_TRUE(0. <= cyan && cyan <= 1.);
ASSERT_TRUE(0. <= magenta && magenta <= 1.);
ASSERT_TRUE(0. <= yellow && yellow <= 1.);
ASSERT_TRUE(0. <= key && key <= 1.);
}
96 changes: 96 additions & 0 deletions src/modules/commerce/Commerce.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,100 @@ std::string Commerce::productFullName()
{
return fmt::format("{} {} {}", productAdjective(), productMaterial(), productName());
}

std::string Commerce::EAN13()
{
std::string ean13 = String::numeric(12, false);

int sum = 0;
for (size_t i = 0; i < 12; i++)
{
if (i % 2 == 0) {
sum += (ean13[i] - '0');
}
else {
sum += 3 * (ean13[i] - '0');
}
}

int checkDigit = sum % 10;

if (checkDigit != 0) {
checkDigit = 10 - checkDigit;
}

return ean13 + std::to_string(checkDigit);
}

std::string Commerce::EAN8()
{
std::string ean8 = String::numeric(7, false);

int sum = 0;
for (size_t i = 0; i < 7; i++)
{
if (i % 2 == 0) {
sum += 3 * (ean8[i] - '0');
}
else {
sum += (ean8[i] - '0');
}
}

int checkDigit = sum % 10;

if (checkDigit != 0) {
checkDigit = 10 - checkDigit;
}

return ean8 + std::to_string(checkDigit);
}

std::string Commerce::ISBN13()
{
std::string isbn13 = String::numeric(12, true);

int sum = 0;
for (size_t i = 0; i < 12; i++)
{
if (i % 2 == 0) {
sum += (isbn13[i] - '0');
}
else {
sum += 3 * (isbn13[i] - '0');
}
}

int checkDigit = sum % 10;

if (checkDigit != 0) {
checkDigit = 10 - checkDigit;
}

return isbn13 + std::to_string(checkDigit);
}

std::string Commerce::ISBN10()
{
std::string isbn10 = String::numeric(9, true);

int sum = 0, weight = 10;
for (size_t i = 0; i < 9; i++)
{
sum += (isbn10[i] - '0') * weight;
weight--;
}

int checkDigit = sum % 11;

if (checkDigit != 0) {
checkDigit = 11 - checkDigit;
}

if (checkDigit == 10) {
return isbn10 + "X";
}

return isbn10 + std::to_string(checkDigit);
}
}
82 changes: 82 additions & 0 deletions src/modules/commerce/CommerceTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -111,3 +111,85 @@ TEST_F(CommerceTest, shouldGenerateProductName)
ASSERT_TRUE(std::ranges::any_of(productNames, [generatedProductName](const std::string& productName)
{ return productName == generatedProductName; }));
}

TEST_F(CommerceTest, shouldGenerateEan13)
{
const auto generatedEan13 = Commerce::EAN13();

int sum = 0;
for (size_t i = 0; i < 13; i++)
{
if (i % 2 == 0) {
sum += (generatedEan13[i] - '0');
}
else {
sum += 3 * (generatedEan13[i] - '0');
}
}

ASSERT_EQ(generatedEan13.size(), 13);
ASSERT_TRUE(sum % 10 == 0);
}

TEST_F(CommerceTest, shouldGenerateEan8)
{
const auto generatedEan8 = Commerce::EAN8();

int sum = 0;
for (size_t i = 0; i < 8; i++)
{
if (i % 2 == 0) {
sum += 3 * (generatedEan8[i] - '0');
}
else {
sum += (generatedEan8[i] - '0');
}
}

ASSERT_EQ(generatedEan8.size(), 8);
ASSERT_TRUE(sum % 10 == 0);
}

TEST_F(CommerceTest, shouldGenerateIsbn13)
{
const auto generatedIsbn13 = Commerce::ISBN13();

int sum = 0;
for (size_t i = 0; i < 13; i++)
{
if (i % 2 == 0) {
sum += (generatedIsbn13[i] - '0');
}
else {
sum += 3 * (generatedIsbn13[i] - '0');
}
}

ASSERT_EQ(generatedIsbn13.size(), 13);
ASSERT_TRUE(sum % 10 == 0);
}

TEST_F(CommerceTest, shouldGenerateIsbn10)
{
const auto generatedIsbn10 = Commerce::ISBN10();

int sum = 0, weight = 10;
if (generatedIsbn10[9] == 'X') {
for (size_t i = 0; i < 9; i++)
{
sum += (generatedIsbn10[i] - '0') * weight;
weight--;
}
sum += 10;
}
else {
for (size_t i = 0; i < 10; i++)
{
sum += (generatedIsbn10[i] - '0') * weight;
weight--;
}
}

ASSERT_EQ(generatedIsbn10.size(), 10);
ASSERT_TRUE(sum % 11 == 0);
}

0 comments on commit 5e43f1b

Please sign in to comment.