Skip to content

Commit c516c32

Browse files
PetroZarytskyivgvassilev
authored andcommitted
Add a test for #627
This issue was completely fixed after #1619. Fixes #627.
1 parent 22e4dcd commit c516c32

1 file changed

Lines changed: 51 additions & 0 deletions

File tree

test/Gradient/UserDefinedTypes.C

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1296,6 +1296,52 @@ double fn35(double x, double y) {
12961296
// CHECK-NEXT: _d_ref += 1;
12971297
// CHECK-NEXT: }
12981298

1299+
class PrivClass {
1300+
private:
1301+
size_t n_;
1302+
public:
1303+
PrivClass(size_t n) : n_(n) {}
1304+
1305+
double multiply(double x) {
1306+
return n_*x;
1307+
}
1308+
};
1309+
1310+
// CHECK: static void constructor_pullback(size_t n, PrivClass *_d_this, size_t *_d_n) {
1311+
// CHECK-NEXT: {
1312+
// CHECK-NEXT: *_d_n += _d_this->n_;
1313+
// CHECK-NEXT: _d_this->n_ = {{0U|0UL|0ULL}};
1314+
// CHECK-NEXT: }
1315+
// CHECK-NEXT: }
1316+
1317+
// CHECK: void multiply_pullback(double x, double _d_y, PrivClass *_d_this, double *_d_x) {
1318+
// CHECK-NEXT: {
1319+
// CHECK-NEXT: _d_this->n_ += _d_y * x;
1320+
// CHECK-NEXT: *_d_x += this->n_ * _d_y;
1321+
// CHECK-NEXT: }
1322+
// CHECK-NEXT: }
1323+
1324+
double fn36(double x, size_t n){
1325+
PrivClass E(n);
1326+
return E.multiply(x); // (x*n)
1327+
}
1328+
1329+
// CHECK: void fn36_grad_0(double x, size_t n, double *_d_x) {
1330+
// CHECK-NEXT: size_t _d_n = {{0U|0UL|0ULL}};
1331+
// CHECK-NEXT: PrivClass E(n);
1332+
// CHECK-NEXT: PrivClass _d_E(E);
1333+
// CHECK-NEXT: clad::zero_init(_d_E);
1334+
// CHECK-NEXT: {
1335+
// CHECK-NEXT: double _r1 = 0.;
1336+
// CHECK-NEXT: E.multiply_pullback(x, 1, &_d_E, &_r1);
1337+
// CHECK-NEXT: *_d_x += _r1;
1338+
// CHECK-NEXT: }
1339+
// CHECK-NEXT: {
1340+
// CHECK-NEXT: size_t _r0 = {{0U|0UL|0ULL}};
1341+
// CHECK-NEXT: PrivClass::constructor_pullback(n, &_d_E, &_r0);
1342+
// CHECK-NEXT: _d_n += _r0;
1343+
// CHECK-NEXT: }
1344+
// CHECK-NEXT: }
12991345
void print(const Tangent& t) {
13001346
for (int i = 0; i < 5; ++i) {
13011347
printf("%.2f", t.data[i]);
@@ -1436,4 +1482,9 @@ int main() {
14361482

14371483
INIT_GRADIENT(fn35);
14381484
TEST_GRADIENT(fn35, /*numOfDerivativeArgs=*/2, -5, 6, &d_i, &d_j); // CHECK-EXEC: {0.00, 1.00}
1485+
1486+
auto fn36_grad = clad::gradient(fn36, "x");
1487+
d_i = 0;
1488+
fn36_grad.execute(i, 5, &d_i);
1489+
printf("{%.2f}\n", d_i); // CHECK-EXEC: {5.00}
14391490
}

0 commit comments

Comments
 (0)