Termorary change to debugging version of example/utility/to_string.cpp.
This commit is contained in:
parent
db2c52179f
commit
1f5281417e
1 changed files with 131 additions and 0 deletions
131
cppad.spec
131
cppad.spec
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue