using System;
using System.Diagnostics ;
using System.Threading ;
using System.Reflection ;
using System.Numerics ;
public class Test
{
public static void runTest< T> ( int count, T a, T b, Func< T, T, T> add) where T : new( )
{
Stopwatch w = new Stopwatch( ) ;
Random rnd = new Random( ) ;
w.Start ( ) ;
for ( int i = 0 ; i < count; i++ )
{
a = add( a, b) ;
}
w.Stop ( ) ;
Console.WriteLine ( "{0,-25} : {1}" , typeof( T) .ToString ( ) , w.Elapsed ) ;
}
public static void Main( )
{
Console.WriteLine ( "Results:" ) ;
int count = ( int ) 1e7 ;
runTest< float> ( count, 0 , 28374 , ( a, b) => a+ b) ;
runTest< double> ( count, 0 , 28374 , ( a, b) => a + b) ;
runTest< Complex> ( count, 0 , 28374 , ( a, b) => a + b) ;
runTest< byte> ( count, 0 , 244 , ( a, b) => ( byte) ( a + b) ) ;
runTest< short> ( count, 0 , 28374 , ( a, b) => ( short ) ( a + b) ) ;
runTest< int> ( count, 0 , 28374 , ( a, b) => a + b) ;
runTest< long> ( count, 0 , 28374 , ( a, b) => a + b) ;
runTest< decimal> ( count, 0 , 28374 , ( a, b) => a + b) ;
runTest< BigInteger> ( count, 0 , 28374 , ( a, b) => a + b) ;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3M7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7CnVzaW5nIFN5c3RlbS5SZWZsZWN0aW9uOwp1c2luZyBTeXN0ZW0uTnVtZXJpY3M7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgcnVuVGVzdDxUPihpbnQgY291bnQsVCBhLCBUIGIsIEZ1bmM8VCxULFQ+IGFkZCkgd2hlcmUgVCA6IG5ldygpCiAgICB7CiAgICAgICAgU3RvcHdhdGNoIHcgPSBuZXcgU3RvcHdhdGNoKCk7CiAgICAgICAgUmFuZG9tIHJuZCA9IG5ldyBSYW5kb20oKTsKICAgICAgICB3LlN0YXJ0KCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgYSA9IGFkZChhLCBiKTsKICAgICAgICB9CiAgICAgICAgdy5TdG9wKCk7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInswLC0yNX0gOiB7MX0iLCB0eXBlb2YoVCkuVG9TdHJpbmcoKSwgdy5FbGFwc2VkKTsKCiAgICB9CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCiAgICB7CgogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJSZXN1bHRzOiIpOwogICAgICAgIGludCBjb3VudCA9IChpbnQpMWU3OwogICAgICAgIHJ1blRlc3Q8ZmxvYXQ+KGNvdW50LCAwLCAyODM3NCwgKGEsYikgPT4gYStiKTsKICAgICAgICBydW5UZXN0PGRvdWJsZT4oY291bnQsIDAsIDI4Mzc0LCAoYSwgYikgPT4gYSArIGIpOwogICAgICAgIHJ1blRlc3Q8Q29tcGxleD4oY291bnQsIDAsIDI4Mzc0LCAoYSwgYikgPT4gYSArIGIpOwogICAgICAgIHJ1blRlc3Q8Ynl0ZT4oY291bnQsIDAsIDI0NCwgKGEsIGIpID0+IChieXRlKShhICsgYikpOwogICAgICAgIHJ1blRlc3Q8c2hvcnQ+KGNvdW50LCAwLCAyODM3NCwgKGEsIGIpID0+IChzaG9ydCkoYSArIGIpKTsKICAgICAgICBydW5UZXN0PGludD4oY291bnQsIDAsIDI4Mzc0LCAoYSwgYikgPT4gYSArIGIpOwogICAgICAgIHJ1blRlc3Q8bG9uZz4oY291bnQsIDAsIDI4Mzc0LCAoYSwgYikgPT4gYSArIGIpOwogICAgICAgIHJ1blRlc3Q8ZGVjaW1hbD4oY291bnQsIDAsIDI4Mzc0LCAoYSwgYikgPT4gYSArIGIpOwogICAgICAgIHJ1blRlc3Q8QmlnSW50ZWdlcj4oY291bnQsIDAsIDI4Mzc0LCAoYSwgYikgPT4gYSArIGIpOwogICAgfQp9Cg==