Termorary change to debugging version of example/utility/to_string.cpp.

This commit is contained in:
Brad Bell 2022-01-31 07:07:20 -07:00
commit 1f5281417e

View file

@ -95,6 +95,136 @@ sed -i.bak CppAD-%{version}/cmake/set_compile_flags.cmake \
# test_more/debug_rel/CMakeLists.txt: remove def of CPPAD_DEBUG_AND_RELEASE
sed -i.bak CppAD-%{version}/test_more/debug_rel/CMakeLists.txt \
-e 's|-DCPPAD_DEBUG_AND_RELEASE||'
# ----------------------------------------------------------------------------
# Temporarly replace to_string.cpp in order to debug ppc64le arch problem
cat << EOF > CppAD-%{version}/example/utility/to_string.cpp
// Examples with fundamental types
# include <cppad/utility/to_string.hpp>
namespace {
template <class Type>
void print_error(
const char* routine_name,
const char* value_name,
Type value,
Type check,
Type eps = Type(0) )
{ std::cout << routine_name << " error : ";
std::cout << value_name << " - check = " << value - check;
std::cout << ", eps = " << eps << "\n";
return;
}
template <class Integer>
Integer string2signed(const std::string& s)
{ Integer result = 0;
size_t index = 0;
if( s[0] == '-' )
++index;
while( index < s.size() )
result = Integer( 10 * result + (s[index++] - '0') );
if( s[0] == '-' )
return - result;
return result;
}
template <class Integer>
Integer string2unsigned(const std::string& s)
{ Integer result = 0;
size_t index = 0;
while( index < s.size() )
result = Integer(10 * result + Integer(s[index++]) - '0');
return result;
}
template <class Integer>
bool signed_integer(void)
{ bool ok = true;
//
Integer max = std::numeric_limits<Integer>::max();
std::string s = CppAD::to_string(max);
Integer check = string2signed<Integer>(s);
ok &= max == check;
if( max != check )
print_error("signed_integer", "max", max, check);
//
Integer min = std::numeric_limits<Integer>::min();
s = CppAD::to_string(min);
check = string2signed<Integer>(s);
ok &= min == check;
if( min != check )
print_error("signed_integer", "min", min, check);
//
return ok;
}
template <class Integer>
bool unsigned_integer(void)
{ bool ok = true;
//
Integer max = std::numeric_limits<Integer>::max();
std::string s = CppAD::to_string(max);
Integer check = string2unsigned<Integer>(s);
ok &= max == check;
if( max != check )
print_error("unsigned_integer", "max", max, check);
ok &= std::numeric_limits<Integer>::min() == 0;
if( std::numeric_limits<Integer>::min() != 0 )
std::cout << "unsigned_integer: min != 0 \n";
//
return ok;
}
template <class Float>
bool floating(void)
{ bool ok = true;
Float eps = std::numeric_limits<Float>::epsilon();
Float pi = Float( 4.0 * std::atan(1.0) );
//
std::string s = CppAD::to_string( pi );
Float check = Float( std::atof( s.c_str() ) );
ok &= std::fabs( check / pi - 1.0 ) <= Float(2.0) * eps;
if( ! ok )
print_error("floating", "pi", pi, check, eps);
//
return ok;
}
}
// Examples with AD types
# include <cppad/cppad.hpp>
namespace {
template <class Base>
bool ad_floating(void)
{ bool ok = true;
Base eps = std::numeric_limits<Base>::epsilon();
Base pi = Base( 4.0 * std::atan(1.0) );
//
std::string s = CppAD::to_string( CppAD::AD<Base>( pi ) );
Base check = Base( std::atof( s.c_str() ) );
ok &= fabs( check / pi - Base(1.0) ) <= Base( 2.0 ) * eps;
if( ! ok )
print_error("ad_floating", "pi", pi, check, eps);
//
return ok;
}
}
// Test driver
bool to_string(void)
{ bool ok = true;
ok &= unsigned_integer<unsigned short>();
ok &= signed_integer<signed int>();
//
ok &= unsigned_integer<unsigned long>();
ok &= signed_integer<signed long>();
ok &= unsigned_integer<unsigned long long>();
ok &= signed_integer<signed long long>();
//
ok &= floating<float>();
ok &= floating<double>();
ok &= floating<long double>();
//
ok &= ad_floating<float>();
ok &= ad_floating<double>();
//
return ok;
}
EOF
#
# -----------------------------------------------------------------------------
# build
# -----------------------------------------------------------------------------
@ -187,6 +317,7 @@ make %{?_smp_mflags} check
- Fix following long standing typos in cmake command:
- 1. cppad_test_vector -> cppad_testvector
- 2. cppad_max_num_theads -> cppad_max_num_threads
- Temporary change to debug ppc64le build failure: replace to_string.cpp
* Mon Jan 24 2022 Brad Bell <bradbell at seanet dot com> - 20220000.1-1
- Advance to upstream source 20220000.1