99
1010
1111template <typename T>
12- extern void __enzyme_fwddiff (void *, int , T&, T&);
12+ extern double __enzyme_fwddiff (void *, int , T&, T&);
1313template <typename T>
14- extern void __enzyme_autodiff (void *, int , T&, T&);
14+ extern double __enzyme_autodiff (void *, int , T&, T&);
1515
1616
1717double test_simple_list (std::list<double >& vals) {
@@ -26,23 +26,56 @@ double test_simple_list(std::list<double>& vals) {
2626 return result;
2727}
2828
29+ double test_dynamic_list (std::list<double >& vals) {
30+ // dynamically insert new elements
31+ vals.push_back (4.0 );
32+ vals.push_back (5.0 );
33+
34+ // iterate over list
35+ double result = 0.0 ;
36+ for (const auto & val : vals) {
37+ result += val * val;
38+ }
39+ return result;
40+ }
41+
2942void test_forward_list () {
30- std::list<double > vals = {1.0 , 2.0 , 3.0 };
31- std::list<double > dvals = {1.0 , 1.0 , 1.0 };
43+ {
44+ std::list<double > vals = {1.0 , 2.0 , 3.0 };
45+ std::list<double > dvals = {1.0 , 1.0 , 1.0 };
46+
47+ double ret = __enzyme_fwddiff ((void *)test_simple_list, enzyme_dup, vals, dvals);
48+ APPROX_EQ ( ret, 10 ., 1e-10 );
49+ }
50+ {
51+ std::list<double > vals = {1.0 , 2.0 , 3.0 };
52+ std::list<double > dvals = {1.0 , 1.0 , 1.0 };
3253
33- __enzyme_fwddiff ((void *)test_simple_list, enzyme_dup, vals, dvals);
54+ double ret = __enzyme_fwddiff ((void *)test_dynamic_list, enzyme_dup, vals, dvals);
55+ APPROX_EQ ( ret, 12 ., 1e-10 );
56+ }
3457}
3558
3659void test_reverse_list () {
37- std::list<double > vals = {1.0 , 2.0 , 3.0 };
38- std::list<double > dvals = {1.0 , 1.0 , 1.0 };
60+ {
61+ std::list<double > vals = {1.0 , 2.0 , 3.0 };
62+ std::list<double > dvals = {1.0 , 1.0 , 1.0 };
3963
40- __enzyme_autodiff ((void *)test_simple_list, enzyme_dup, vals, dvals);
64+ double ret = __enzyme_autodiff ((void *)test_simple_list, enzyme_dup, vals, dvals);
65+ // APPROX_EQ( ret, 10., 1e-10);
66+ }
67+ {
68+ std::list<double > vals = {1.0 , 2.0 , 3.0 };
69+ std::list<double > dvals = {1.0 , 1.0 , 1.0 };
70+
71+ double ret = __enzyme_autodiff ((void *)test_dynamic_list, enzyme_dup, vals, dvals);
72+ // APPROX_EQ( ret, 12., 1e-10);
73+ }
4174}
4275
4376
4477int main () {
4578 test_forward_list ();
4679 test_reverse_list ();
4780 return 0 ;
48- }
81+ }
0 commit comments