$title Test build of CPP library (CPPLIB00,SEQ=657) $onText Test that the CPP library is buildable and that, once built, it passes some simple tests. Contributor: Steve $offText $onDollar $ifThen NOT set BUILDLIB * if BUILDLIB not set, take a hint from quality.gms $ if set noComp $set BUILDLIB NO $endIf $ifThen NOT set BUILDLIB $ escape & $ ifThen.xx %sysenv.GHOST% == %&sysenv.GHOST%& * GHOST not set $ set BUILDLIB NO $ else.xx $ set BUILDLIB YES $ endIf.xx $ escape % $endIf $if NOT %BUILDLIB% == NO $set BUILDLIB YES * At this point, BUILDLIB is either NO or YES $ifThen.bld %BUILDLIB% == YES $ ifThen.unzip exist cppcclib.cpp $ log File cppcclib.cpp exists already: not unzipping cppsource.zip $ else.unzip $ call gmsunzip -o cppsource.zip $ endIf.unzip $ ifThen %system.buildcode% == DEG $ call rm -f libexample64.dylib $ log Building CPP library for platform DEG $ call g++ -fPIC -fvisibility=hidden -dynamiclib -shared -Wall -o libexample64.dylib cppcclib.cpp cppcclibql.c -lm -ldl -lstdc++ $ ifThen.DEG NOT exist libexample64.dylib $ log Example shared library libexample64.dylib not found: the build failed $ abort Could not create example shared library for DEG $ endIf.DEG $ funcLibIn myLib ./libexample64.dylib $ elseIf %system.buildcode% == DAC $ call rm -f libexample64.dylib $ log Building CPP library for platform DAC $ call clang++ -fPIC -fvisibility=hidden -dynamiclib -shared -Wall -Wno-deprecated -Wno-deprecated-declarations -o libexample64.dylib cppcclib.cpp cppcclibql.c -lm -ldl $ ifThen.DAC NOT exist libexample64.dylib $ log Example shared library libexample64.dylib not found: the build failed $ abort Could not create example shared library for DAC $ endIf.DAC $ funcLibIn myLib ./libexample64.dylib $ elseIf %system.buildcode% == LAG $ call rm -f libexample64.so $ log Building CPP library for platform LAG $ call g++ -fPIC -nostartfiles -shared -Wl,-Bsymbolic -pthread -Wall -o libexample64.so cppcclib.cpp cppcclibql.c -lm -ldl -lstdc++ $ ifThen.LAG NOT exist libexample64.so $ log Example shared library libexample64.so not found: the build failed $ abort Could not create example shared library for LAG $ endIf.LAG $ funcLibIn myLib ./libexample64.so $ elseIf %system.buildcode% == LEG $ call rm -f libexample64.so $ log Building CPP library for platform LEG $ call g++ -fPIC -nostartfiles -shared -Wl,-Bsymbolic -pthread -Wall -o libexample64.so cppcclib.cpp cppcclibql.c -m64 -lm -ldl -lstdc++ $ ifThen.LEG NOT exist libexample64.so $ log Example shared library libexample64.so not found: the build failed $ abort Could not create example shared library for LEG $ endIf.LEG $ funcLibIn myLib ./libexample64.so $ elseIf %system.buildcode% == WEI $ call rm -f example64.dll $ log Building CPP library for platform WEI $ call icl.exe -nologo -O3 -D_CRT_DISABLE_PERFCRIT_LOCKS -D_CRT_SECURE_NO_WARNINGS -LD -Feexample64.dll cppcclib.cpp cppcclibql.c -link -nodefaultlib:libc.lib $ ifThen.WEI NOT exist example64.dll $ log Example shared library example64.dll not found: the build failed $ abort Could not create example shared library for WEI $ endIf.WEI $ funcLibIn myLib ./example64.dll $ else $ log No branch taken: test implementation is incomplete $ abort No build commands found for platform %system.buildcode%: aborting $ endIf $else.bld $ if %system.platform% == DEX $funcLibIn myLib libcppcclib64.dylib $ if %system.platform% == DAX $funcLibIn myLib libcppcclib64.dylib $ if %system.platform% == LAX $funcLibIn myLib libcppcclib64.so $ if %system.platform% == LEX $funcLibIn myLib libcppcclib64.so $ if %system.platform% == WEX $funcLibIn myLib cppcclib64.dll $endIf.bld $if not errorfree $abort Error initializing extrinsic library myLib: aborting function cdf1 'CDF of univariate normal' / myLib.cdfUVN /; sets i / i1 * i5 / k / want, got / ; parameter x(i) / i1 -50 i2 -1 i3 eps i4 1 i5 50 /, f_(i) / i1 eps i2 .1586552539314570 i3 .5 i4 .8413447460685429 i5 1.0 /, g_(i) / i1 eps i2 .2419707245191433 i3 .3989422804014327 i4 .2419707245191433 i5 eps /, h_(i) / i1 eps i2 0.241970724519143 i3 0 i4 -0.241970724519143 i5 eps /, v(i), d(i); v(i) = cdf1(x(i)) + eps; d(i) = abs(v(i)-f_(i)); abort$[smax{i, d(i)} > 1e-14] 'bad function values', d, v, f_; v(i) = cdf1.grad(x(i)) + eps; d(i) = abs(v(i)-g_(i)); abort$[smax{i, d(i)} > 1e-14] 'bad gradient values', d, v, g_; v(i) = cdf1.hess(x(i)) + eps; d(i) = abs(v(i)-h_(i)); abort$[smax{i, d(i)} > 1e-13] 'bad Hessian values', d, v, h_; $log CPP Library test passed for platform %system.buildcode%