using System;
using System.Threading;
using System.Diagnostics;
using Amib.Threading;
namespace Examples
{
/// <summary>
/// Summary description for Example.
/// </summary>
class Example
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[MTAThread]
static void Main(string[] args)
{
RunExamples();
}
private static void RunExamples()
{
bool example1 = RunGetResultExample();
Trace.WriteLineIf(example1, "RunGetResultExample completed successfully");
Trace.WriteLineIf(!example1, "RunGetResultExample failed");
bool example2 = example1 && RunMultipleWorkItemsExample();
Trace.WriteLineIf(example2, "RunMultipleWorkItemsExample completed successfully");
Trace.WriteLineIf(!example2 && example1, "RunMultipleWorkItemsExample failed");
bool example3 = example2 && RunPostExecuteExample();
Trace.WriteLineIf(example3, "RunPostExecuteExample completed successfully");
Trace.WriteLineIf(!example3 && example2, "RunPostExecuteExample failed");
bool example4 = example3 && RunStateDisposeExample();
Trace.WriteLineIf(example4, "RunStateDisposeExample completed successfully");
Trace.WriteLineIf(!example4 && example3, "RunStateDisposeExample failed");
bool example5 = example4 && RunExceptionsExample();
Trace.WriteLineIf(example5, "RunExceptionsExample completed successfully");
Trace.WriteLineIf(!example5 && example4, "RunExceptionsExample failed");
bool example6 = example5 && RunWaitForIdleExample();
Trace.WriteLineIf(example6, "RunWaitForIdleExample completed successfully");
Trace.WriteLineIf(!example6 && example5, "RunWaitForIdleExample failed");
bool success = example6;
Trace.WriteLineIf(success, "All tests completed successfully");
Trace.WriteLineIf(!success, "At least one of the tests failed");
GC.Collect();
GC.WaitForPendingFinalizers();
}
private static bool RunGetResultExample()
{
GetResultExample getResultExample = new GetResultExample();
bool success = true;
success = success && getResultExample.TestBlockingCall();
success = success && getResultExample.TestTimeout();
success = success && getResultExample.TestWorkItemCanceling();
success = success && getResultExample.TestWorkItemWaitCanceling();
return success;
}
private static bool RunPostExecuteExample()
{
PostExecuteExample postExecuteExample = new PostExecuteExample();
bool success = true;
success = success && postExecuteExample.TestDefaultPostExecute(CallToPostExecute.Always, true);
success = success && postExecuteExample.TestDefaultPostExecute(0, false);
success = success && postExecuteExample.TestDefaultPostExecute(CallToPostExecute.WhenWorkItemCanceled, false);
success = success && postExecuteExample.TestDefaultPostExecute(CallToPostExecute.WhenWorkItemNotCanceled, true);
success = success && postExecuteExample.TestPostExecute(CallToPostExecute.Always, true);
success = success && postExecuteExample.TestPostExecute(0, false);
success = success && postExecuteExample.TestPostExecute(CallToPostExecute.WhenWorkItemCanceled, false);
success = success && postExecuteExample.TestPostExecute(CallToPostExecute.WhenWorkItemNotCanceled, true);
success = success && postExecuteExample.TestPostExecuteWithCancel(CallToPostExecute.Always, true);
success = success && postExecuteExample.TestPostExecuteWithCancel(0, false);
success = success && postExecuteExample.TestPostExecuteWithCancel(CallToPostExecute.WhenWorkItemCanceled, true);
success = success && postExecuteExample.TestPostExecuteWithCancel(CallToPostExecute.WhenWorkItemNotCanceled, false);
return success;
}
private static bool RunMultipleWorkItemsExample()
{
MultipleWorkItemsExample multipleWorkItemsExample = new MultipleWorkItemsExample();
bool success = true;
success = success && multipleWorkItemsExample.TestWaitAll();
success = success && multipleWorkItemsExample.TestWaitAny();
success = success && multipleWorkItemsExample.TestWaitAllWithTimeoutSuccess();
success = success && multipleWorkItemsExample.TestWaitAllWithTimeoutFailure();
success = success && multipleWorkItemsExample.TestWaitAnyWithTimeoutSuccess();
success = success && multipleWorkItemsExample.TestWaitAnyWithTimeoutFailure();
return success;
}
private static bool RunStateDisposeExample()
{
StateDisposeExample stateDisposeExample = new StateDisposeExample();
bool success = true;
success = success && stateDisposeExample.TestDisposeCallerState();
success = success && stateDisposeExample.TestDontDisposeCallerState();
return success;
}
private static bool RunWaitForIdleExample()
{
WaitForIdleExample waitForIdleExample = new WaitForIdleExample();
bool success = true;
success = success && waitForIdleExample.TestWaitForIdle();
return success;
}
private static bool RunExceptionsExample()
{
ExceptionsExample exceptionsExample = new ExceptionsExample();
bool success = true;
success = success && exceptionsExample.TestExceptionThrowing();
success = success && exceptionsExample.TestExceptionReturning();
return success;
}
}
}