32#include "Teuchos_UnitTestHarness.hpp"
33#include "Teuchos_UnitTestRepository.hpp"
34#include "Teuchos_GlobalMPISession.hpp"
35#include "Teuchos_TestingHelpers.hpp"
48struct C :
public A {};
56 const bool is_b_a = std::is_convertible<B,A>::value;
57 const bool is_a_b = std::is_convertible<A,B>::value;
58 const bool is_c_a = std::is_convertible<C,A>::value;
59 const bool is_int_double = std::is_convertible<int,double>::value;
60 const bool is_double_int = std::is_convertible<double,int>::value;
61 const bool is_double_a = std::is_convertible<double,A>::value;
62 TEST_EQUALITY( is_b_a,
false );
63 TEST_EQUALITY( is_a_b,
true );
64 TEST_EQUALITY( is_c_a,
true );
65 TEST_EQUALITY( is_int_double,
true );
66 TEST_EQUALITY( is_double_int,
true );
67 TEST_EQUALITY( is_double_a,
false );
70template <
typename ad_type>
77 const bool is_value_ad =
78 std::is_convertible<value_type,ad_type>::value;
79 const bool is_ad_value =
80 std::is_convertible<ad_type,value_type>::value;
81 const bool is_scalar_ad =
82 std::is_convertible<scalar_type,ad_type>::value;
83 const bool is_ad_scalar =
84 std::is_convertible<ad_type,scalar_type>::value;
87 const bool is_int_ad =
88 std::is_convertible<value_type,ad_type>::value;
90 TEST_EQUALITY( is_value_ad, is_not_view );
91 TEST_EQUALITY_CONST( is_ad_value,
false );
92 TEST_EQUALITY( is_scalar_ad, is_not_view );
93 TEST_EQUALITY_CONST( is_ad_scalar,
false );
94 TEST_EQUALITY( is_int_ad, is_not_view );
99 typedef decltype(std::declval<ad_type>()*std::declval<ad_type>()) ad_expr_type;
100 typedef decltype(std::declval<value_type>()*std::declval<value_type>()) val_expr_type;
102 const bool is_ad_expr_ad =
103 std::is_convertible<ad_expr_type,ad_type>::value;
104 const bool is_val_expr_ad =
105 std::is_convertible<val_expr_type,ad_type>::value;
107 TEST_EQUALITY( is_ad_expr_ad, is_not_view );
108 TEST_EQUALITY( is_val_expr_ad, is_not_view );
120 typedef typename ad_type::value_type value_type;
130 x.fastAccessDx(i) = 2.0;
131 ad_ad_type y = x + x;
132 TEST_EQUALITY_CONST( y.val().val(), 3.0 );
134 TEST_EQUALITY_CONST( y.val().dx(i), 4.0 );
135 TEST_EQUALITY_CONST( y.dx(i).val(), 0.0 );
137 TEST_EQUALITY_CONST( y.dx(i).dx(j), 0.0 );
141 ad_ad_type z = (x + x) + y;
142 TEST_EQUALITY_CONST( z.val().val(), 6.0 );
144 TEST_EQUALITY_CONST( z.val().dx(i), 8.0 );
145 TEST_EQUALITY_CONST( z.dx(i).val(), 0.0 );
147 TEST_EQUALITY_CONST( z.dx(i).dx(j), 0.0 );
152 TEST_EQUALITY_CONST( y.val().val(), 4.0 );
154 TEST_EQUALITY_CONST( y.val().dx(i), 4.0 );
155 TEST_EQUALITY_CONST( y.dx(i).val(), 0.0 );
157 TEST_EQUALITY_CONST( y.dx(i).dx(j), 0.0 );
194TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, ADConversions,
Fad_DFadType )
195TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, ADConversions,
Fad_SLFadType )
196TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, ADConversions,
Fad_SFadType )
197TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, ADConversions,
Fad_DVFadType )
198TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, ADConversions,
Fad_SimpleFadType )
199TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, ViewConversions,
Fad_VFadType )
205TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, ADConversions,
ELRFad_DFadType )
206TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, ADConversions,
ELRFad_SLFadType )
207TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, ADConversions,
ELRFad_SFadType )
208TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, ViewConversions,
ELRFad_VFadType )
214TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, ADConversions,
CacheFad_DFadType )
216TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, ADConversions,
CacheFad_SFadType )
217TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, ViewConversions,
CacheFad_VFadType )
238TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, OtherConversions,
LFadType )
239TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, OtherConversions,
SFCType )
240TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, OtherConversions,
TaylorType )
241TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, OtherConversions,
CacheTaylorType )
242TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, OtherConversions,
RadType )
243TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, OtherConversions,
Rad2Type )
244TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT( Conversion, OtherConversions,
RadVecType )
246int main(
int argc,
char* argv[] ) {
247 Teuchos::GlobalMPISession mpiSession(&argc, &argv);
249 return Teuchos::UnitTestRepository::runUnitTestsFromMain(argc, argv);
Sacado::CacheFad::SLFad< double, 10 > Fad_SLFadType
Sacado::CacheFad::SFad< double, 5 > Fad_SFadType
Sacado::CacheFad::DFad< double > Fad_DFadType
const int global_fad_size
Sacado::Tay::Taylor< double > TaylorType
bool test_ad_conversions(Teuchos::FancyOStream &out)
Sacado::ELRFad::SLFad< double, global_fad_size > ELRFad_SLFadType
Sacado::ELRCacheFad::ViewFad< double, global_fad_size, 1, ELRCacheFad_DFadType > ELRCacheFad_VFadType
Sacado::Fad::ViewFad< double, global_fad_size, 1, Fad_DFadType > Fad_VFadType
Sacado::ELRCacheFad::SLFad< double, global_fad_size > ELRCacheFad_SLFadType
Sacado::ELRFad::DFad< double > ELRFad_DFadType
Sacado::CacheFad::ViewFad< double, global_fad_size, 1, CacheFad_DFadType > CacheFad_VFadType
Sacado::CacheFad::DFad< double > CacheFad_DFadType
Sacado::ELRFad::SFad< double, global_fad_size > ELRFad_SFadType
Sacado::Tay::CacheTaylor< double > CacheTaylorType
Sacado::Fad::DVFad< double > Fad_DVFadType
Sacado::RadVec::ADvar< double > RadVecType
Sacado::CacheFad::SLFad< double, global_fad_size > CacheFad_SLFadType
Sacado::ELRCacheFad::DFad< double > ELRCacheFad_DFadType
Sacado::Rad2::ADvar< double > Rad2Type
Sacado::LFad::LogicalSparse< double, bool > LFadType
TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL(Conversion, ADConversions, AD)
Sacado::FlopCounterPack::ScalarFlopCounter< double > SFCType
Sacado::Fad::SimpleFad< double > Fad_SimpleFadType
Sacado::ELRCacheFad::SFad< double, global_fad_size > ELRCacheFad_SFadType
Sacado::CacheFad::SFad< double, global_fad_size > CacheFad_SFadType
Sacado::ELRFad::ViewFad< double, global_fad_size, 1, ELRFad_DFadType > ELRFad_VFadType
TEUCHOS_UNIT_TEST(Conversion, IsConvertible)
Forward-mode AD class using dynamic memory allocation and expression templates.
Forward-mode AD class using dynamic memory allocation but no expression templates.
int main(int argc, char *argv[])
Sacado::Rad::ADvar< double > RadType
F::template apply< mpl::none, mpl::none, mpl::none, mpl::none, mpl::none >::type type