using System;
using System.Collections .Generic ;
using System.Diagnostics ;
class Test {
int TestList( int count) {
List< int> list = new List< int> ( ) ;
for ( int i= 0 ; i< count; i++ ) list.Add ( count- i) ;
return list.Count ;
}
int TestList2( int count) {
List< int> list = new List< int> ( ) ;
for ( int i= 0 ; i< count; i++ ) list.Insert ( 0 , i) ;
return list.Count ;
}
int TestLinkedList( int count) {
LinkedList< int> list = new LinkedList< int> ( ) ;
for ( int i= 0 ; i< count; i++ ) list.AddLast ( count- i) ;
return list.Count ;
}
int TestLinkedList2( int count) {
LinkedList< int> list = new LinkedList< int> ( ) ;
for ( int i= 0 ; i< count; i++ ) list.AddFirst ( i) ;
return list.Count ;
}
void Start( ) {
int loopcnt = 1000000 ;
int loopcnt2 = 100000 ;
int c;
Stopwatch sw = new Stopwatch( ) ;
sw.Start ( ) ;
c = TestList( loopcnt) ;
sw.Stop ( ) ;
Console.WriteLine ( "List back : {0} : {1}" , c, sw.Elapsed ) ;
sw.Reset ( ) ; sw.Start ( ) ;
c = TestList2( loopcnt2) ;
sw.Stop ( ) ;
Console.WriteLine ( "List front : {0} : {1}" , c, sw.Elapsed ) ;
sw.Reset ( ) ; sw.Start ( ) ;
c = TestLinkedList( loopcnt) ;
sw.Stop ( ) ;
Console.WriteLine ( "LinkedList back : {0} : {1}" , c, sw.Elapsed ) ;
sw.Reset ( ) ; sw.Start ( ) ;
c = TestLinkedList2( loopcnt) ;
sw.Stop ( ) ;
Console.WriteLine ( "LinkedList front : {0} : {1}" , c, sw.Elapsed ) ;
}
static void Main( ) {
new Test( ) .Start ( ) ;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOwoKY2xhc3MgVGVzdCB7CiBpbnQgVGVzdExpc3QoaW50IGNvdW50KSB7CiAgIExpc3Q8aW50PiBsaXN0ID0gbmV3IExpc3Q8aW50PigpOwogICBmb3IgKGludCBpPTA7IGk8Y291bnQ7IGkrKykgbGlzdC5BZGQoY291bnQtaSk7CiAgIHJldHVybiBsaXN0LkNvdW50OwogfQogaW50IFRlc3RMaXN0MihpbnQgY291bnQpIHsKICAgTGlzdDxpbnQ+IGxpc3QgPSBuZXcgTGlzdDxpbnQ+KCk7CiAgIGZvciAoaW50IGk9MDsgaTxjb3VudDsgaSsrKSBsaXN0Lkluc2VydCgwLCBpKTsKICAgcmV0dXJuIGxpc3QuQ291bnQ7CiB9CiBpbnQgVGVzdExpbmtlZExpc3QoaW50IGNvdW50KSB7CiAgIExpbmtlZExpc3Q8aW50PiBsaXN0ID0gbmV3IExpbmtlZExpc3Q8aW50PigpOwogICBmb3IgKGludCBpPTA7IGk8Y291bnQ7IGkrKykgbGlzdC5BZGRMYXN0KGNvdW50LWkpOwogICByZXR1cm4gbGlzdC5Db3VudDsKIH0KIGludCBUZXN0TGlua2VkTGlzdDIoaW50IGNvdW50KSB7CiAgIExpbmtlZExpc3Q8aW50PiBsaXN0ID0gbmV3IExpbmtlZExpc3Q8aW50PigpOwogICBmb3IgKGludCBpPTA7IGk8Y291bnQ7IGkrKykgbGlzdC5BZGRGaXJzdChpKTsKICAgcmV0dXJuIGxpc3QuQ291bnQ7CiB9CiB2b2lkIFN0YXJ0KCkgewogICBpbnQgbG9vcGNudCA9IDEwMDAwMDA7CiAgIGludCBsb29wY250MiA9IDEwMDAwMDsKICAgaW50IGM7CiAgIFN0b3B3YXRjaCBzdyA9IG5ldyBTdG9wd2F0Y2goKTsKICAgc3cuU3RhcnQoKTsKICAgYyA9IFRlc3RMaXN0KGxvb3BjbnQpOwogICBzdy5TdG9wKCk7CiAgIENvbnNvbGUuV3JpdGVMaW5lKCJMaXN0IGJhY2sgOiB7MH0gOiB7MX0iLCBjLCBzdy5FbGFwc2VkKTsKICAgc3cuUmVzZXQoKTsgc3cuU3RhcnQoKTsKICAgYyA9IFRlc3RMaXN0Mihsb29wY250Mik7CiAgIHN3LlN0b3AoKTsKICAgQ29uc29sZS5Xcml0ZUxpbmUoIkxpc3QgZnJvbnQgOiB7MH0gOiB7MX0iLCBjLCBzdy5FbGFwc2VkKTsKICAgc3cuUmVzZXQoKTsgc3cuU3RhcnQoKTsKICAgYyA9IFRlc3RMaW5rZWRMaXN0KGxvb3BjbnQpOwogICBzdy5TdG9wKCk7CiAgIENvbnNvbGUuV3JpdGVMaW5lKCJMaW5rZWRMaXN0IGJhY2sgOiB7MH0gOiB7MX0iLCBjLCBzdy5FbGFwc2VkKTsKICAgc3cuUmVzZXQoKTsgc3cuU3RhcnQoKTsKICAgYyA9IFRlc3RMaW5rZWRMaXN0Mihsb29wY250KTsKICAgc3cuU3RvcCgpOwogICBDb25zb2xlLldyaXRlTGluZSgiTGlua2VkTGlzdCBmcm9udCA6IHswfSA6IHsxfSIsIGMsIHN3LkVsYXBzZWQpOwogfQogc3RhdGljIHZvaWQgTWFpbigpIHsKICBuZXcgVGVzdCgpLlN0YXJ0KCk7CiB9Cn0K