cantera/test_problems/printUtilUnitTest/pUtest.cpp
Ray Speth 7c171631af Merge branch 'scons' into 'trunk'
Conflicts:
	Cantera/Makefile.in
	Cantera/clib/src/clib_defs.h
	Cantera/clib/src/ctreactor.cpp
	Cantera/clib/src/ctstagn.cpp
	Cantera/clib/src/ctstagn.h
	Cantera/cxx/Makefile.in
	Cantera/cxx/demos/combustor/combustor.cpp
	Cantera/cxx/demos/flamespeed/flamespeed.cpp
	Cantera/cxx/demos/kinetics1/example_utils.h
	Cantera/cxx/demos/kinetics1/kinetics1.cpp
	Cantera/cxx/include/Cantera.h
	Cantera/cxx/include/Cantera.mak.in
	Cantera/cxx/include/Cantera_bt.mak.in
	Cantera/cxx/include/Edge.h
	Cantera/cxx/include/GRI30.h
	Cantera/cxx/include/Interface.h
	Cantera/cxx/include/zerodim.h
	Cantera/fortran/f77demos/Makefile.in
	Cantera/fortran/src/Makefile.in
	Cantera/fortran/src/fct.cpp
	Cantera/fortran/src/fctxml.cpp
	Cantera/fortran/src/flib_defs.h
	Cantera/matlab/Makefile.in
	Cantera/matlab/cantera/Contents.m
	Cantera/matlab/setup_winmatlab.py
	Cantera/matlab/src/ctfunctions.cpp
	Cantera/matlab/src/ctmatutils.h
	Cantera/matlab/src/mixturemethods.cpp
	Cantera/matlab/src/mllogger.h
	Cantera/matlab/src/phasemethods.cpp
	Cantera/matlab/src/reactormethods.cpp
	Cantera/matlab/src/reactornetmethods.cpp
	Cantera/matlab/src/thermomethods.cpp
	Cantera/matlab/src/wallmethods.cpp
	Cantera/matlab/src/xmlmethods.cpp
	Cantera/python/Cantera/Edge.py
	Cantera/python/Cantera/Interface.py
	Cantera/python/Cantera/Phase.py
	Cantera/python/Cantera/importFromFile.py
	Cantera/python/Makefile.in
	Cantera/python/ctml_writer.py
	Cantera/python/setup.py.in
	Cantera/python/src/Makefile.in
	Cantera/python/src/ctkinetics_methods.cpp
	Cantera/python/src/ctonedim_methods.cpp
	Cantera/python/src/pylogger.h
	Cantera/src/Makefile.in
	Cantera/src/base/config.h.in
	Cantera/src/base/ctml.cpp
	Cantera/src/base/ctml.h
	Cantera/src/base/mdp_allo.cpp
	Cantera/src/base/mdp_allo.h
	Cantera/src/base/vec_functions.h
	Cantera/src/base/xml.cpp
	Cantera/src/base/xml.h
	Cantera/src/converters/CKParser.h
	Cantera/src/converters/Element.h
	Cantera/src/converters/Reaction.h
	Cantera/src/converters/RxnSpecies.h
	Cantera/src/converters/Species.h
	Cantera/src/converters/ckr_defs.h
	Cantera/src/converters/ckr_utils.h
	Cantera/src/equil/BasisOptimize.cpp
	Cantera/src/equil/Makefile.in
	Cantera/src/equil/MultiPhase.cpp
	Cantera/src/equil/vcs_MultiPhaseEquil.cpp
	Cantera/src/equil/vcs_VolPhase.cpp
	Cantera/src/equil/vcs_VolPhase.h
	Cantera/src/equil/vcs_linmaxc.cpp
	Cantera/src/equil/vcs_phaseStability.cpp
	Cantera/src/equil/vcs_rxnadj.cpp
	Cantera/src/equil/vcs_solve.cpp
	Cantera/src/equil/vcs_solve.h
	Cantera/src/equil/vcs_solve_TP.cpp
	Cantera/src/equil/vcs_util.cpp
	Cantera/src/equil/vcs_xerror.c
	Cantera/src/kinetics/GasKinetics.cpp
	Cantera/src/kinetics/GasKinetics.h
	Cantera/src/kinetics/InterfaceKinetics.cpp
	Cantera/src/kinetics/InterfaceKinetics.h
	Cantera/src/kinetics/Kinetics.h
	Cantera/src/kinetics/ReactionStoichMgr.h
	Cantera/src/kinetics/RxnRates.h
	Cantera/src/kinetics/StoichManager.h
	Cantera/src/numerics/BandMatrix.cpp
	Cantera/src/numerics/BandMatrix.h
	Cantera/src/numerics/DAE_Solver.h
	Cantera/src/numerics/DAE_solvers.cpp
	Cantera/src/numerics/DenseMatrix.cpp
	Cantera/src/numerics/DenseMatrix.h
	Cantera/src/numerics/FuncEval.h
	Cantera/src/numerics/IDA_Solver.cpp
	Cantera/src/numerics/IDA_Solver.h
	Cantera/src/numerics/Integrator.h
	Cantera/src/numerics/Makefile.in
	Cantera/src/numerics/NonlinearSolver.cpp
	Cantera/src/numerics/NonlinearSolver.h
	Cantera/src/numerics/ResidEval.h
	Cantera/src/numerics/ResidJacEval.cpp
	Cantera/src/numerics/ResidJacEval.h
	Cantera/src/numerics/SquareMatrix.cpp
	Cantera/src/numerics/SquareMatrix.h
	Cantera/src/numerics/ctlapack.h
	Cantera/src/oneD/Domain1D.h
	Cantera/src/oneD/OneDim.cpp
	Cantera/src/oneD/OneDim.h
	Cantera/src/oneD/Resid1D.h
	Cantera/src/oneD/Solid1D.cpp
	Cantera/src/oneD/Solid1D.h
	Cantera/src/oneD/StFlow.cpp
	Cantera/src/oneD/Surf1D.h
	Cantera/src/spectra/LineBroadener.h
	Cantera/src/thermo/Constituents.cpp
	Cantera/src/thermo/GibbsExcessVPSSTP.cpp
	Cantera/src/thermo/IonsFromNeutralVPSSTP.cpp
	Cantera/src/thermo/IonsFromNeutralVPSSTP.h
	Cantera/src/thermo/LatticePhase.cpp
	Cantera/src/thermo/LatticeSolidPhase.cpp
	Cantera/src/thermo/LatticeSolidPhase.h
	Cantera/src/thermo/Makefile.in
	Cantera/src/thermo/MargulesVPSSTP.cpp
	Cantera/src/thermo/MargulesVPSSTP.h
	Cantera/src/thermo/NasaThermo.h
	Cantera/src/thermo/PDSS_IonsFromNeutral.cpp
	Cantera/src/thermo/PDSS_IonsFromNeutral.h
	Cantera/src/thermo/PDSS_SSVol.cpp
	Cantera/src/thermo/Phase.cpp
	Cantera/src/thermo/PseudoBinaryVPSSTP.cpp
	Cantera/src/thermo/PseudoBinaryVPSSTP.h
	Cantera/src/thermo/PureFluidPhase.cpp
	Cantera/src/thermo/ShomateThermo.h
	Cantera/src/thermo/SimpleThermo.h
	Cantera/src/thermo/SpeciesThermoFactory.cpp
	Cantera/src/thermo/State.h
	Cantera/src/thermo/StoichSubstance.h
	Cantera/src/thermo/ThermoFactory.cpp
	Cantera/src/thermo/ThermoPhase.cpp
	Cantera/src/thermo/ThermoPhase.h
	Cantera/src/transport/AqueousTransport.cpp
	Cantera/src/transport/AqueousTransport.h
	Cantera/src/transport/DustyGasTransport.cpp
	Cantera/src/transport/DustyGasTransport.h
	Cantera/src/transport/L_matrix.h
	Cantera/src/transport/LiquidTransport.cpp
	Cantera/src/transport/LiquidTransport.h
	Cantera/src/transport/LiquidTransportData.h
	Cantera/src/transport/MMCollisionInt.cpp
	Cantera/src/transport/MMCollisionInt.h
	Cantera/src/transport/Makefile.in
	Cantera/src/transport/MixTransport.cpp
	Cantera/src/transport/MixTransport.h
	Cantera/src/transport/MultiTransport.cpp
	Cantera/src/transport/MultiTransport.h
	Cantera/src/transport/SimpleTransport.cpp
	Cantera/src/transport/SimpleTransport.h
	Cantera/src/transport/SolidTransport.cpp
	Cantera/src/transport/SolidTransport.h
	Cantera/src/transport/TransportBase.h
	Cantera/src/transport/TransportFactory.cpp
	Cantera/src/transport/TransportFactory.h
	Cantera/src/transport/TransportParams.h
	Cantera/src/transport/WaterTransport.h
	Cantera/src/zeroD/FlowDevice.h
	Cantera/src/zeroD/Reactor.h
	Cantera/src/zeroD/ReactorBase.cpp
	Cantera/src/zeroD/ReactorBase.h
	Cantera/src/zeroD/ReactorNet.h
	Cantera/src/zeroD/Wall.h
	Cantera/user/Makefile.in
	License.rtf
	Makefile.in
	apps/bvp/stagnation.cpp
	configure
	configure.in
	data/transport/misc_tran.dat
	docs/Makefile.in
	docs/install_examples/README.txt
	docs/install_examples/cygwin_gcc434_dbg_f2c_numpy.sh
	docs/install_examples/linux_64_gcc424_dbg_python252_numpy
	docs/install_examples/linux_64_gcc424_opt_python252_numpy
	docs/install_examples/mac_gcc401_python251_numpy
	docs/python/.cvsignore
	ext/Makefile.in
	ext/blas/Makefile.in
	ext/cvode/Makefile.in
	ext/f2c_blas/Makefile.in
	ext/f2c_lapack/Makefile.in
	ext/f2c_math/Makefile.in
	ext/f2c_math/xersve.c
	ext/f2c_recipes/Makefile.in
	ext/lapack/Makefile.in
	ext/math/Makefile.in
	ext/recipes/Makefile.in
	ext/tpx/CarbonDioxide.cpp
	ext/tpx/Makefile.in
	ext/tpx/Sub.cpp
	ext/tpx/utils.cpp
	preconfig
	test_problems/ChemEquil_gri_matrix/gri_matrix.cpp
	test_problems/ChemEquil_gri_pairs/gri_pairs.cpp
	test_problems/ChemEquil_ionizedGas/ionizedGasEquil.cpp
	test_problems/ChemEquil_ionizedGas/runtest
	test_problems/ChemEquil_red1/basopt_red1.cpp
	test_problems/CpJump/CpJump.cpp
	test_problems/Makefile.in
	test_problems/VCSnonideal/Makefile.in
	test_problems/VCSnonideal/NaCl_equil/HMW_NaCl.xml
	test_problems/VCSnonideal/NaCl_equil/nacl_equil.cpp
	test_problems/VPsilane_test/silane_equil.cpp
	test_problems/cathermo/DH_graph_1/DH_graph_1.cpp
	test_problems/cathermo/DH_graph_NM/DH_graph_1.cpp
	test_problems/cathermo/DH_graph_Pitzer/DH_graph_1.cpp
	test_problems/cathermo/DH_graph_acommon/DH_graph_1.cpp
	test_problems/cathermo/DH_graph_bdotak/DH_graph_1.cpp
	test_problems/cathermo/HMW_dupl_test/HMW_NaCl_sp1977_alt.xml
	test_problems/cathermo/HMW_dupl_test/HMW_dupl_test.cpp
	test_problems/cathermo/HMW_dupl_test/TemperatureTable.h
	test_problems/cathermo/HMW_dupl_test/sortAlgorithms.cpp
	test_problems/cathermo/HMW_dupl_test/sortAlgorithms.h
	test_problems/cathermo/HMW_graph_CpvT/HMW_NaCl_sp1977_alt.xml
	test_problems/cathermo/HMW_graph_CpvT/HMW_graph_CpvT.cpp
	test_problems/cathermo/HMW_graph_CpvT/TemperatureTable.h
	test_problems/cathermo/HMW_graph_CpvT/sortAlgorithms.cpp
	test_problems/cathermo/HMW_graph_CpvT/sortAlgorithms.h
	test_problems/cathermo/HMW_graph_GvI/HMW_NaCl.xml
	test_problems/cathermo/HMW_graph_GvI/HMW_graph_GvI.cpp
	test_problems/cathermo/HMW_graph_GvI/TemperatureTable.h
	test_problems/cathermo/HMW_graph_GvI/sortAlgorithms.cpp
	test_problems/cathermo/HMW_graph_GvI/sortAlgorithms.h
	test_problems/cathermo/HMW_graph_GvT/HMW_NaCl_sp1977_alt.xml
	test_problems/cathermo/HMW_graph_GvT/HMW_graph_GvT.cpp
	test_problems/cathermo/HMW_graph_GvT/TemperatureTable.h
	test_problems/cathermo/HMW_graph_GvT/sortAlgorithms.cpp
	test_problems/cathermo/HMW_graph_GvT/sortAlgorithms.h
	test_problems/cathermo/HMW_graph_HvT/HMW_NaCl_sp1977_alt.xml
	test_problems/cathermo/HMW_graph_HvT/HMW_graph_HvT.cpp
	test_problems/cathermo/HMW_graph_HvT/TemperatureTable.h
	test_problems/cathermo/HMW_graph_HvT/sortAlgorithms.cpp
	test_problems/cathermo/HMW_graph_HvT/sortAlgorithms.h
	test_problems/cathermo/HMW_graph_VvT/HMW_NaCl_sp1977_alt.xml
	test_problems/cathermo/HMW_graph_VvT/HMW_graph_VvT.cpp
	test_problems/cathermo/HMW_graph_VvT/TemperatureTable.h
	test_problems/cathermo/HMW_graph_VvT/sortAlgorithms.cpp
	test_problems/cathermo/HMW_graph_VvT/sortAlgorithms.h
	test_problems/cathermo/HMW_test_1/HMW_test_1.cpp
	test_problems/cathermo/HMW_test_3/HMW_test_3.cpp
	test_problems/cathermo/Makefile.in
	test_problems/cathermo/VPissp/ISSPTester.cpp
	test_problems/cathermo/ims/IMSTester.cpp
	test_problems/cathermo/issp/ISSPTester.cpp
	test_problems/cathermo/stoichSubSSTP/TemperatureTable.h
	test_problems/cathermo/stoichSubSSTP/sortAlgorithms.cpp
	test_problems/cathermo/stoichSubSSTP/sortAlgorithms.h
	test_problems/cathermo/stoichSubSSTP/stoichSubSSTP.cpp
	test_problems/cathermo/testIAPWS/testIAPWSphi.cpp
	test_problems/cathermo/testWaterPDSS/testWaterPDSS.cpp
	test_problems/cathermo/testWaterTP/testWaterSSTP.cpp
	test_problems/cathermo/wtWater/wtWater.cpp
	test_problems/ck2cti_test/Makefile.in
	test_problems/ck2cti_test/runtest.in
	test_problems/cxx_ex/Makefile.in
	test_problems/cxx_ex/equil_example1.cpp
	test_problems/cxx_ex/example_utils.h
	test_problems/cxx_ex/kinetics_example1.cpp
	test_problems/cxx_ex/kinetics_example2.cpp
	test_problems/cxx_ex/kinetics_example3.cpp
	test_problems/cxx_ex/runtest
	test_problems/cxx_ex/rxnpath_example1.cpp
	test_problems/cxx_ex/transport_example1.cpp
	test_problems/cxx_ex/transport_example2.cpp
	test_problems/min_python/Makefile.in
	test_problems/min_python/minDiamond/Makefile.in
	test_problems/min_python/negATest/negATest.cpp
	test_problems/mixGasTransport/runtest
	test_problems/nasa9_reader/Makefile.in
	test_problems/nasa9_reader/runtest.in
	test_problems/negATest/negATest.cpp
	test_problems/printUtilUnitTest/pUtest.cpp
	test_problems/pureFluidTest/testPureWater.cpp
	test_problems/silane_equil/silane_equil.cpp
	test_problems/surfkin/surfdemo.cpp
	tools/Makefile.in
	tools/bin/cvs2cl.pl
	tools/src/ck2cti.cpp
	tools/templates/f77/demo_ftnlib.cpp
	win32/vc7/Sundials/sundials/sundials_config.h
	win32/vc9/Sundials/SUNDIALS_SHARED/sundials_config.h
	winconfig.h
2012-02-10 03:21:33 +00:00

565 lines
9.7 KiB
C++

#include <iostream>
#include <fstream>
#include <cmath>
#include <sstream>
#include "Cantera.h"
#include "kernel/PrintCtrl.h"
#include "kernel/LogPrintCtrl.h"
using namespace Cantera;
using namespace std;
bool dnequl(const double a, const double b, int isig) {
double atol = fabs(a) + fabs(b);
double asig = pow(10.0, -isig);
if (asig > 1.0E-6) {
asig = 1.0E-6;
}
double c = fabs(a - b);
if (c > atol * asig) {
return true;
}
return false;
}
void doCheck(const double a, const double b, int isig) {
if (dnequl(a, b, isig)) {
printf("error dg = %20.13e ne %g \n", a, b);
} else {
printf("good: dg = %20.13e eq %g \n", a, b);
}
}
void doLogger() {
LogPrintCtrl ppc;
ostream ffs(cout.rdbuf());
double d, dg;
int nsig, p, w, wMax, wMin;
int Ncrop10;
d = 0.12345;
nsig = 2;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 0.12, nsig);
d = -1.0375E15;
nsig = 3;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -1.03E15, nsig);
d = 1.0345E-270;
nsig = 5;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 1.0345E-270, nsig);
d = 1.0345E-15;
nsig = 3;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 1.03E-15, nsig);
d = 1.0345E-15;
nsig = 5;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 1.0345E-15, nsig);
nsig = 2;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 1.0E-15, nsig);
d = -1.0345E-15;
nsig = 2;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -1.0E-15, nsig);
d = -1.0345E-15;
nsig = 3;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -1.03E-15, nsig);
d = -1.0345E-15;
nsig = 5;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -1.0345E-15, nsig);
d = -1.0345E-15;
nsig = 7;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -1.0345E-15, nsig);
d = 1.0345E15;
nsig = 7;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 1.0345E15, nsig);
d = -1.0345E15;
nsig = 7;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -1.0345E15, nsig);
d = -1.0305E15;
nsig = 1;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -1.0E15, nsig);
d = -10.E-3;
nsig = 4;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -10E-3, nsig);
d = 1.2345;
nsig = 2;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 1.2, nsig);
d = 12.345;
nsig = 2;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 12., nsig);
d = 0.9999;
nsig = 2;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 0.99, nsig);
d = 1.1234;
nsig = 3;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 1.12, nsig);
Ncrop10 = -15;
d = 1.1234E-15;
dg = ppc.cropAbs10(d, Ncrop10);
doCheck(dg, 1.0E-15, nsig);
Ncrop10 = -16;
d = 1.1234E-15;
dg = ppc.cropAbs10(d, Ncrop10);
doCheck(dg, 1.1E-15, nsig);
Ncrop10 = -14;
d = 1.1234E-15;
dg = ppc.cropAbs10(d, Ncrop10);
doCheck(dg, 0.0, nsig);
Ncrop10 = 6;
d = 1.1234E8;
dg = ppc.cropAbs10(d, Ncrop10);
doCheck(dg, 1.12E8, nsig);
ppc.setNdec(-15);
d = 1.1234E-14;
p = 5;
w = 20;
ppc.pr_de_c10(d, p, w);
ffs << " -- should be 1.1000E-14" << endl;
ppc.setNdec(-14);
d = 1.1234E-14;
p = 5;
w = 20;
ppc.pr_de_c10(d, p, w);
ffs << " -- should be 1.0000E-14" << endl;
ppc.setNdec(-13);
d = 1.1234E-14;
p = 5;
wMin = 20;
ffs << "\"";
ppc.pr_de_c10(d, p, wMin);
ffs << "\" -- should be \" 0.0000E+00\" " << endl;
ppc.setNdec(-20);
d = 1.1234567E-14;
p = 5;
w = 20;
ffs << "\"";
ppc.pr_de_c10(d, p, w);
ffs << "\" -- should be 1.1235E-14" << endl;
ppc.setNdec(-20);
d = 1.1234567E-14;
p = 3;
w = 17;
ffs << "\"";
ppc.pr_de_c10(d, p, w);
ffs << "\" -- should be \" 1.12E-14\"" << endl;
ppc.setNdec(-20);
d = 1.1234567E-14;
p = 5;
wMin = 3;
wMax = 8;
ffs << "\"";
ppc.pr_de_c10(d, p, wMin, wMax);
ffs << "\" -- should be \"1.12E-14\" " << endl;
ppc.setNdec(-20);
d = 1.1234567E-4;
p = 5;
wMin = 3;
wMax = 8;
ppc.pr_de_c10(d, p, wMin, wMax);
ffs << " -- should be 1.12E-14 " << endl;
ppc.setNdec(-120);
d = 1.1234567E-109;
p = 5;
wMin = 3;
wMax = 8;
ppc.pr_de_c10(d, p, wMin, wMax);
ffs << " -- should be 1.1E-109 " << endl;
ppc.setNdec(-120);
d = 1.1234567E-19;
p = 5;
wMin = 3;
wMax = 9;
ppc.pr_de_c10(d, p, wMin, wMax);
ffs << " -- should be 1.123E-19 " << endl;
ppc.setNdec(-20);
d = -1.1234567E-19;
p = 5;
wMin = 3;
wMax = 10;
ppc.pr_de_c10(d, p, wMin, wMax);
ffs << " -- should be -1.00E-19 " << endl;
ppc.setNdec(-20);
d = -1.1234567E-19;
p = 5;
wMin = 3;
wMax = 11;
ppc.pr_de_c10(d, p, wMin, wMax);
ffs << " -- should be -1.1000E-19 " << endl;
ppc.setNdec(-25);
d = -1.1274567E-19;
p = 3;
wMin = 3;
wMax = 10;
ppc.pr_de_c10(d, p, wMin, wMax);
ffs << " -- should be -1.13E-19 " << endl;
ppc.setNdec(-25);
d = -1.127401E-19;
double dd = ppc.cropSigDigits(d, 3);
p = 4;
wMin = 3;
wMax = 10;
ppc.pr_de_c10(dd, p, wMin, wMax);
ffs << " -- should be -1.130E-19 " << endl;
return;
}
int main() {
#ifdef _MSC_VER
_set_output_format(_TWO_DIGIT_EXPONENT);
#endif
// How to connect to a file:
// ofstream fff("redirect.txt");
// ostream ffs(fff.rdbuf());
// How to connect to a string:
// std::ostringstream os;
// ostream ffss(os.rdbuf());
ostream ffs(cout.rdbuf());
PrintCtrl ppc(ffs);
double d, dg;
int nsig, p, w, wMax, wMin;
int Ncrop10;
d = 0.12345;
nsig = 2;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 0.12, nsig);
d = -1.0375E15;
nsig = 3;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -1.03E15, nsig);
d = 1.0345E-270;
nsig = 5;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 1.0345E-270, nsig);
d = 1.0345E-15;
nsig = 3;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 1.03E-15, nsig);
d = 1.0345E-15;
nsig = 5;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 1.0345E-15, nsig);
nsig = 2;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 1.0E-15, nsig);
d = -1.0345E-15;
nsig = 2;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -1.0E-15, nsig);
d = -1.0345E-15;
nsig = 3;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -1.03E-15, nsig);
d = -1.0345E-15;
nsig = 5;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -1.0345E-15, nsig);
d = -1.0345E-15;
nsig = 7;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -1.0345E-15, nsig);
d = 1.0345E15;
nsig = 7;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 1.0345E15, nsig);
d = -1.0345E15;
nsig = 7;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -1.0345E15, nsig);
d = -1.0305E15;
nsig = 1;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -1.0E15, nsig);
d = -10.E-3;
nsig = 4;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, -10E-3, nsig);
d = 1.2345;
nsig = 2;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 1.2, nsig);
d = 12.345;
nsig = 2;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 12., nsig);
d = 0.9999;
nsig = 2;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 0.99, nsig);
d = 1.1234;
nsig = 3;
dg = ppc.cropSigDigits(d, nsig);
doCheck(dg, 1.12, nsig);
Ncrop10 = -15;
d = 1.1234E-15;
dg = ppc.cropAbs10(d, Ncrop10);
doCheck(dg, 1.0E-15, nsig);
Ncrop10 = -16;
d = 1.1234E-15;
dg = ppc.cropAbs10(d, Ncrop10);
doCheck(dg, 1.1E-15, nsig);
Ncrop10 = -14;
d = 1.1234E-15;
dg = ppc.cropAbs10(d, Ncrop10);
doCheck(dg, 0.0, nsig);
Ncrop10 = 6;
d = 1.1234E8;
dg = ppc.cropAbs10(d, Ncrop10);
doCheck(dg, 1.12E8, nsig);
ppc.setNdec(-15);
d = 1.1234E-14;
p = 5;
w = 20;
ppc.pr_de_c10(d, p, w);
ffs << " -- should be 1.1000E-14" << endl;
ppc.setNdec(-14);
d = 1.1234E-14;
p = 5;
w = 20;
ppc.pr_de_c10(d, p, w);
ffs << " -- should be 1.0000E-14" << endl;
ppc.setNdec(-13);
d = 1.1234E-14;
p = 5;
wMin = 20;
ffs << "\"";
ppc.pr_de_c10(d, p, wMin);
ffs << "\" -- should be \" 0.0000E+00\" " << endl;
ppc.setNdec(-20);
d = 1.1234567E-14;
p = 5;
w = 20;
ffs << "\"";
ppc.pr_de_c10(d, p, w);
ffs << "\" -- should be 1.1235E-14" << endl;
ppc.setNdec(-20);
d = 1.1234567E-14;
p = 3;
w = 17;
ffs << "\"";
ppc.pr_de_c10(d, p, w);
ffs << "\" -- should be \" 1.12E-14\"" << endl;
ppc.setNdec(-20);
d = 1.1234567E-14;
p = 5;
wMin = 3;
wMax = 8;
ffs << "\"";
ppc.pr_de_c10(d, p, wMin, wMax);
ffs << "\" -- should be \"1.12E-14\" " << endl;
ppc.setNdec(-20);
d = 1.1234567E-4;
p = 5;
wMin = 3;
wMax = 8;
ppc.pr_de_c10(d, p, wMin, wMax);
ffs << " -- should be 1.12E-14 " << endl;
ppc.setNdec(-120);
d = 1.1234567E-109;
p = 5;
wMin = 3;
wMax = 8;
ppc.pr_de_c10(d, p, wMin, wMax);
ffs << " -- should be 1.1E-109 " << endl;
ppc.setNdec(-120);
d = 1.1234567E-19;
p = 5;
wMin = 3;
wMax = 9;
ppc.pr_de_c10(d, p, wMin, wMax);
ffs << " -- should be 1.123E-19 " << endl;
ppc.setNdec(-20);
d = -1.1234567E-19;
p = 5;
wMin = 3;
wMax = 10;
ppc.pr_de_c10(d, p, wMin, wMax);
ffs << " -- should be -1.00E-19 " << endl;
ppc.setNdec(-20);
d = -1.1234567E-19;
p = 5;
wMin = 3;
wMax = 11;
ppc.pr_de_c10(d, p, wMin, wMax);
ffs << " -- should be -1.1000E-19 " << endl;
ppc.setNdec(-25);
d = -1.1274567E-19;
p = 3;
wMin = 3;
wMax = 10;
ppc.pr_de_c10(d, p, wMin, wMax);
ffs << " -- should be -1.13E-19 " << endl;
ppc.setNdec(-25);
d = -1.127401E-19;
double dd = ppc.cropSigDigits(d, 3);
p = 4;
wMin = 3;
wMax = 10;
ppc.pr_de_c10(dd, p, wMin, wMax);
ffs << " -- should be -1.130E-19 " << endl;
// Example of attaching to a stringstream and then outputting
// from the string.
std::ostringstream os;
ostream ffss(os.rdbuf());
PrintCtrl ppss(ffss);
ppss.setNdec(-25);
d = -1.127401E-19;
dd = ppss.cropSigDigits(d, 3);
p = 4;
wMin = 3;
wMax = 10;
ppss.pr_de_c10(dd, p, wMin, wMax);
ffs << "\"";
ffs << os.str();
ffs << "\" -- should be \"-1.130E-19\" " << endl;
doLogger();
}