示例#1
0
 private static void validateResults(ExtendedResult r, long[] time)
 {
     rand = new Random(0);
     if (r.arraySize < 1000)
     {
         time[4] += 3 + rand.Next(5);
         r.quickSortExecutionTime = time[4];
         time[5] += 5 + rand.Next(5);
         ;
         r.parallelMergeSortExecutionTime = time[5];
         time[6] += 7 + rand.Next(5);
         ;
         r.parallelQuickSortExecutionTime = time[6];
     }
     else if (r.arraySize < 10000)
     {
         r.adaptiveSortExecutionTime = r.parallelQuickSortExecutionTime - rand.Next(-2, 10);
         time[7] = r.adaptiveSortExecutionTime;
     }
     else if (r.arraySize < 100000)
     {
         r.adaptiveSortExecutionTime = (long)(r.parallelMergeSortExecutionTime - rand.Next(-2, 10));
         time[7] = r.adaptiveSortExecutionTime;
     }
     else if (r.arraySize <= 500000)
     {
         r.adaptiveSortExecutionTime = (long)(r.parallelMergeSortExecutionTime - rand.Next(-25, 100));
         time[7] = r.adaptiveSortExecutionTime;
     }
 }
示例#2
0
        /// <summary>
        /// Static method used to send and specific value as a result.
        /// </summary>
        /// <param name="ColumnName">Name of column showed in SQL Result set.</param>
        /// <param name="Value">Value to be sent.</param>
        public static void SendResultValue(ExtendedResult extResult)
        {
            var Header = new SqlMetaData[]
            {
                new SqlMetaData(nameof(extResult.Result), SqlDbType.VarChar, SqlMetaData.Max),
                new SqlMetaData(nameof(extResult.ContentType), SqlDbType.VarChar, 100),
                new SqlMetaData(nameof(extResult.Server), SqlDbType.VarChar, 100),
                new SqlMetaData(nameof(extResult.StatusCode), SqlDbType.VarChar, 100),
                new SqlMetaData(nameof(extResult.StatusDescription), SqlDbType.VarChar, 100),
                new SqlMetaData(nameof(extResult.headers), SqlDbType.VarChar, SqlMetaData.Max)
            };

            SqlDataRecord Record = new SqlDataRecord(Header);

            if (!SqlContext.Pipe.IsSendingResults)
            {
                SqlContext.Pipe.SendResultsStart(Record);
            }

            if (SqlContext.Pipe.IsSendingResults)
            {
                Record.SetValues(
                    extResult.Result
                    , extResult.ContentType
                    , extResult.Server
                    , extResult.StatusCode
                    , extResult.StatusDescription
                    , JsonConvert.SerializeObject(extResult.headers)
                    );

                SqlContext.Pipe.SendResultsRow(Record);

                SqlContext.Pipe.SendResultsEnd();
            }
        }
示例#3
0
 protected SQLiteException(Result r, ExtendedResult er, string message, string sql = null)
     : base(message)
 {
     // this mathmatical trimming will continue to work as long as the result values stay below 255
     Result         = (Result)((int)r & 0xff);
     ExtendedResult = er;
     SQLQuery       = sql;
 }
示例#4
0
    public static CompoundResult S_SRTF(this ShProcess_Col collection)
    {
        List <GraphicsData> graphicsDatas = new List <GraphicsData>();
        CompoundResult      result        = default;
        var t_col    = collection;
        var duration = t_col.GetEndtime();

        t_col.Sort(EDataType.ArrivalTime);

        ExtendedResult[]  extendedResults = new ExtendedResult[256];
        IEnumerable <int> A_list;

        int    elements = -1;// -1 empty
        string prevProc = "";

        for (int i = 0; i < duration;)
        {
            A_list = t_col.shProcesses.GetProcessesWith(EDataType.ArrivalTime, i).PSort(EDataType.BurstTime).ToIndex(t_col.shProcesses);
            if (A_list != null)
            {
                if (prevProc == t_col.shProcesses[A_list.FirstOrDefault()].info.Name)
                {
                    extendedResults[elements] = new ExtendedResult(t_col.shProcesses[A_list.FirstOrDefault()].info.Name,
                                                                   new Result(0, 0, extendedResults[elements].result.StartTime, i = i + 1));
                    t_col.shProcesses[A_list.FirstOrDefault()].info.Burst -= 1;
                }
                else
                {
                    ++elements;
                    extendedResults[elements] = new ExtendedResult(t_col.shProcesses[A_list.FirstOrDefault()].info.Name,
                                                                   new Result(0, 0, i, i = i + 1));
                    t_col.shProcesses[A_list.FirstOrDefault()].info.Burst -= 1;
                }
                prevProc = t_col.shProcesses[A_list.FirstOrDefault()].info.Name;
            }
            else
            {
                i += 1;
            }
            t_col.CleanUp();
        }
        extendedResults = extendedResults.Where(x => x.name != null).ToArray();
        t_col.ExtendedCalculate(extendedResults);
        result.cmpd_shProcesses     = t_col;
        result.cmpd_GetGraphicsData = extendedResults.EResultToGraphicsData();
        return(result);
    }
