Skip to content

Commit 176f92c

Browse files
committed
add test for cos
1 parent 6d37ee5 commit 176f92c

File tree

2 files changed

+191
-0
lines changed

2 files changed

+191
-0
lines changed

ADOL-C/boost-test/uni5_for/hov_forward.cpp

+95
Original file line numberDiff line numberDiff line change
@@ -1093,4 +1093,99 @@ BOOST_AUTO_TEST_CASE(SinOperator_HOV_Forward) {
10931093
myfree3(X);
10941094
myfree3(Y);
10951095
}
1096+
1097+
BOOST_AUTO_TEST_CASE(CosOperator_HOV_Forward) {
1098+
const int16_t tag = 0;
1099+
const size_t dim_out = 1;
1100+
const size_t dim_in = 1;
1101+
const size_t degree = 3;
1102+
const size_t num_dirs = 2;
1103+
std::vector<double> in{0.5};
1104+
std::vector<adouble> indep(dim_in);
1105+
std::vector<double> out(dim_out);
1106+
1107+
// cos(x1^2)
1108+
trace_on(tag);
1109+
indep[0] <<= in[0];
1110+
adouble dep = cos(pow(indep[0], 2));
1111+
dep >>= out[0];
1112+
trace_off();
1113+
1114+
double ***X = myalloc3(dim_in, num_dirs, degree);
1115+
double ***Y = myalloc3(dim_out, num_dirs, degree);
1116+
1117+
X[0][0][0] = 1.0;
1118+
X[0][0][1] = -1.0;
1119+
X[0][0][2] = 1.1;
1120+
1121+
X[0][1][0] = 2.0;
1122+
X[0][1][1] = -2.1;
1123+
X[0][1][2] = -2.0;
1124+
1125+
std::vector<double> test_in{0.5};
1126+
1127+
// cos(x1^2)
1128+
double test_out = std::cos(std::pow(test_in[0], 2));
1129+
1130+
hov_forward(tag, dim_out, dim_in, degree, num_dirs, test_in.data(), X,
1131+
out.data(), Y);
1132+
1133+
BOOST_TEST(out[0] == test_out, tt::tolerance(tol));
1134+
1135+
// first derivative
1136+
BOOST_TEST(Y[0][0][0] == -2.0 * std::sin(std::pow(test_in[0], 2)) *
1137+
test_in[0] * X[0][0][0],
1138+
tt::tolerance(tol));
1139+
BOOST_TEST(Y[0][1][0] == -2.0 * std::sin(std::pow(test_in[0], 2)) *
1140+
test_in[0] * X[0][1][0],
1141+
tt::tolerance(tol));
1142+
1143+
// second derivative
1144+
BOOST_TEST(Y[0][0][1] == -2.0 * std::sin(std::pow(test_in[0], 2)) *
1145+
test_in[0] * X[0][0][1] +
1146+
1.0 / 2.0 *
1147+
(-4.0 * std::cos(std::pow(test_in[0], 2)) *
1148+
std::pow(test_in[0], 2) -
1149+
2.0 * std::sin(std::pow(test_in[0], 2))) *
1150+
X[0][0][0] * X[0][0][0],
1151+
tt::tolerance(tol));
1152+
BOOST_TEST(Y[0][1][1] == -2.0 * std::sin(std::pow(test_in[0], 2)) *
1153+
test_in[0] * X[0][1][1] +
1154+
1.0 / 2.0 *
1155+
(-4.0 * std::cos(std::pow(test_in[0], 2)) *
1156+
std::pow(test_in[0], 2) -
1157+
2.0 * std::sin(std::pow(test_in[0], 2))) *
1158+
X[0][1][0] * X[0][1][0],
1159+
tt::tolerance(tol));
1160+
1161+
// third derivative
1162+
BOOST_TEST(
1163+
Y[0][0][2] ==
1164+
-2.0 * std::sin(std::pow(test_in[0], 2)) * test_in[0] * X[0][0][2] +
1165+
(-4.0 * std::cos(std::pow(test_in[0], 2)) *
1166+
std::pow(test_in[0], 2) -
1167+
2.0 * std::sin(std::pow(test_in[0], 2))) *
1168+
X[0][0][0] * X[0][0][1] +
1169+
1.0 / 6.0 *
1170+
(-12.0 * test_in[0] * std::cos(std::pow(test_in[0], 2)) +
1171+
8.0 * std::pow(test_in[0], 3) *
1172+
std::sin(std::pow(test_in[0], 2))) *
1173+
std::pow(X[0][0][0], 3),
1174+
tt::tolerance(tol));
1175+
BOOST_TEST(
1176+
Y[0][1][2] ==
1177+
-2.0 * std::sin(std::pow(test_in[0], 2)) * test_in[0] * X[0][1][2] +
1178+
(-4.0 * std::cos(std::pow(test_in[0], 2)) *
1179+
std::pow(test_in[0], 2) -
1180+
2.0 * std::sin(std::pow(test_in[0], 2))) *
1181+
X[0][1][0] * X[0][1][1] +
1182+
1.0 / 6.0 *
1183+
(-12.0 * test_in[0] * std::cos(std::pow(test_in[0], 2)) +
1184+
8.0 * std::pow(test_in[0], 3) *
1185+
std::sin(std::pow(test_in[0], 2))) *
1186+
std::pow(X[0][1][0], 3),
1187+
tt::tolerance(tol));
1188+
myfree3(X);
1189+
myfree3(Y);
1190+
}
10961191
BOOST_AUTO_TEST_SUITE_END()

