| //@ needs-enzyme |
| |
| #![feature(autodiff)] |
| //@ pretty-mode:expanded |
| //@ pretty-compare-only |
| //@ pp-exact:autodiff_reverse.pp |
| |
| // Test that reverse mode ad macros are expanded correctly. |
| |
| use std::autodiff::autodiff_reverse; |
| |
| #[autodiff_reverse(df1, Duplicated, Const, Active)] |
| pub fn f1(x: &[f64], y: f64) -> f64 { |
| unimplemented!() |
| } |
| |
| // Not the most interesting derivative, but who are we to judge |
| #[autodiff_reverse(df2)] |
| pub fn f2() {} |
| |
| #[autodiff_reverse(df3, Duplicated, Const, Active)] |
| pub fn f3(x: &[f64], y: f64) -> f64 { |
| unimplemented!() |
| } |
| |
| enum Foo { Reverse } |
| use Foo::Reverse; |
| // What happens if we already have Reverse in type (enum variant decl) and value (enum variant |
| // constructor) namespace? > It's expected to work normally. |
| #[autodiff_reverse(df4, Const)] |
| pub fn f4(x: f32) { |
| unimplemented!() |
| } |
| |
| #[autodiff_reverse(df5, DuplicatedOnly, Duplicated)] |
| pub fn f5(x: *const f32, y: &f32) { |
| unimplemented!() |
| } |
| |
| fn main() {} |