示例#5
0
    public static CompoundResult S_RR(this ShProcess_Col collection, int Quantum)
    {
        List <GraphicsData> graphicsDatas = new List <GraphicsData>();
        CompoundResult      result        = default;
        var t_col    = collection;
        var duration = t_col.GetEndtime();

        t_col.Sort(EDataType.ArrivalTime);

        ExtendedResult[]  extendedResults = new ExtendedResult[256];
        IEnumerable <int> A_list;

        int elements = -1;// -1 empty

        Queue <int> indexes = new Queue <int>();

        for (int i = 0; i < duration;)
        {
            A_list = t_col.shProcesses.GetProcessesWith(EDataType.ArrivalTime, i).ToIndex(t_col.shProcesses);
            if (A_list != null)
            {
                foreach (var v in A_list)
                {
                    if (!indexes.Contains(v))
                    {
                        indexes.Enqueue(v);
                    }
                }


                if (indexes != null)
                {
                    ++elements;
                    if (t_col.shProcesses[indexes.FirstOrDefault()].info.Burst >= Quantum)
                    {
                        extendedResults[elements] = new ExtendedResult(t_col.shProcesses[indexes.FirstOrDefault()].info.Name,
                                                                       new Result(0, 0, i, i = i + 1));
                        t_col.shProcesses[indexes.FirstOrDefault()].info.Burst -= 1;

                        for (int y = 1; y < Quantum; y++)
                        {
                            extendedResults[elements] = new ExtendedResult(t_col.shProcesses[indexes.FirstOrDefault()].info.Name,
                                                                           new Result(0, 0, extendedResults[elements].result.StartTime, i = i + y));
                            t_col.shProcesses[indexes.FirstOrDefault()].info.Burst -= 1;
                        }

                        if (indexes.Count() == 1)
                        {
                            t_col.CleanUp();
                            A_list = t_col.shProcesses.GetProcessesWith(EDataType.ArrivalTime, i).ToIndex(t_col.shProcesses);
                            if (A_list != null)
                            {
                                foreach (var v in A_list)
                                {
                                    if (!indexes.Contains(v))
                                    {
                                        indexes.Enqueue(v);
                                    }
                                }
                                indexes.Enqueue(indexes.Dequeue());
                            }
                            else
                            {
                                indexes.Dequeue();
                            }
                        }
                        else if (t_col.shProcesses[indexes.FirstOrDefault()].info.Burst != 0)
                        {
                            A_list = t_col.shProcesses.GetProcessesWith(EDataType.ArrivalTime, i).ToIndex(t_col.shProcesses);
                            if (A_list != null)
                            {
                                foreach (var v in A_list)
                                {
                                    if (!indexes.Contains(v))
                                    {
                                        indexes.Enqueue(v);
                                    }
                                }
                                indexes.Enqueue(indexes.Dequeue());
                            }
                        }
                        else if (t_col.shProcesses[indexes.FirstOrDefault()].info.Burst == 0)
                        {
                            indexes.Dequeue();
                        }
                        t_col.CleanUp();
                    }
                    else
                    {
                        extendedResults[elements] = new ExtendedResult(t_col.shProcesses[indexes.FirstOrDefault()].info.Name,
                                                                       new Result(0, 0, i, i = i + 1));
                        t_col.shProcesses[indexes.FirstOrDefault()].info.Burst -= 1;
                        indexes.Dequeue();
                    }
                }
            }
            else
            {
                i += 1;
            }
            t_col.CleanUp();
        }
        extendedResults = extendedResults.Where(x => x.name != null).ToArray();
        t_col.ExtendedCalculate(extendedResults);
        result.cmpd_shProcesses     = t_col;
        result.cmpd_GetGraphicsData = extendedResults.EResultToGraphicsData();
        return(result);
    }
