public Result(Candidate cand, long msec, long check, long eddms)
 {
     this.Cand = cand;
     this.Ms = msec;
     this.Crc = check;
     this.Eddms = eddms;
 }
        void DoTest(Candidate cand, int n, bool showFullValue, bool verbose)
        {
            this.watch.Reset();
            this.watch.Start();
            XInt nFact = cand.GetValue(n);
            this.watch.Stop();

            int checksum = nFact.GetHashCode();
            var ms = this.watch.ElapsedMilliseconds;
            var eddms = XMath.ExactDecimalDigitsPerMillisecond(n, ms);
            var res = new Result(cand, ms, checksum, eddms);
            cand.Performance[n] = res;

            if (verbose)
            {
                this.winsole.WriteRed(string.Format(
                    // "\nSUMMARY: Computed the factorial "
                    "\n{0}! = {1}\nAlgorithm used: {2}\nCheckSum: <{3:X}>\nComputation in {4:D} ms.\nDecimal digits per ms {5}.\n",
                    n, XMath.AsymptFactorial(n), cand.Name, checksum, ms, eddms));
            }

            if (showFullValue)
            {
                this.winsole.Write(nl + "Now converting to string. Note: It takes longer to convert than to compute!" + nl + nl);
                this.winsole.WriteLine(nFact.ToString());
            }
        }