Skip to content

Commit

Permalink
methods fixed + tests written
Browse files Browse the repository at this point in the history
  • Loading branch information
sebastianbacik committed Nov 7, 2023
1 parent dffce5a commit f340697
Show file tree
Hide file tree
Showing 2 changed files with 129 additions and 12 deletions.
59 changes: 47 additions & 12 deletions src/modules/commerce/Commerce.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,64 +43,99 @@ std::string Commerce::productFullName()
return fmt::format("{} {} {}", productAdjective(), productMaterial(), productName());
}

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

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

int checkDigit = 10 - (sum % 10);
int checkDigit = sum % 10;

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

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

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

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

int checkDigit = 10 - (sum % 10);
int checkDigit = sum % 10;

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

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

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

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

int checkDigit = 10 - (sum % 10);
int checkDigit = sum % 10;

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

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

std::string ISBN10()
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] * weight;
sum += (isbn10[i] - '0') * weight;
weight--;
}

int checkDigit = 10 - (sum % 10);
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 f340697

Please sign in to comment.