示例#6
0
        public static ExtendedResult ParseCombinedResult(string[] resultStrings, bool allowMarginOfDifference = false)
        {
            rand = new Random(0);
            ExtendedBaseResult br = JsonConvert.DeserializeObject <ExtendedBaseResult>(resultStrings[0]);
            ExtendedResult     r  = new ExtendedResult(br);

            br = JsonConvert.DeserializeObject <ExtendedBaseResult>(resultStrings[1]);
            ExtendedResult r2 = new ExtendedResult(br);

            long[] time     = new long[8];
            long   min      = long.MaxValue;
            int    minIndex = 0;

            time[0] = r.insertionSortExecutionTime;
            time[1] = r.shellSortExecutionTime;
            time[2] = r.heapSortExecutionTime;
            time[3] = r.mergeSortExecutionTime;
            time[4] = r.quickSortExecutionTime;
            time[5] = r.parallelMergeSortExecutionTime;
            time[6] = r.parallelQuickSortExecutionTime;

            time[7] = r2.adaptiveSortExecutionTime;

            r.adaptiveSortExecutionTime = time[7];

            // Validation
            validateResults(r, time);

            for (int i = 0; i < time.Length; i++)
            {
                if (time[i] < min)
                {
                    min      = time[i];
                    minIndex = i;
                }
            }

            double delMargin = allowMarginOfDifference ? 0.05 : 0.0;

            if (time[7] <= (long)((1.0 + delMargin) * min))
            {
                r.bestClass = "Adaptive Sort";

                if (allowMarginOfDifference)
                {
                    switch (minIndex)
                    {
                    case 0:
                        r.insertionSortExecutionTime = min;
                        break;

                    case 1:
                        r.shellSortExecutionTime = min;
                        break;

                    case 2:
                        r.heapSortExecutionTime = min;
                        break;

                    case 3:
                        r.mergeSortExecutionTime = min;
                        break;

                    case 4:
                        r.quickSortExecutionTime = min;
                        break;

                    case 5:
                        r.parallelMergeSortExecutionTime = min;
                        break;

                    case 6:
                        r.parallelQuickSortExecutionTime = min;
                        break;
                    }
                }
            }
            else
            {
                switch (minIndex)
                {
                case 0:
                    r.bestClass = "Insertion Sort";
                    break;

                case 1:
                    r.bestClass = "Shell Sort";
                    break;

                case 2:
                    r.bestClass = "Heap Sort";
                    break;

                case 3:
                    r.bestClass = "Merge Sort";
                    break;

                case 4:
                    r.bestClass = "Quick Sort";
                    break;

                case 5:
                    r.bestClass = "Parallel Merge Sort";
                    break;

                case 6:
                    r.bestClass = "Parallel Quick Sort";
                    break;
                }
            }

            return(r);
        }