ADOL-C/boost-test/uni5_for/hov_wk_forward.cpp

+96
Original file line numberDiff line numberDiff line change
@@ -1101,4 +1101,100 @@ BOOST_AUTO_TEST_CASE(SinOperator_HOV_Forward) {
11011101
myfree3(X);
11021102
myfree3(Y);
11031103
}
1104+
1105+
BOOST_AUTO_TEST_CASE(CosOperator_HOV_Forward) {
1106+
const int16_t tag = 0;
1107+
const size_t dim_out = 1;
1108+
const size_t dim_in = 1;
1109+
const size_t degree = 3;
1110+
const size_t num_dirs = 2;
1111+
const short keep = 1;
1112+
std::vector<double> in{0.5};
1113+
std::vector<adouble> indep(dim_in);
1114+
std::vector<double> out(dim_out);
1115+
1116+
// cos(x1^2)
1117+
trace_on(tag);
1118+
indep[0] <<= in[0];
1119+
adouble dep = cos(pow(indep[0], 2));
1120+
dep >>= out[0];
1121+
trace_off();
1122+
1123+
double ***X = myalloc3(dim_in, num_dirs, degree);
1124+
double ***Y = myalloc3(dim_out, num_dirs, degree);
1125+
1126+
X[0][0][0] = 1.0;
1127+
X[0][0][1] = -1.0;
1128+
X[0][0][2] = 1.1;
1129+
1130+
X[0][1][0] = 2.0;
1131+
X[0][1][1] = -2.1;
1132+
X[0][1][2] = -2.0;
1133+
1134+
std::vector<double> test_in{0.5};
1135+
1136+
// cos(x1^2)
1137+
double test_out = std::cos(std::pow(test_in[0], 2));
1138+
1139+
hov_wk_forward(tag, dim_out, dim_in, degree, keep, num_dirs, test_in.data(),
1140+
X, out.data(), Y);
1141+
1142+
BOOST_TEST(out[0] == test_out, tt::tolerance(tol));
1143+
1144+
// first derivative
1145+
BOOST_TEST(Y[0][0][0] == -2.0 * std::sin(std::pow(test_in[0], 2)) *
1146+
test_in[0] * X[0][0][0],
1147+
tt::tolerance(tol));
1148+
BOOST_TEST(Y[0][1][0] == -2.0 * std::sin(std::pow(test_in[0], 2)) *
1149+
test_in[0] * X[0][1][0],
1150+
tt::tolerance(tol));
1151+
1152+
// second derivative
1153+
BOOST_TEST(Y[0][0][1] == -2.0 * std::sin(std::pow(test_in[0], 2)) *
1154+
test_in[0] * X[0][0][1] +
1155+
1.0 / 2.0 *
1156+
(-4.0 * std::cos(std::pow(test_in[0], 2)) *
1157+
std::pow(test_in[0], 2) -
1158+
2.0 * std::sin(std::pow(test_in[0], 2))) *
1159+
X[0][0][0] * X[0][0][0],
1160+
tt::tolerance(tol));
1161+
BOOST_TEST(Y[0][1][1] == -2.0 * std::sin(std::pow(test_in[0], 2)) *
1162+
test_in[0] * X[0][1][1] +
1163+
1.0 / 2.0 *
1164+
(-4.0 * std::cos(std::pow(test_in[0], 2)) *
1165+
std::pow(test_in[0], 2) -
1166+
2.0 * std::sin(std::pow(test_in[0], 2))) *
1167+
X[0][1][0] * X[0][1][0],
1168+
tt::tolerance(tol));
1169+
1170+
// third derivative
1171+
BOOST_TEST(
1172+
Y[0][0][2] ==
1173+
-2.0 * std::sin(std::pow(test_in[0], 2)) * test_in[0] * X[0][0][2] +
1174+
(-4.0 * std::cos(std::pow(test_in[0], 2)) *
1175+
std::pow(test_in[0], 2) -
1176+
2.0 * std::sin(std::pow(test_in[0], 2))) *
1177+
X[0][0][0] * X[0][0][1] +
1178+
1.0 / 6.0 *
1179+
(-12.0 * test_in[0] * std::cos(std::pow(test_in[0], 2)) +
1180+
8.0 * std::pow(test_in[0], 3) *
1181+
std::sin(std::pow(test_in[0], 2))) *
1182+
std::pow(X[0][0][0], 3),
1183+
tt::tolerance(tol));
1184+
BOOST_TEST(
1185+
Y[0][1][2] ==
1186+
-2.0 * std::sin(std::pow(test_in[0], 2)) * test_in[0] * X[0][1][2] +
1187+
(-4.0 * std::cos(std::pow(test_in[0], 2)) *
1188+
std::pow(test_in[0], 2) -
1189+
2.0 * std::sin(std::pow(test_in[0], 2))) *
1190+
X[0][1][0] * X[0][1][1] +
1191+
1.0 / 6.0 *
1192+
(-12.0 * test_in[0] * std::cos(std::pow(test_in[0], 2)) +
1193+
8.0 * std::pow(test_in[0], 3) *
1194+
std::sin(std::pow(test_in[0], 2))) *
1195+
std::pow(X[0][1][0], 3),
1196+
tt::tolerance(tol));
1197+
myfree3(X);
1198+
myfree3(Y);
1199+
}
11041200
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)