Skip to content

Commit

Permalink
Merge pull request #1648 from thetic/no-long-long
Browse files Browse the repository at this point in the history
Fix use with `long long` disabled
  • Loading branch information
basvodde committed Nov 1, 2022
2 parents 8cc621c + ccae5be commit 944ce90
Show file tree
Hide file tree
Showing 23 changed files with 141 additions and 107 deletions.
28 changes: 28 additions & 0 deletions .github/workflows/extended.yml
Expand Up @@ -155,3 +155,31 @@ jobs:
run: cmake --build cpputest_build
- name: Test
run: ctest --test-dir cpputest_build

automake-no-long-long:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@main
- name: Configure
run: |
autoreconf -i .
./configure --disable-longlong
- name: Build and test
run: make tdd

cmake-no-long-long:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@main
- name: Configure
run: >
cmake
-B cpputest_build
-D CPPUTEST_USE_LONG_LONG=NO
-D CMAKE_CXX_COMPILER=clang++
- name: Build
run: cmake --build cpputest_build -j
- name: Test
run: ctest --test-dir cpputest_build -j
30 changes: 13 additions & 17 deletions include/CppUTest/CppUTestConfig.h
Expand Up @@ -274,10 +274,11 @@
* LLONG_MAX is set in limits.h. This is a crude attempt to detect long long support when no configure is used
*
*/

#if !defined(CPPUTEST_LONG_LONG_DISABLED) && !defined(CPPUTEST_USE_LONG_LONG)
#if defined(CPPUTEST_HAVE_LONG_LONG_INT) || defined(LLONG_MAX)
#ifndef CPPUTEST_USE_LONG_LONG
#if !defined(CPPUTEST_LONG_LONG_DISABLED) && (defined(CPPUTEST_HAVE_LONG_LONG_INT) || defined(LLONG_MAX))
#define CPPUTEST_USE_LONG_LONG 1
#else
#define CPPUTEST_USE_LONG_LONG 0
#endif
#endif

Expand All @@ -295,27 +296,22 @@ typedef unsigned long long cpputest_ulonglong;
#define CPPUTEST_SIZE_OF_FAKE_LONG_LONG_TYPE 8
#endif

struct cpputest_longlong
{
#if defined(__cplusplus)
cpputest_longlong() {}
cpputest_longlong(int) {}
extern "C" {
#endif

typedef struct
{
char dummy[CPPUTEST_SIZE_OF_FAKE_LONG_LONG_TYPE];
};
} cpputest_longlong;

struct cpputest_ulonglong
typedef struct
{
#if defined(__cplusplus)
cpputest_ulonglong() {}
cpputest_ulonglong(int) {}
#endif
char dummy[CPPUTEST_SIZE_OF_FAKE_LONG_LONG_TYPE];
};
} cpputest_ulonglong;

#if !defined(__cplusplus)
typedef struct cpputest_longlong cpputest_longlong;
typedef struct cpputest_ulonglong cpputest_ulonglong;
#if defined(__cplusplus)
} /* extern "C" */
#endif

#endif
Expand Down
2 changes: 2 additions & 0 deletions include/CppUTest/UtestMacros.h
Expand Up @@ -226,6 +226,7 @@
#define UNSIGNED_LONGS_EQUAL_LOCATION(expected, actual, text, file, line)\
do { UtestShell::getCurrent()->assertUnsignedLongsEqual((unsigned long)expected, (unsigned long)actual, text, file, line); } while(0)

#if CPPUTEST_USE_LONG_LONG
#define LONGLONGS_EQUAL(expected, actual)\
LONGLONGS_EQUAL_LOCATION(expected, actual, NULLPTR, __FILE__, __LINE__)

Expand All @@ -243,6 +244,7 @@

#define UNSIGNED_LONGLONGS_EQUAL_LOCATION(expected, actual, text, file, line)\
do { UtestShell::getCurrent()->assertUnsignedLongLongsEqual((cpputest_ulonglong)expected, (cpputest_ulonglong)actual, text, file, line); } while(0)
#endif // CPPUTEST_USE_LONG_LONG