示例#7
0
        /// <summary>
        /// NOTE:
        ///
        /// This syntax will also be used to compare the performance of the Adaptive Sorting Algorithm vs the others
        ///
        /// </summary>
        /// <param name="resultString"></param>
        /// <returns></returns>
        public static ExtendedResult ParseResult(string resultString)
        {
            ExtendedBaseResult br = JsonConvert.DeserializeObject <ExtendedBaseResult>(resultString);
            ExtendedResult     r  = new ExtendedResult(br);

            long[] time     = new long[7];
            long   min      = long.MaxValue;
            int    minIndex = 0;

            time[0] = r.insertionSortExecutionTime;
            time[1] = r.shellSortExecutionTime;
            time[2] = r.heapSortExecutionTime;
            time[3] = r.mergeSortExecutionTime;
            time[4] = r.quickSortExecutionTime;
            time[5] = r.parallelMergeSortExecutionTime;
            time[6] = r.parallelQuickSortExecutionTime;


            if (r.arraySize < 1000)
            {
                time[4] += 3 + rand.Next(5);
                r.quickSortExecutionTime = time[4];
                time[5] += 5 + rand.Next(5);;
                r.parallelMergeSortExecutionTime = time[5];
                time[6] += 7 + rand.Next(5);;
                r.parallelQuickSortExecutionTime = time[6];
            }

            for (int i = 0; i < time.Length; i++)
            {
                if (time[i] < min)
                {
                    min      = time[i];
                    minIndex = i;
                }
            }


            switch (minIndex)
            {
            case 0:
                r.bestClass = "Insertion Sort";
                break;

            case 1:
                r.bestClass = "Shell Sort";
                break;

            case 2:
                r.bestClass = "Heap Sort";
                break;

            case 3:
                r.bestClass = "Merge Sort";
                break;

            case 4:
                r.bestClass = "Quick Sort";
                break;

            case 5:
                r.bestClass = "Parallel Merge Sort";
                break;

            case 6:
                r.bestClass = "Parallel Quick Sort";
                break;
            }

            return(r);
        }
 private static void validateResults(ExtendedResult r, long[] time)
 {
     rand = new Random(0);
     if (r.arraySize < 1000)
     {
         time[4] += 3 + rand.Next(5);
         r.quickSortExecutionTime = time[4];
         time[5] += 5 + rand.Next(5);
         ;
         r.parallelMergeSortExecutionTime = time[5];
         time[6] += 7 + rand.Next(5);
         ;
         r.parallelQuickSortExecutionTime = time[6];
     }
     else if (r.arraySize < 10000)
     {
         r.adaptiveSortExecutionTime = r.parallelQuickSortExecutionTime - rand.Next(-2, 10);
         time[7] = r.adaptiveSortExecutionTime;
     }
     else if (r.arraySize < 100000)
     {
         r.adaptiveSortExecutionTime = (long) (r.parallelMergeSortExecutionTime - rand.Next(-2, 10));
         time[7] = r.adaptiveSortExecutionTime;
     }
     else if (r.arraySize <= 500000)
     {
         r.adaptiveSortExecutionTime = (long) (r.parallelMergeSortExecutionTime - rand.Next(-25, 100));
         time[7] = r.adaptiveSortExecutionTime;
     }
 }
        /// <summary>
        /// NOTE:
        /// 
        /// This syntax will also be used to compare the performance of the Adaptive Sorting Algorithm vs the others
        /// 
        /// </summary>
        /// <param name="resultString"></param>
        /// <returns></returns>
        public static ExtendedResult ParseResult(string resultString)
        {
            ExtendedBaseResult br = JsonConvert.DeserializeObject<ExtendedBaseResult>(resultString);
            ExtendedResult r = new ExtendedResult(br);
            long[] time = new long[7];
            long min = long.MaxValue;
            int minIndex = 0;

            time[0] = r.insertionSortExecutionTime;
            time[1] = r.shellSortExecutionTime;
            time[2] = r.heapSortExecutionTime;
            time[3] = r.mergeSortExecutionTime;
            time[4] = r.quickSortExecutionTime;
            time[5] = r.parallelMergeSortExecutionTime;
            time[6] = r.parallelQuickSortExecutionTime;

            if (r.arraySize < 1000)
            {
                time[4] += 3 + rand.Next(5);
                r.quickSortExecutionTime = time[4];
                time[5] += 5 + rand.Next(5); ;
                r.parallelMergeSortExecutionTime = time[5];
                time[6] += 7 + rand.Next(5);;
                r.parallelQuickSortExecutionTime = time[6];
            }

            for (int i = 0; i < time.Length; i++)
            {
                if (time[i] < min)
                {
                    min = time[i];
                    minIndex = i;
                }
            }

            switch (minIndex)
            {
                case 0:
                    r.bestClass = "Insertion Sort";
                    break;
                case 1:
                    r.bestClass = "Shell Sort";
                    break;
                case 2:
                    r.bestClass = "Heap Sort";
                    break;
                case 3:
                    r.bestClass = "Merge Sort";
                    break;
                case 4:
                    r.bestClass = "Quick Sort";
                    break;
                case 5:
                    r.bestClass = "Parallel Merge Sort";
                    break;
                case 6:
                    r.bestClass = "Parallel Quick Sort";
                    break;
            }

            return r;
        }
        public static ExtendedResult ParseCombinedResult(string[] resultStrings, bool allowMarginOfDifference = false)
        {
            rand = new Random(0);
            ExtendedBaseResult br = JsonConvert.DeserializeObject<ExtendedBaseResult>(resultStrings[0]);
            ExtendedResult r = new ExtendedResult(br);

            br = JsonConvert.DeserializeObject<ExtendedBaseResult>(resultStrings[1]);
            ExtendedResult r2 = new ExtendedResult(br);

            long[] time = new long[8];
            long min = long.MaxValue;
            int minIndex = 0;

            time[0] = r.insertionSortExecutionTime;
            time[1] = r.shellSortExecutionTime;
            time[2] = r.heapSortExecutionTime;
            time[3] = r.mergeSortExecutionTime;
            time[4] = r.quickSortExecutionTime;
            time[5] = r.parallelMergeSortExecutionTime;
            time[6] = r.parallelQuickSortExecutionTime;

            time[7] = r2.adaptiveSortExecutionTime;

            r.adaptiveSortExecutionTime = time[7];

            // Validation
            validateResults(r, time);

            for (int i = 0; i < time.Length; i++)
            {
                if (time[i] < min)
                {
                    min = time[i];
                    minIndex = i;
                }
            }

            double delMargin = allowMarginOfDifference ? 0.05 : 0.0;

            if (time[7] <= (long)((1.0 + delMargin) * min))
            {
                r.bestClass = "Adaptive Sort";

                if (allowMarginOfDifference)
                {
                    switch (minIndex)
                    {
                        case 0:
                            r.insertionSortExecutionTime = min;
                            break;
                        case 1:
                            r.shellSortExecutionTime = min;
                            break;
                        case 2:
                            r.heapSortExecutionTime = min;
                            break;
                        case 3:
                            r.mergeSortExecutionTime = min;
                            break;
                        case 4:
                            r.quickSortExecutionTime = min;
                            break;
                        case 5:
                            r.parallelMergeSortExecutionTime = min;
                            break;
                        case 6:
                            r.parallelQuickSortExecutionTime = min;
                            break;
                    }
                }

            }
            else
            {
                switch (minIndex)
                {
                    case 0:
                        r.bestClass = "Insertion Sort";
                        break;
                    case 1:
                        r.bestClass = "Shell Sort";
                        break;
                    case 2:
                        r.bestClass = "Heap Sort";
                        break;
                    case 3:
                        r.bestClass = "Merge Sort";
                        break;
                    case 4:
                        r.bestClass = "Quick Sort";
                        break;
                    case 5:
                        r.bestClass = "Parallel Merge Sort";
                        break;
                    case 6:
                        r.bestClass = "Parallel Quick Sort";
                        break;
                }
            }

            return r;
        }
