You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Saving the C++ file and bash script in the same directory and running the bash script reproduces the problem.
You will need to change the value of prefix in the bash script:
bash script
#! /usr/bin/env bash
set -e -u
#
# prefix
# You will need to change this to the prefix for your copy of cppadcg
prefix="$HOME/repo/cmpad.git/build/prefix"
#
# -----------------------------------------------------------------------------
#
# LD_LIBRARY_PATH
export LD_LIBRARY_PATH="$prefix/lib:$prefix/lib64"
#
if grep 'UNIQUE_PTR_ASSIGN_TO_NULL_BEFORE_REASIGN *1' example.cpp
then
reasign='true'
elif grep 'UNIQUE_PTR_ASSIGN_TO_NULL_BEFORE_REASIGN *0' example.cpp
then
reasign='false'
else
echo 'Cannot find UNIQUE_PTR_ASSIGN_TO_NULL_BEFORE_REASIGN [01]'
exit 1
fi
#
g++ example.cpp -o example \
-g \
-I $prefix/include \
-L $prefix/lib \
-L $prefix/lib64 \
-l cppad_lib
#
if ./example
then
if [ "$reasign" == 'true' ]
then
echo './example OK: as expected'
exit 1
else
echo './example OK: not expected'
exit 0
fi
else
if [ "$reasign" == 'true' ]
then
echo './example Error: not expected'
exit 1
else
echo './example Error: as expected'
exit 0
fi
fi
C++ file
#include <iosfwd>
#include <vector>
#include <cppad/cg.hpp>
//
// NIQUE_PTR_ASSIGN_TO_NULL_BEFORE_REASIGN
// If this is zero (is one) main returns an error flag (returns 0)
# define UNIQUE_PTR_ASSIGN_TO_NULL_BEFORE_REASIGN 0
using namespace CppAD;
using namespace CppAD::cg;
namespace {
// CGD, ADCG
typedef CG<double> CGD;
typedef AD<CGD> ADCG;
//
// record_fun
void record_fun(ADFun<CGD>& fun, size_t n)
{
// ax
std::vector<ADCG> ax(n);
Independent(ax);
//
// ay
std::vector<ADCG> ay(1);
ay[0] = ax[0];
for(size_t j = 1; j < n; ++j)
ay[0] += ax[j];
//
// fun
fun.Dependent(ax, ay);
}
}
int main(void) {
//
// ok
bool ok = true;
//
// n, fun
size_t n = 2;
ADFun<CGD> fun;
record_fun(fun, n);
//
// licbgen_one
ModelCSourceGen<double> cgen_one(fun, "my_model");
cgen_one.setCreateJacobian(true);
ModelLibraryCSourceGen<double> libcgen_one(cgen_one);
//
// compiler
GccCompiler<double> compiler;
//
// dynamicLib
DynamicModelLibraryProcessor<double> p_one(libcgen_one);
std::unique_ptr<DynamicLib<double>> dynamicLib =
p_one.createDynamicLibrary(compiler);
//
// model
std::unique_ptr<GenericModel<double>> model = dynamicLib->model("my_model");
//
// ok
ok &= model->Domain() == n;
//
// dynamicLib, model
# if UNIQUE_PTR_ASSIGN_TO_NULL_BEFORE_REASIGN
dynamicLib = nullptr;
model = nullptr;
# endif
//
// n, fun
n = 3;
record_fun(fun, n);
//
// licbgen_two
ModelCSourceGen<double> cgen_two(fun, "my_model");
cgen_two.setCreateJacobian(true);
ModelLibraryCSourceGen<double> libcgen_two(cgen_two);
//
// dynamicLib
DynamicModelLibraryProcessor<double> p_two(libcgen_two);
dynamicLib = p_two.createDynamicLibrary(compiler);
//
// model
model = dynamicLib->model("my_model");
//
// ok
ok &= model->Domain() == n;
//
if( ok )
return 0;
return 1;
}
The text was updated successfully, but these errors were encountered:
Saving the C++ file and bash script in the same directory and running the bash script reproduces the problem.
You will need to change the value of prefix in the bash script:
bash script
C++ file
The text was updated successfully, but these errors were encountered: