예제 #1
0
        private static void CauseHandledException()
        {
            AppDomain.CurrentDomain.FirstChanceException +=
                (sender, o) =>
            {
                Console.Out.WriteLine("First Chance Exception");
                Console.Out.WriteLine();
                o.Exception.Print(Console.Out);
            };

            AppDomain.CurrentDomain.UnhandledException +=
                (sender, o) =>
            {
                Console.Out.WriteLine("Unhandled Exception");
                Console.Out.WriteLine();
                (o.ExceptionObject as Exception).Print(Console.Out);
            };

            try
            {
                NumberGenerator.CreateBigInteger(0);
            }
            catch (ArgumentException)
            {
                Console.Out.WriteLine();
                Console.Out.WriteLine("ArgumentException Caught");
                Console.Out.WriteLine();
            }
        }
예제 #2
0
        private static void CacheBigIntegers()
        {
            var handle = new ManualResetEvent(false);

            var cache = MemoryCache.Default;

            Console.Out.WriteLine("Polling interval: " + cache.PollingInterval);

            cache.Add("Value1", NumberGenerator.CreateBigInteger(50),
                      new CacheItemPolicy()
            {
                SlidingExpiration = TimeSpan.FromSeconds(5)
            });
            cache.Add(new CacheItem("Value2", NumberGenerator.CreateBigInteger(50)),
                      new CacheItemPolicy()
            {
                SlidingExpiration = TimeSpan.FromSeconds(5),
                RemovedCallback   = (arguments) =>
                {
                    Console.Out.WriteLine("Removal reason: " + arguments.RemovedReason);
                    handle.Set();
                }
            });

            Console.Out.WriteLine(cache["Value1"].ToString());
            Console.Out.WriteLine(cache["Value2"].ToString());

            Console.Out.WriteLine("Waiting for Value2 to be removed at time {0}...",
                                  DateTime.Now.ToString("R"));
            handle.WaitOne();
            Console.Out.WriteLine("Value2 was removed at time {0}...",
                                  DateTime.Now.ToString("R"));
        }
예제 #3
0
 private static void TimeBigIntegerCreation()
 {
     for (var i = 1u; i < 1000000u; i *= 10u)
     {
         Console.Out.WriteLine("Digits: " + i +
                               "\t\tTime: " + new Action(() =>
         {
             var value = NumberGenerator.CreateBigInteger(i);
         }).Time());
     }
 }
예제 #4
0
        private static void CreateBigIntegers()
        {
            var x = NumberGenerator.CreateBigInteger(50);
            var y = NumberGenerator.CreateBigInteger(50);

            Console.Out.WriteLine("x = " + x);
            Console.Out.WriteLine("y = " + y);
            Console.Out.WriteLine("x + y = " + (x + y));
            Console.Out.WriteLine("x - y = " + (x - y));
            Console.Out.WriteLine("x * y = " + (x * y));
            Console.Out.WriteLine("x / y = " + (x / y));
        }
예제 #5
0
        private static void PrettyPrintBigNumbers()
        {
            var numbers = new List <BigInteger>();

            for (var i = 0; i < 10; i++)
            {
                numbers.Add(NumberGenerator.CreateBigInteger(10));
            }

            var builder = new StringBuilder(
                string.Join <BigInteger>(", ", numbers));

            Console.Out.WriteLine(builder);
            builder.Clear();
            Console.Out.WriteLine(builder);
        }
예제 #6
0
        private static void LazyBigNumbers()
        {
            var lazyNumber = new Lazy <BigInteger>();

            Console.Out.WriteLine(lazyNumber.IsValueCreated);
            Console.Out.WriteLine(lazyNumber.Value);
            Console.Out.WriteLine(lazyNumber.IsValueCreated);
            Console.Out.WriteLine(lazyNumber.Value);

            Console.Out.WriteLine();

            var lazyNumberWithFactory = new Lazy <BigInteger>(() =>
            {
                return(NumberGenerator.CreateBigInteger(50));
            });

            Console.Out.WriteLine(lazyNumberWithFactory.IsValueCreated);
            Console.Out.WriteLine(lazyNumberWithFactory.Value);
            Console.Out.WriteLine(lazyNumberWithFactory.IsValueCreated);
            Console.Out.WriteLine(lazyNumberWithFactory.Value);
        }
예제 #7
0
        private static void CreateBigIntegersConcurrently()
        {
            var values = new ConcurrentBag <BigInteger>();
            var tasks  = new List <Task>();

            for (var i = 0; i < Environment.ProcessorCount * 2; i++)
            {
                tasks.Add(Task.Factory.StartNew(() =>
                {
                    values.Add(NumberGenerator.CreateBigInteger(2500));
                }));
            }

            Task.WaitAll(tasks.ToArray());

            var sortedValues = new SortedSet <BigInteger>(values);

            foreach (var value in sortedValues)
            {
                Console.Out.WriteLine(value);
            }
        }
예제 #8
0
        private static void CreateBigIntegerWithOptions(string option)
        {
            CreationOptions options;

            if (!string.IsNullOrWhiteSpace(option))
            {
                if (Enum.TryParse <CreationOptions>(option, out options))
                {
                    Console.Out.WriteLine(NumberGenerator.CreateBigInteger(5, options));
                    Console.Out.WriteLine("CreateOdd? " + options.HasFlag(CreationOptions.CreateOdd));
                    Console.Out.WriteLine("CreateEven? " + options.HasFlag(CreationOptions.CreateEven));
                }
                else
                {
                    Console.Out.WriteLine("You gave me a value, " + option + ", that doesn't map to a CreationOptions value.");
                }
            }
            else
            {
                Console.Out.WriteLine("You gave me an empty value or a value with only whitespace.");
            }
        }
예제 #9
0
        private static void StreamBigIntegers()
        {
            using (var stream = new MemoryStream())
            {
                for (var i = 0; i < 10; i++)
                {
                    var number = NumberGenerator.CreateBigInteger(10).ToByteArray();
                    stream.Write(number, 0, number.Length);
                }

                stream.Position = 0;
                stream.Flush();

                using (var newStream = new MemoryStream())
                {
                    stream.CopyTo(newStream);
                    newStream.Position = 0;
                    var data = new byte[newStream.Length];
                    newStream.Read(data, 0, data.Length);
                    Console.Out.WriteLine(new BigInteger(data));
                }
            }
        }