public void StructForEachContinue() { var enumerable_counter = new StructEnumerableCounter(0, 10); var ec = Expression.Parameter(typeof(StructEnumerableCounter), "ec"); var item = Expression.Variable(typeof(int), "i"); var foreachBreak = Expression.Label("foreachBreak"); var foreachContinue = Expression.Label("foreachContinue"); var hitcounter = Expression.Lambda <Action <StructEnumerableCounter> >( ExpressionEx.ForEach( item, ec, Expression.Block( Expression.Condition( Expression.Equal(Expression.Modulo(item, Expression.Constant(2)), Expression.Constant(0)), Expression.Call(ec, typeof(StructEnumerableCounter).GetMethod("Hit", Type.EmptyTypes)), Expression.Goto(foreachContinue))), foreachBreak, foreachContinue), ec).Compile(); hitcounter(enumerable_counter); Assert.Equal(5, enumerable_counter.Count); Assert.True(enumerable_counter.Disposed); }
public void StructForEachException() { var enumerable_counter = new StructEnumerableCounter(0, 100); var ec = Expression.Parameter(typeof(StructEnumerableCounter), "ec"); var item = Expression.Variable(typeof(int), "i"); var hitcounter = Expression.Lambda <Action <StructEnumerableCounter> >( ExpressionEx.ForEach( item, ec, Expression.Block( Expression.Condition( Expression.LessThanOrEqual(item, Expression.Constant(10)), Expression.Call(ec, typeof(StructEnumerableCounter).GetMethod("Hit", Type.EmptyTypes)), Expression.Throw(Expression.New(typeof(TestException)))))), ec).Compile(); Assert.Throws <TestException>(() => { hitcounter(enumerable_counter); }); Assert.Equal(10, enumerable_counter.Count); Assert.True(enumerable_counter.Disposed); }
public void StructForEachEnumerable() { var enumerable_counter = new StructEnumerableCounter(0, 10); var ec = Expression.Parameter(typeof(StructEnumerableCounter), "ec"); var item = Expression.Variable(typeof(int), "i"); var hitcounter = Expression.Lambda <Action <StructEnumerableCounter> >( ExpressionEx.ForEach( item, ec, Expression.Call(ec, typeof(StructEnumerableCounter).GetMethod("Hit", Type.EmptyTypes))), ec).Compile(); hitcounter(enumerable_counter); Assert.Equal(10, enumerable_counter.Count); Assert.True(enumerable_counter.Disposed); Assert.False(enumerable_counter.DisposedIncorrectly); }