Differences From Artifact [fcea1bf69fccc37f]:
- File        
polemy/tricks.d
- 2010-11-08 11:57:48 - part of checkin [077506b38c] on branch trunk - Generic toString utility added. (user: kinaba) [annotate]
 
 
To Artifact [73906cba073bce6c]:
- File        
polemy/tricks.d
- 2010-11-08 12:26:39 - part of checkin [80ff567c75] on branch trunk - Testing easyAST. (user: kinaba) [annotate]
 
 
  113          assert_throw!AssertError( assert_eq(new Temp, 2) );                          113          assert_throw!AssertError( assert_eq(new Temp, 2) );
  114  }                                                                                    114  }
  115                                                                                       115  
  116  /* [Todo] is there any way to clearnly implement "assert_compiles" and "assert_n     116  /* [Todo] is there any way to clearnly implement "assert_compiles" and "assert_n
  117                                                                                       117  
  118  /// Mixing-in the bean constructor for a class                                       118  /// Mixing-in the bean constructor for a class
  119                                                                                       119  
                                                                                        >   120  /*mixin*/
  120  /*mixin*/ template SimpleConstructor()                                           |   121  template SimpleConstructor()
  121  {                                                                                    122  {
  122          static if( is(typeof(super) == Object) || super.tupleof.length==0 )          123          static if( is(typeof(super) == Object) || super.tupleof.length==0 )
  123                  this( typeof(this.tupleof) params )                                  124                  this( typeof(this.tupleof) params )
  124                  {                                                                    125                  {
  125                          static if(this.tupleof.length>0)                             126                          static if(this.tupleof.length>0)
  126                                  this.tupleof = params;                               127                                  this.tupleof = params;
  127                  }                                                                    128                  }
................................................................................................................................................................................
  169                          mixin SimpleConstructor;                                     170                          mixin SimpleConstructor;
  170                  }                                                                    171                  }
  171          }) );                                                                        172          }) );
  172  }                                                                                    173  }
  173                                                                                       174  
  174  /// Mixing-in the MOST-DERIVED-member-wise comparator for a class                    175  /// Mixing-in the MOST-DERIVED-member-wise comparator for a class
  175                                                                                       176  
                                                                                        >   177  /*mixin*/
  176  /*mixin*/ template SimpleCompare()                                               |   178  template SimpleCompare()
  177  {                                                                                    179  {
  178          override bool opEquals(Object rhs_) const                                    180          override bool opEquals(Object rhs_) const
  179          {                                                                            181          {
  180                  if( auto rhs = cast(typeof(this))rhs_ )                              182                  if( auto rhs = cast(typeof(this))rhs_ )
  181                  {                                                                    183                  {
  182                          foreach(i,_; this.tupleof)                                   184                          foreach(i,_; this.tupleof)
  183                                  if( this.tupleof[i] != rhs.tupleof[i] )              185                                  if( this.tupleof[i] != rhs.tupleof[i] )
................................................................................................................................................................................
  234          }                                                                            236          }
  235          assert_throw!AssertError( new Temp(1,"foo") == new TempDummy(1,"foo") );     237          assert_throw!AssertError( new Temp(1,"foo") == new TempDummy(1,"foo") );
  236          assert_throw!AssertError( new Temp(1,"foo") <= new TempDummy(1,"foo") );     238          assert_throw!AssertError( new Temp(1,"foo") <= new TempDummy(1,"foo") );
  237  }                                                                                    239  }
  238                                                                                       240  
  239  /// Mixing-in a simple toString method                                               241  /// Mixing-in a simple toString method
  240                                                                                       242  
                                                                                        >   243  /*mixin*/
  241  /*mixin*/ template SimpleToString()                                              |   244  template SimpleToString()
  242  {                                                                                    245  {
  243          override string toString()                                                   246          override string toString()
  244          {                                                                            247          {
  245                  string str = sprintf!"%s("(typeof(this).stringof);                   248                  string str = sprintf!"%s("(typeof(this).stringof);
  246                  foreach(i,mem; this.tupleof)                                         249                  foreach(i,mem; this.tupleof)
  247                  {                                                                    250                  {
  248                          if(i) str ~= ",";                                            251                          if(i) str ~= ",";
................................................................................................................................................................................
  264                  string y;                                                            267                  string y;
  265                  BigInt z;                                                            268                  BigInt z;
  266                  mixin SimpleConstructor;                                             269                  mixin SimpleConstructor;
  267                  mixin SimpleToString;                                                270                  mixin SimpleToString;
  268          }                                                                            271          }
  269          assert_eq( (new Temp(1,"foo",BigInt(42))).toString(), "Temp(1,foo,42)" )     272          assert_eq( (new Temp(1,"foo",BigInt(42))).toString(), "Temp(1,foo,42)" )
  270  }                                                                                    273  }
                                                                                        >   274  
                                                                                        >   275  /// Everything is in
                                                                                        >   276  
                                                                                        >   277  /*mixin*/
                                                                                        >   278  template SimpleClass()
                                                                                        >   279  {
                                                                                        >   280          mixin SimpleConstructor;
                                                                                        >   281          mixin SimpleCompare;
                                                                                        >   282          mixin SimpleToString;
                                                                                        >   283  }