Skip to content

Commit

Permalink
Add tests for constexpr and consteval
Browse files Browse the repository at this point in the history
  • Loading branch information
MihailMihov committed Oct 23, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
1 parent 3b3b812 commit 482d0dc
Showing 3 changed files with 116 additions and 43 deletions.
53 changes: 53 additions & 0 deletions test/ForwardMode/ConstevalTest.C
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// RUN: %cladclang %s -I%S/../../include -std=c++23 -oConstevalTest.out | %filecheck %s
// RUN: ./ConstevalTest.out | %filecheck_exec %s
// UNSUPPORTED: clang-8, clang-9, clang-10, clang-11, clang-12, clang-13, clang-14, clang-15

#include "clad/Differentiator/Differentiator.h"

consteval double fn(double x, double y) {
return (x+y)/2;
}

//CHECK: consteval double fn_darg0(double x, double y) {
//CHECK-NEXT: double _d_x = 1;
//CHECK-NEXT: double _d_y = 0;
//CHECK-NEXT: double _t0 = (x + y);
//CHECK-NEXT: return ((_d_x + _d_y) * 2 - _t0 * 0) / (2 * 2);
//CHECK-NEXT:}

consteval double mul(double a, double b, double c) {
double val = 99.00;
double result = val * a + 100 - b + c;
return result;
}

//CHECK: consteval double mul_darg0(double a, double b, double c) {
//CHECK-NEXT: double _d_a = 1;
//CHECK-NEXT: double _d_b = 0;
//CHECK-NEXT: double _d_c = 0;
//CHECK-NEXT: double _d_val = 0.;
//CHECK-NEXT: double val = 99.;
//CHECK-NEXT: double _d_result = _d_val * a + val * _d_a + 0 - _d_b + _d_c;
//CHECK-NEXT: double result = val * a + 100 - b + c;
//CHECK-NEXT: return _d_result;
//CHECK-NEXT:}

consteval double fn_test() {
auto dx = clad::differentiate<clad::immediate_mode>(fn, "x");

return dx.execute(4, 7);
}

consteval double mul_test() {
auto dx = clad::differentiate<clad::immediate_mode>(mul, "a");

return dx.execute(5, 6, 10);
}

int main() {
constexpr double fn_result = fn_test();
printf("%.2f\n", fn_result); // CHECK-EXEC: 0.50

constexpr double mul_result = mul_test();
printf("%.2f\n", mul_result); // CHECK-EXEC: 99.00
}
63 changes: 63 additions & 0 deletions test/ForwardMode/ConstexprTest.C
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// RUN: %cladclang %s -I%S/../../include -std=c++23 -oConstexprTest.out | %filecheck %s
// RUN: ./ConstexprTest.out | %filecheck_exec %s
// UNSUPPORTED: clang-8, clang-9, clang-10, clang-11, clang-12, clang-13, clang-14, clang-15

#include "clad/Differentiator/Differentiator.h"

constexpr double fn(double x, double y) {
return (x + y) / 2;
}

//CHECK: constexpr double fn_darg0(double x, double y) {
//CHECK-NEXT: double _d_x = 1;
//CHECK-NEXT: double _d_y = 0;
//CHECK-NEXT: double _t0 = (x + y);
//CHECK-NEXT: return ((_d_x + _d_y) * 2 - _t0 * 0) / (2 * 2);
//CHECK-NEXT:}

constexpr double mul(double a, double b, double c) {
double val = 99.00;
double result = val * a + 100 - b + c;
return result;
}

//CHECK: constexpr double mul_darg0(double a, double b, double c) {
//CHECK-NEXT: double _d_a = 1;
//CHECK-NEXT: double _d_b = 0;
//CHECK-NEXT: double _d_c = 0;
//CHECK-NEXT: double _d_val = 0.;
//CHECK-NEXT: double val = 99.;
//CHECK-NEXT: double _d_result = _d_val * a + val * _d_a + 0 - _d_b + _d_c;
//CHECK-NEXT: double result = val * a + 100 - b + c;
//CHECK-NEXT: return _d_result;
//CHECK-NEXT:}

constexpr double fn_test() {
if consteval {
auto dx = clad::differentiate<clad::immediate_mode>(fn, "x");

return dx.execute(4, 7);
} else {
assert(false && "fn non-immediate context");
return -1.;
}
}

constexpr double mul_test() {
if consteval {
auto dx = clad::differentiate<clad::immediate_mode>(mul, "a");

return dx.execute(5, 6, 10);
} else {
assert(false && "mul non-immediate context");
return -1.;
}
}

int main() {
constexpr double fn_result = fn_test();
printf("%.2f\n", fn_result); // CHECK-EXEC: 0.50

constexpr double mul_result = mul_test();
printf("%.2f\n", mul_result); // CHECK-EXEC: 99.0
}
43 changes: 0 additions & 43 deletions test/ForwardMode/constexprTest.C

This file was deleted.

0 comments on commit 482d0dc

Please sign in to comment.