11using NUnit . Framework ;
22using System ;
3+ using System . Linq ;
4+ using System . Collections . Generic ;
35using System . Linq . Expressions ;
46#if LIGHT_EXPRESSION
57using System . Text ;
@@ -19,33 +21,32 @@ public int Run()
1921 return 1 ;
2022 }
2123
22- public static void WriteLine ( double d ) { }
24+ private List < double > _items = new List < double > ( ) ;
25+
26+ public void WriteLine ( double n ) => _items . Add ( n ) ;
2327
2428 [ Test ]
2529 public void Test1 ( )
2630 {
2731 var arr = Variable ( typeof ( double [ ] ) , "arr" ) ;
2832
29- var printDouble = this . GetType ( ) . GetMethod ( nameof ( WriteLine ) , new [ ] { typeof ( double ) } ) ;
33+ var print = this . GetType ( ) . GetMethod ( nameof ( WriteLine ) , new [ ] { typeof ( double ) } ) ;
3034
3135 var expr = Lambda < Func < double > > (
3236 Block ( new [ ] { arr } ,
3337 Assign ( arr , NewArrayBounds ( typeof ( double ) , Constant ( 1 ) ) ) ,
3438 Assign ( ArrayAccess ( arr , Constant ( 0 ) ) , Constant ( 123.456 ) ) ,
3539
36- Call ( printDouble , ArrayAccess ( arr , Constant ( 0 ) ) ) ,
37- Call ( printDouble , ArrayAccess ( arr , Constant ( 0 ) ) ) ,
38- Call ( printDouble , ArrayAccess ( arr , Constant ( 0 ) ) ) ,
39- Call ( printDouble , ArrayAccess ( arr , Constant ( 0 ) ) ) ,
40- Call ( printDouble , ArrayAccess ( arr , Constant ( 0 ) ) ) ,
41- Call ( printDouble , ArrayAccess ( arr , Constant ( 0 ) ) ) ,
42- Call ( printDouble , ArrayAccess ( arr , Constant ( 0 ) ) ) ,
40+ Call ( Constant ( this ) , print , ArrayAccess ( arr , Constant ( 0 ) ) ) ,
41+ Call ( Constant ( this ) , print , ArrayAccess ( arr , Constant ( 0 ) ) ) ,
4342
4443 ArrayAccess ( arr , Constant ( 0 ) )
4544 ) ) ;
4645
4746 expr . PrintCSharp ( ) ;
4847
48+ _items . Clear ( ) ;
49+
4950 var fs = expr . CompileSys ( ) ;
5051 fs . PrintIL ( ) ;
5152
@@ -57,6 +58,7 @@ public void Test1()
5758
5859 var res2 = ff ( ) ;
5960 Assert . AreEqual ( 123.456 , res2 ) ;
61+ Assert . AreEqual ( 4 , _items . Count ( x => x == 123.456 ) ) ;
6062 }
6163 }
6264}
0 commit comments