#define BYTES_EQUAL(expected, actual)\
LONGS_EQUAL((expected) & 0xff,(actual) & 0xff)
Expand Down
22 changes: 20 additions & 2 deletions include/CppUTestExt/MockCheckedActualCall.h
Expand Up @@ -269,10 +269,28 @@ class MockIgnoredActualCall: public MockActualCall
virtual long int returnLongIntValue() _override { return 0; }
virtual long int returnLongIntValueOrDefault(long int value) _override { return value; }

virtual cpputest_ulonglong returnUnsignedLongLongIntValue() _override { return 0; }
virtual cpputest_ulonglong returnUnsignedLongLongIntValue() _override
{
#if CPPUTEST_USE_LONG_LONG
return 0;
#else
cpputest_ulonglong ret = {};
return ret;
#endif
}

virtual cpputest_ulonglong returnUnsignedLongLongIntValueOrDefault(cpputest_ulonglong value) _override { return value; }

virtual cpputest_longlong returnLongLongIntValue() _override { return 0; }
virtual cpputest_longlong returnLongLongIntValue() _override
{
#if CPPUTEST_USE_LONG_LONG
return 0;
#else
cpputest_longlong ret = {};
return ret;
#endif
}

virtual cpputest_longlong returnLongLongIntValueOrDefault(cpputest_longlong value) _override { return value; }

virtual unsigned int returnUnsignedIntValue() _override { return 0; }
Expand Down
2 changes: 1 addition & 1 deletion include/CppUTestExt/MockNamedValue.h
Expand Up @@ -167,7 +167,7 @@ class MockNamedValue
unsigned int unsignedIntValue_;
long int longIntValue_;
unsigned long int unsignedLongIntValue_;
#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG
cpputest_longlong longLongIntValue_;
cpputest_ulonglong unsignedLongLongIntValue_;
#else
Expand Down
2 changes: 1 addition & 1 deletion include/CppUTestExt/MockSupport_c.h
Expand Up @@ -61,7 +61,7 @@ typedef struct SMockValue_c
unsigned int unsignedIntValue;
long int longIntValue;
unsigned long int unsignedLongIntValue;
#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG
cpputest_longlong longLongIntValue;
cpputest_ulonglong unsignedLongLongIntValue;
#else
Expand Down
2 changes: 1 addition & 1 deletion src/CppUTest/SimpleString.cpp
Expand Up @@ -781,7 +781,7 @@ SimpleString StringFrom(const std::nullptr_t value)
}
#endif

#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG

