private void RunAssertionEquals(string epl, SupportUpdateListener[] listeners) { // test function returns lookup value and "equals" for (var i = 0; i < listeners.Length; i++) { var stmt = _epService.EPAdministrator.CreateEPL(epl.Replace("!NUM!", i.ToString(CultureInfo.InvariantCulture))); stmt.AddListener(listeners[i]); } MyLib.ResetCountInvoked(); var loops = 1000; var delta = PerformanceObserver.TimeMillis( () => { for (var i = 0; i < loops; i++) { _epService.EPRuntime.SendEvent(new SupportBean("E_" + i % listeners.Length, 0)); var listener = listeners[i % listeners.Length]; Assert.IsTrue(listener.GetAndClearIsInvoked()); } }); Assert.AreEqual(loops, MyLib.CountInvoked); Log.Info("Equals delta=" + delta); Assert.That(delta, Is.LessThan(1000), "Delta is " + delta); _epService.EPAdministrator.DestroyAllStatements(); }
private void RunAssertionBoolean(string epl) { // test function returns lookup value and "equals" var count = 10; for (var i = 0; i < count; i++) { var stmt = _epService.EPAdministrator.CreateEPL(epl); stmt.AddListener(_listener); } MyLib.ResetCountInvoked(); var loops = 10000; var delta = PerformanceObserver.TimeMillis( () => { for (var i = 0; i < loops; i++) { var key = "E_" + i % 100; _epService.EPRuntime.SendEvent(new SupportBean(key, 0)); if (key.Equals("E_1")) { Assert.AreEqual(count, _listener.NewDataList.Count); _listener.Reset(); } else { Assert.IsFalse(_listener.IsInvoked); } } }); // As noted in my analysis, the invocation count can actually be larger than the number of loops, // this occurs because of the way in which the weak references are handled in the caching layers // below. Java soft-references behave much better, but we don't have access to them in the CLR. Assert.That(MyLib.CountInvoked, Is.GreaterThanOrEqualTo(loops), string.Format("MyLib.CountInvoked = {0}", MyLib.CountInvoked)); Log.Info("Boolean delta=" + delta); Assert.That(delta, Is.LessThan(1000), "Delta is " + delta); _epService.EPAdministrator.DestroyAllStatements(); }