using System;
public class Test
{
public static void Main( )
{
var values = new object[ ] { 42 , 1.42f , 1.42d, 1.0m } ;
var converters = new Func< object, bool> [ ] { CheckNegative1, CheckNegative2 } ;
var dummy = false ;
var watch = new System.Diagnostics .Stopwatch ( ) ;
foreach ( var converter in converters) {
foreach ( var value in values) {
watch.Reset ( ) ;
watch.Start ( ) ;
for ( var i = 0 ; i < 3000000 ; ++ i) {
dummy = converter( value) ;
}
watch.Stop ( ) ;
Console.WriteLine ( "Testing with type {0} and converter #{1} took {2}ms" ,
value.GetType ( ) .Name ,
Array.IndexOf ( converters, converter) + 1 ,
watch.ElapsedMilliseconds ) ;
}
}
Console.Write ( Convert.ToInt32 ( dummy) ) ;
}
static bool CheckNegative1( object number) {
return Convert.ToDouble ( number) < 0 ;
}
static bool CheckNegative2( object number)
{
switch ( Type.GetTypeCode ( number.GetType ( ) ) ) {
case TypeCode.Int32 :
return ( int ) number < 0 ;
case TypeCode.Single :
return ( float ) number < 0 ;
case TypeCode.Double :
return ( double ) number < 0 ;
case TypeCode.Decimal :
return ( decimal) number < 0 ;
// etc etc
default :
throw new ArgumentException( ) ;
}
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJICAgIHZhciB2YWx1ZXMgPSBuZXcgb2JqZWN0W10geyA0MiwgMS40MmYsIDEuNDJkLCAxLjBtIH07CiAgICAgICAgICAgIHZhciBjb252ZXJ0ZXJzID0gbmV3IEZ1bmM8b2JqZWN0LCBib29sPltdIHsgQ2hlY2tOZWdhdGl2ZTEsIENoZWNrTmVnYXRpdmUyIH07CiAgICAgICAgICAgIHZhciBkdW1teSA9IGZhbHNlOwogICAgICAgICAgICB2YXIgd2F0Y2ggPSBuZXcgU3lzdGVtLkRpYWdub3N0aWNzLlN0b3B3YXRjaCgpOwoKICAgICAgICAgICAgZm9yZWFjaCAodmFyIGNvbnZlcnRlciBpbiBjb252ZXJ0ZXJzKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgICAgICAgICAgICAgICAgd2F0Y2guUmVzZXQoKTsKICAgICAgICAgICAgICAgICAgICB3YXRjaC5TdGFydCgpOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzAwMDAwMDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15ID0gY29udmVydGVyKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgd2F0Y2guU3RvcCgpOwogICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJUZXN0aW5nIHdpdGggdHlwZSB7MH0gYW5kIGNvbnZlcnRlciAjezF9IHRvb2sgezJ9bXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLkdldFR5cGUoKS5OYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LkluZGV4T2YoY29udmVydGVycywgY29udmVydGVyKSArIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2guRWxhcHNlZE1pbGxpc2Vjb25kcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQoKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZShDb252ZXJ0LlRvSW50MzIoZHVtbXkpKTsKCX0KCglzdGF0aWMgYm9vbCBDaGVja05lZ2F0aXZlMShvYmplY3QgbnVtYmVyKSB7CiAgICAgICAgICAgIHJldHVybiBDb252ZXJ0LlRvRG91YmxlKG51bWJlcikgPCAwOwoJfQoKCXN0YXRpYyBib29sIENoZWNrTmVnYXRpdmUyKG9iamVjdCBudW1iZXIpCgl7CgkgICAgc3dpdGNoKFR5cGUuR2V0VHlwZUNvZGUobnVtYmVyLkdldFR5cGUoKSkpIHsKCSAgICAgICAgY2FzZSBUeXBlQ29kZS5JbnQzMjoKCSAgICAgICAgICAgIHJldHVybiAoaW50KW51bWJlciA8IDA7CgkgICAgICAgIGNhc2UgVHlwZUNvZGUuU2luZ2xlOgoJICAgICAgICAgICAgcmV0dXJuIChmbG9hdCludW1iZXIgPCAwOwoJICAgICAgICBjYXNlIFR5cGVDb2RlLkRvdWJsZToKCSAgICAgICAgICAgIHJldHVybiAoZG91YmxlKW51bWJlciA8IDA7CgkgICAgICAgIGNhc2UgVHlwZUNvZGUuRGVjaW1hbDoKCSAgICAgICAgICAgIHJldHVybiAoZGVjaW1hbCludW1iZXIgPCAwOwoKCSAgICAgICAgLy8gZXRjIGV0YwoJICAgICAgICBkZWZhdWx0OgoJICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCk7CgkgICAgfQoJfQp9