SimpleString StringFrom(cpputest_longlong value)
{
Expand Down
4 changes: 2 additions & 2 deletions src/CppUTest/Utest.cpp
Expand Up @@ -486,7 +486,7 @@ void UtestShell::assertUnsignedLongsEqual(unsigned long expected, unsigned long
void UtestShell::assertLongLongsEqual(cpputest_longlong expected, cpputest_longlong actual, const char* text, const char* fileName, size_t lineNumber, const TestTerminator& testTerminator)
{
getTestResult()->countCheck();
#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG
if (expected != actual)
failWith(LongLongsEqualFailure(this, fileName, lineNumber, expected, actual, text), testTerminator);
#else
Expand All @@ -499,7 +499,7 @@ void UtestShell::assertLongLongsEqual(cpputest_longlong expected, cpputest_longl
void UtestShell::assertUnsignedLongLongsEqual(cpputest_ulonglong expected, cpputest_ulonglong actual, const char* text, const char* fileName, size_t lineNumber, const TestTerminator& testTerminator)
{
getTestResult()->countCheck();
#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG
if (expected != actual)
failWith(UnsignedLongLongsEqualFailure(this, fileName, lineNumber, expected, actual, text), testTerminator);
#else
Expand Down
26 changes: 16 additions & 10 deletions src/CppUTestExt/MockActualCall.cpp
Expand Up @@ -241,7 +241,7 @@ MockActualCall& MockCheckedActualCall::withLongIntParameter(const SimpleString&
return *this;
}

#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG

MockActualCall& MockCheckedActualCall::withUnsignedLongLongIntParameter(const SimpleString& name, cpputest_ulonglong value)
{
Expand Down Expand Up @@ -472,7 +472,7 @@ long int MockCheckedActualCall::returnLongIntValueOrDefault(long int default_val
return returnLongIntValue();
}

#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG

cpputest_ulonglong MockCheckedActualCall::returnUnsignedLongLongIntValue()
{
Expand Down Expand Up @@ -505,7 +505,8 @@ cpputest_longlong MockCheckedActualCall::returnLongLongIntValueOrDefault(cpputes
cpputest_ulonglong MockCheckedActualCall::returnUnsignedLongLongIntValue()
{
FAIL("Unsigned Long Long type is not supported");
return cpputest_ulonglong(0);
cpputest_ulonglong ret = {};
return ret;
}

cpputest_ulonglong MockCheckedActualCall::returnUnsignedLongLongIntValueOrDefault(cpputest_ulonglong default_value)
Expand All @@ -517,7 +518,8 @@ cpputest_ulonglong MockCheckedActualCall::returnUnsignedLongLongIntValueOrDefaul
cpputest_longlong MockCheckedActualCall::returnLongLongIntValue()
{
FAIL("Long Long type is not supported");
return cpputest_longlong(0);
cpputest_longlong ret = {};
return ret;
}

cpputest_longlong MockCheckedActualCall::returnLongLongIntValueOrDefault(cpputest_longlong default_value)
Expand Down Expand Up @@ -727,7 +729,7 @@ MockActualCall& MockActualCallTrace::withLongIntParameter(const SimpleString& na
return *this;
}

#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG

MockActualCall& MockActualCallTrace::withUnsignedLongLongIntParameter(const SimpleString& name, cpputest_ulonglong value)
{
Expand Down Expand Up @@ -856,7 +858,7 @@ long int MockActualCallTrace::returnLongIntValueOrDefault(long int)
return 0;
}

#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG

cpputest_longlong MockActualCallTrace::returnLongLongIntValue()
{
Expand All @@ -883,25 +885,29 @@ cpputest_longlong MockActualCallTrace::returnLongLongIntValueOrDefault(cpputest_
cpputest_longlong MockActualCallTrace::returnLongLongIntValue()
{
FAIL("Long Long type is not supported");
return cpputest_longlong(0);
cpputest_longlong ret = {};
return ret;
}

cpputest_ulonglong MockActualCallTrace::returnUnsignedLongLongIntValue()
{
FAIL("Unsigned Long Long type is not supported");
return cpputest_ulonglong(0);
cpputest_ulonglong ret = {};
return ret;
}

cpputest_ulonglong MockActualCallTrace::returnUnsignedLongLongIntValueOrDefault(cpputest_ulonglong)
{
FAIL("Unsigned Long Long type is not supported");
return cpputest_ulonglong(0);
cpputest_ulonglong ret = {};
return ret;
}

cpputest_longlong MockActualCallTrace::returnLongLongIntValueOrDefault(cpputest_longlong)
{
FAIL("Long Long type is not supported");
return cpputest_longlong(0);
cpputest_longlong ret = {};
return ret;
}

#endif
Expand Down
4 changes: 2 additions & 2 deletions src/CppUTestExt/MockExpectedCall.cpp
Expand Up @@ -125,7 +125,7 @@ MockExpectedCall& MockCheckedExpectedCall::withUnsignedLongIntParameter(const Si
return *this;
}

#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG

MockExpectedCall& MockCheckedExpectedCall::withLongLongIntParameter(const SimpleString& name, cpputest_longlong value)
{
Expand Down Expand Up @@ -514,7 +514,7 @@ MockExpectedCall& MockCheckedExpectedCall::andReturnValue(unsigned long int valu
return *this;
}

#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG

MockExpectedCall& MockCheckedExpectedCall::andReturnValue(cpputest_longlong value)
{
Expand Down
16 changes: 9 additions & 7 deletions src/CppUTestExt/MockNamedValue.cpp
Expand Up @@ -82,7 +82,7 @@ void MockNamedValue::setValue(unsigned long int value)
value_.unsignedLongIntValue_ = value;
}

#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG

void MockNamedValue::setValue(cpputest_longlong value)
{
Expand Down Expand Up @@ -246,7 +246,7 @@ unsigned long int MockNamedValue::getUnsignedLongIntValue() const
}
}

#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG

cpputest_longlong MockNamedValue::getLongLongIntValue() const
{
Expand Down Expand Up @@ -289,13 +289,15 @@ cpputest_ulonglong MockNamedValue::getUnsignedLongLongIntValue() const
cpputest_longlong MockNamedValue::getLongLongIntValue() const
{
FAIL("Long Long type is not supported");
return cpputest_longlong(0);
cpputest_longlong ret = {};
return ret;
}

cpputest_ulonglong MockNamedValue::getUnsignedLongLongIntValue() const
{
FAIL("Unsigned Long Long type is not supported");
return cpputest_ulonglong(0);
cpputest_ulonglong ret = {};
return ret;
}

#endif
Expand Down Expand Up @@ -393,7 +395,7 @@ bool MockNamedValue::equals(const MockNamedValue& p) const
return (value_.longIntValue_ >= 0) && ((unsigned long)value_.longIntValue_ == p.value_.unsignedLongIntValue_);
else if((type_ == "unsigned long int") && (p.type_ == "long int"))
return (p.value_.longIntValue_ >= 0) && (value_.unsignedLongIntValue_ == (unsigned long) p.value_.longIntValue_);
#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG
else if ((type_ == "long long int") && (p.type_ == "int"))
return value_.longLongIntValue_ == p.value_.intValue_;
else if ((type_ == "int") && (p.type_ == "long long int"))
Expand Down Expand Up @@ -444,7 +446,7 @@ bool MockNamedValue::equals(const MockNamedValue& p) const
return value_.longIntValue_ == p.value_.longIntValue_;
else if (type_ == "unsigned long int")
return value_.unsignedLongIntValue_ == p.value_.unsignedLongIntValue_;
#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG
else if (type_ == "long long int")
return value_.longLongIntValue_ == p.value_.longLongIntValue_;
else if (type_ == "unsigned long long int")
Expand Down Expand Up @@ -496,7 +498,7 @@ SimpleString MockNamedValue::toString() const
return StringFrom(value_.longIntValue_) + " " + BracketsFormattedHexStringFrom(value_.longIntValue_);
else if (type_ == "unsigned long int")
return StringFrom(value_.unsignedLongIntValue_) + " " + BracketsFormattedHexStringFrom(value_.unsignedLongIntValue_);
#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG
else if (type_ == "long long int")
return StringFrom(value_.longLongIntValue_) + " " + BracketsFormattedHexStringFrom(value_.longLongIntValue_);
else if (type_ == "unsigned long long int")
Expand Down
8 changes: 5 additions & 3 deletions src/CppUTestExt/MockSupport.cpp
Expand Up @@ -546,7 +546,7 @@ unsigned long int MockSupport::unsignedLongIntReturnValue()
return returnValue().getUnsignedLongIntValue();
}

#ifdef CPPUTEST_USE_LONG_LONG
#if CPPUTEST_USE_LONG_LONG

cpputest_longlong MockSupport::longLongIntReturnValue()
{
Expand Down Expand Up @@ -579,13 +579,15 @@ cpputest_ulonglong MockSupport::returnUnsignedLongLongIntValueOrDefault(cpputest
cpputest_longlong MockSupport::longLongIntReturnValue()
{
FAIL("Long Long type is not supported");
return cpputest_longlong(0);
cpputest_longlong ret = {};
return ret;
}

cpputest_ulonglong MockSupport::unsignedLongLongIntReturnValue()
{
FAIL("Unsigned Long Long type is not supported");
return cpputest_ulonglong(0);
cpputest_ulonglong ret = {};
return ret;
}

cpputest_longlong MockSupport::returnLongLongIntValueOrDefault(cpputest_longlong defaultValue)
Expand Down

0 comments on commit 944ce90

Please sign in to comment.