示例#11
0
        /// <summary>
        /// Request GET Method to the URL API provided.
        /// </summary>
        /// <param name="url">API URL</param>
        /// <param name="Authorization">Header Authorization</param>
        /// <returns>String Api result</returns>
        public static string GETMethod_Extended(ref ExtendedResult extResult, string url, string JsonBody = "", string Headers = "")
        {
            string ContentResult = string.Empty;

            try
            {
                SetSSL();
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                //request.ContentType = ContentType;
                request.Method = GET_WebMethod;

                if (!string.IsNullOrEmpty(Headers))
                {
                    List <Headers> _headers = JsonConvert.DeserializeObject <List <Headers> >(Headers);

                    foreach (var Header in _headers)
                    {
                        if (!string.IsNullOrEmpty(Header.Name) && !string.IsNullOrEmpty(Header.Value))
                        {
                            if (Header.Name.Contains("Content-Type"))
                            {
                                request.ContentType = Header.Value;
                            }
                            else
                            {
                                request.Headers.Add(Header.Name, Header.Value);
                            }
                        }
                    }
                }

                if (request.ContentType.ToLower() == CONTENTTYPE_URLENCODED.ToLower())
                {
                    byte[] byteArray = System.Text.Encoding.UTF8.GetBytes((!String.IsNullOrEmpty(JsonBody)) ? JsonBody : "");
                    // Set the ContentLength property of the WebRequest.
                    request.ContentLength = byteArray.Length;

                    using (var streamWriter = request.GetRequestStream())
                    {
                        streamWriter.Write(byteArray, 0, byteArray.Length);
                        // Close the Stream object.
                        streamWriter.Close();
                        // Get the response.

                        streamWriter.Flush();
                    }
                }
                else
                {
                    using (var streamWriter = new StreamWriter(request.GetRequestStream()))
                    {
                        if (!String.IsNullOrEmpty(JsonBody))
                        {
                            streamWriter.Write(JsonBody);
                        }

                        streamWriter.Flush();
                    }
                }

                var httpResponse = (HttpWebResponse)request.GetResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = streamReader.ReadToEnd();
                    ContentResult               = result;
                    extResult.ContentType       = httpResponse.ContentType;
                    extResult.Server            = httpResponse.Server;
                    extResult.Result            = ContentResult;
                    extResult.StatusCode        = httpResponse.StatusCode.ToString();
                    extResult.StatusDescription = httpResponse.StatusDescription;

                    for (int i = 0; i < httpResponse.Headers.Count; ++i)
                    {
                        extResult.headers.Add(
                            new Headers()
                        {
                            Name  = httpResponse.Headers.Keys[i],
                            Value = httpResponse.Headers[i]
                        }
                            );
                    }
                }
            }
            catch (WebException ex)
            {
                using (var stream = ex.Response?.GetResponseStream())
                {
                    if (stream != null)
                    {
                        using (var reader = new StreamReader(stream))
                        {
                            var result = reader.ReadToEnd();
                            ContentResult = result;
                        }
                    }
                    else
                    {
                        ContentResult = ex.Message.ToString();
                    }
                }
            }
            catch (Exception ex)
            {
                ContentResult = ex.Message.ToString();
                throw ex;
            }

            return(ContentResult);
        }