3
0
mirror of https://github.com/triqs/dft_tools synced 2024-10-31 19:23:45 +01:00
dft_tools/test/triqs/clef/F7.cpp
Olivier Parcollet 2c542647fd clef : new version using lvalues and moving rvalues
- change : all objects are by default
  stored now by reference, not by copy any more.
  Unless the trait force_copy_in_expr is true.
- rvalue refs are moved into the tree
- simplifies a lot the writing of lazy method, objects.
- added a macro for methods
- tests ok. Further check needed to control absence of copies...
- improved documentation
2013-09-08 15:04:12 +02:00

45 lines
2.2 KiB
C++

#include "./common.hpp"
struct F7 {
double v;
F7(double v_): v(v_){}
double operator() (int i1, int i2, int i3, int i4, int i5, int i6, int i7 ) const { return 10*i1;}
TRIQS_CLEF_IMPLEMENT_LAZY_CALL(F7);
template<typename Fnt> friend void triqs_clef_auto_assign (F7 & x, Fnt f) { x.v++; std::cerr<< " called triqs_clef_auto_assign "<< f(1,2,3,4,5,6,7)<<std::endl;}
friend std::ostream & operator<<(std::ostream & out, F7 const & x) { return out<<"F7";}
};
triqs::clef::placeholder <1> x1_;
triqs::clef::placeholder <2> x2_;
triqs::clef::placeholder <3> x3_;
triqs::clef::placeholder <4> x4_;
triqs::clef::placeholder <5> x5_;
triqs::clef::placeholder <6> x6_;
triqs::clef::placeholder <7> x7_;
triqs::clef::placeholder <8> x8_;
int main() {
F7 f(7), g(8), h(7);
TEST(tql::eval(f(x1_,x2_,x3_,x4_,x5_,x6_,x7_),x_ =1, y_ =2));
f(x1_,x2_,x3_,x4_,x5_,x6_,x7_) << x1_ + x2_ + x3_ + x4_ + x5_ + x6_ + x7_ ;
f(x1_,x2_,x3_,x4_,x5_,x6_,x7_) << x1_ + 2*x2_ + x3_ + x4_ + x5_ + x6_ + x7_ ;
f(x1_,x2_,x3_,x4_,x5_,x6_,x7_) << x1_ + 2*x2_ + 4*x3_ + x4_ + x5_ + x6_ + x7_ + g(x1_,x2_,x3_,x4_,x5_,x6_,x7_)* h(x1_,x2_,x3_,x4_,x5_,x6_,x7_) ;
f(x1_,x2_,x3_,x4_,x5_,x6_,x7_) << x1_ + 2*x2_ + 4*x3_ + 8*x4_ + x5_ + x6_ + x7_ + g(x1_,x2_,x3_,x4_,x5_,x6_,x7_)* h(x1_,x2_,x3_,x4_,x5_,x6_,x7_) ;
f(x1_,x2_,x3_,x4_,x5_,x6_,x7_) << x1_ + x2_ -x3_ + x4_ + x5_ + x6_ + x7_ ;
f(x1_,x2_,x3_,x4_,x5_,x6_,x7_) << x1_ + 2*x2_ + x3_ + x4_ - x5_ + x6_ + x7_ ;
f(x1_,x2_,x3_,x4_,x5_,x6_,x7_) << x1_ + 2*x2_ + 4*x3_ + x4_ - x5_ + x6_ + x7_ + g(x1_,x2_,x3_,x4_,x5_,x6_,x7_)* h(x1_,x2_,x3_,x4_,x5_,x6_,x7_) ;
f(x1_,x2_,x3_,x4_,x5_,x6_,x7_) << g(x1_,x2_,x3_,x4_,x5_,x6_,x7_)/ h(x1_,x2_,x3_,x4_,x5_,x6_,x7_) + g(x1_,x2_,x3_,x4_,x5_,x6_,x7_)* h(x1_,x2_,x3_,x4_,x5_,x6_,x7_) ;
f(x1_,x2_,x3_,x4_,x5_,x6_,x7_) << x1_ + x2_ -x3_ + x4_ + x5_ + x6_ - x7_ ;
f(x1_,x2_,x3_,x4_,x5_,x6_,x7_) << x1_ + 2*x2_ + x3_ + x4_ - x5_ + x6_ - x7_ ;
f(x1_,x2_,x3_,x4_,x5_,x6_,x7_) << x1_ + 2*x2_ + 4*x3_ + x4_ - x5_ + x6_ + x7_ - g(x1_,x2_,x3_,x4_,x5_,x6_,x7_)* h(x1_,x2_,x3_,x4_,x5_,x6_,x7_) ;
f(x1_,x2_,x3_,x4_,x5_,x6_,x7_) << g(x1_,x2_,x3_,x4_,x5_,x6_,x7_)/ h(x1_,x2_,x3_,x4_,x5_,x6_,x7_) - g(x1_,x2_,x3_,x4_,x5_,x6_,x7_)* h(x1_,x2_,x3_,x4_,x5_,x6_,x7_) ;
}