Example #1
0
        public void Calculate_ShouldReturnXPosWhereFunctionResultIsMinimum()
        {
            var functionHandler = new SingleVarFunc("2 * x ^ 2 - 12 * x");
            var goldenRatio     = new GoldenRatio(new Interval(0, 10), 1, functionHandler);

            var result = Math.Round(goldenRatio.Calculate() * 100) / 100;

            Assert.AreEqual(2.81, result);
        }
 public void ResetAll()
 {
     Uniform.Reset();
     Gaussian.Reset();
     DoubleGaussian.Reset();
     Exponential.Reset();
     Triangular.Reset();
     Sequence.Reset();
     Grid.Reset();
     Perlin.Reset();
     GoldenRatio.Reset();
 }
        public void CanCalculateGoldenRatioPrecision()
        {
            var golden = GoldenRatio.Value.ToString();

            for (var x = 1; x < golden.Length; x++)
            {
                var test = Convert.ToDecimal(golden.Substring(0, x));

                var expected = x > 1 ? x - 1 : x;
                var result   = GoldenRatio.Precision(test);

                Assert.Equal(expected, result);
            }
        }
Example #4
0
    public void printTest(float longSide, float shortSide)
    {
        StringBuilder sb = new StringBuilder();

        sb.Append("\n").Append(longSide + " and " + shortSide);

        sb.Append("\n").Append("phi = " + GoldenRatio.phi);
        sb.Append("\n").Append("Phi = " + GoldenRatio.Phi);

        sb.Append("\n").Append("Long side of " + longSide + " : " + GoldenRatio.LongSideOf(longSide) + "   -->  " + longSide.LongSideOfLengthGoldenRatio());
        sb.Append("\n").Append("Shortside of " + longSide + " : " + GoldenRatio.ShortSideOf(longSide) + "   -->  " + longSide.ShortSideOfLengthGoldenRatio());


        sb.Append("\n").Append("Long side of " + shortSide + " : " + GoldenRatio.LongSideOf(shortSide) + "   -->  " + shortSide.LongSideOfLengthGoldenRatio());
        sb.Append("\n").Append("Shortside of " + shortSide + " : " + GoldenRatio.ShortSideOf(shortSide) + "   -->  " + shortSide.ShortSideOfLengthGoldenRatio());

        sb.Append("\n").Append("Long side for " + longSide + " : " + GoldenRatio.LongSideFor(longSide) + "   -->  " + longSide.LongSideForShortSideGoldenRatio());
        sb.Append("\n").Append("Shortside for " + longSide + " : " + GoldenRatio.ShortSideFor(longSide) + "   -->  " + longSide.ShortSideForLongSideGoldenRatio());

        sb.Append("\n").Append("Long side for " + shortSide + " : " + GoldenRatio.LongSideFor(shortSide) + "   -->  " + shortSide.LongSideForShortSideGoldenRatio());
        sb.Append("\n").Append("Shortside for " + shortSide + " : " + GoldenRatio.ShortSideFor(shortSide) + "   -->  " + shortSide.ShortSideForLongSideGoldenRatio());

        sb.Append("\n").Append(longSide + " and " + shortSide + " GoldenRatio ? " + GoldenRatio.IsGoldenRatio(longSide, shortSide));
        sb.Append("\n").Append(longSide + " and " + shortSide + " GoldenRatio ? " + GoldenRatio.IsGoldenRatio(shortSide, longSide));

        sb.Append("\n").Append("Approx: " + longSide + " and " + shortSide + " GoldenRatio ? " + GoldenRatio.IsGoldenRatio(longSide, shortSide));
        sb.Append("\n").Append("Approx: " + longSide + " and " + shortSide + " GoldenRatio ? " + GoldenRatio.IsGoldenRatio(shortSide, longSide));

        sb.Append("\n").Append("Rounded 0: " + longSide + " and " + shortSide + " GoldenRatio ? " + GoldenRatio.IsGoldenRatio(longSide, shortSide, 0));
        sb.Append("\n").Append("Rounded 0: " + longSide + " and " + shortSide + " GoldenRatio ? " + GoldenRatio.IsGoldenRatio(shortSide, longSide, 0));

        sb.Append("\n").Append("Rounded 2: " + longSide + " and " + shortSide + " GoldenRatio ? " + GoldenRatio.IsGoldenRatio(longSide, shortSide, 2));
        sb.Append("\n").Append("Rounded 2: " + longSide + " and " + shortSide + " GoldenRatio ? " + GoldenRatio.IsGoldenRatio(shortSide, longSide, 2));

        sb.Append("\n").Append("Rounded 8: " + longSide + " and " + shortSide + " GoldenRatio ? " + GoldenRatio.IsGoldenRatio(longSide, shortSide, 8));
        sb.Append("\n").Append("Rounded 8: " + longSide + " and " + shortSide + " GoldenRatio ? " + GoldenRatio.IsGoldenRatio(shortSide, longSide, 8));


        sb.Append("\n").Append("ShortSide for " + longSide + " = " + GoldenRatio.ShortSideFor(longSide));
        sb.Append("\n").Append("LongSide for " + shortSide + " = " + GoldenRatio.LongSideFor(shortSide));

        Debug.Log(sb.ToString());
    }
 public void PrecisionCalculationStopsWhenTheFirstValueDoesntMatch()
 => Assert.Equal(0, GoldenRatio.Precision(0.618m));
 public void PrecisionCalculationReturnsZeroWhenNoMatch(decimal value)
 => Assert.Equal(0, GoldenRatio.Precision(value));
 public void PrecisionCalculationIsAccurateEvenWithExtraNumbersAfterPrecision()
 => Assert.Equal(3, GoldenRatio.Precision(1.617m));
 public void PrecisionPercentageDividesAgainstMax()
 => Assert.Equal(5 / GoldenRatio.MaxPrecision, GoldenRatio.Percentage(5));
Example #9
0
 /// <summary>
 /// <para> o--------------------o----given---o </para>
 /// <para> |-----------------?---------------| </para>
 /// </summary>
 /// <param name="length"></param>
 /// <returns></returns>
 public static float LengthForShortSideGoldenRatio(this float shortSide)
 {
     return(GoldenRatio.LengthForShortSide(shortSide));
 }
Example #10
0
 /// <summary>
 /// <para> o--------given-------o------------o </para>
 /// <para> |-----------------?---------------| </para>
 /// </summary>
 /// <param name="length"></param>
 /// <returns></returns>
 public static float LengthForLongSideGoldenRatio(this float longSide)
 {
     return(GoldenRatio.LengthForLongSide(longSide));
 }
Example #11
0
 /// <summary>
 /// <para> o--------given-------o------?-----o </para>
 /// </summary>
 /// <param name="longSide"></param>
 /// <returns></returns>
 public static float ShortSideForLongSideGoldenRatio(this float longSide)
 {
     return(GoldenRatio.ShortSideFor(longSide));
 }
Example #12
0
 /// <summary>
 /// <para> o----------?---------o----given---o </para>
 /// </summary>
 /// <param name="shortSide"></param>
 /// <returns></returns>
 public static float LongSideForShortSideGoldenRatio(this float shortSide)
 {
     return(GoldenRatio.LongSideFor(shortSide));
 }
Example #13
0
 /// <summary>
 /// <para> o--------------------o------?-----o </para>
 /// <para> |-------------length--------------| </para>
 /// </summary>
 /// <param name="length"></param>
 /// <returns></returns>
 public static float ShortSideOfLengthGoldenRatio(this float length)
 {
     return(GoldenRatio.ShortSideOf(length));
 }
Example #14
0
 /// <summary>
 /// <para> o----------?---------o------------o </para>
 /// <para> |-------------length--------------| </para>
 /// </summary>
 /// <param name="length"></param>
 /// <returns></returns>
 public static float LongSideOfLengthGoldenRatio(this float length)
 {
     return(GoldenRatio.LongSideOf(length));
 }
Example #15
0
    private void WorkerStatusGUI()
    {
        EditorGUILayout.BeginVertical();

        zoomFactor = EditorGUILayout.Slider("Zoom", zoomFactor, 0.000001f, 0.25f);
        autoScroll = EditorGUILayout.ToggleLeft("AutoScroll", autoScroll);

        #region StatusBar
        // Count number of Job-Todos
        int todoCount = 0;
        foreach (StatusUpdateMessage item in SimpleClient.jobStatus.Values)
        {
            foreach (TodoItem cildItem in item.childDict.Values)
            {
                foreach (TodoItem childTodo in cildItem.childDict.Values)
                {
                    todoCount++;
                }
                todoCount++;
            }
            todoCount++;
        }

        // Calculate %-Step
        float step;
        if (SimpleClient.jobStatus.Values.Count > 0)
        {
            step = 1f / todoCount;
        }
        else
        {
            step = 0;
        }

        // Determine how many Job-Todos have been done
        float complete = 0;
        foreach (StatusUpdateMessage item in SimpleClient.jobStatus.Values)
        {
            foreach (TodoItem cildItem in item.childDict.Values)
            {
                foreach (TodoItem childTodo in cildItem.childDict.Values)
                {
                    if (childTodo.status == Status.DONE)
                    {
                        complete += step;
                    }
                }
                if (cildItem.status == Status.DONE)
                {
                    complete += step;
                }
            }
            if (item.status == Status.DONE)
            {
                complete += step;
            }
        }

        EditorGUILayout.LabelField("", GUILayout.Height(20));
        EditorGUI.ProgressBar(new Rect(0, 90, this.position.width - 200, 20), complete, (int)(complete * 100) + " % ");
        #endregion // Statusbar

        #region Timer
        string timer;
        if (stopTime == null)
        {
            timer = startTime != null?startTime.Duration() : "00:00:00.000";
        }
        else
        {
            timer = TimeStamp.Duration(TimeStamp.Duration(startTime, stopTime));
        }

        if (timerFontStyle == null)
        {
            timerFontStyle.font     = (Font)Resources.Load("digitalmono");
            timerFontStyle.fontSize = 34;
        }
        EditorGUI.LabelField(new Rect(this.position.width - 190, 85, 180, 20), timer, timerFontStyle);
        #endregion // Timer

        EditorGUILayout.EndVertical();
        GUILayout.Space(10f);
        //Rect lastRect = GUILayoutUtility.GetLastRect();
        //Debug.Log(lastRect);
        float panelOffset = 120;

        float autoScrollPosition = this.position.width - GoldenRatio.LongSideOf(this.position.width);

        float panelWidth = this.position.width - border;
        if (startTime != null)
        {
            panelWidth = Mathf.Max((float)TimeStamp.DurationInMillis(startTime, TimeStamp.Now()) * zoomFactor + autoScrollPosition, this.position.width - border);
        }
        if (stopTime != null)
        {
            panelWidth = Mathf.Min((float)TimeStamp.DurationInMillis(startTime, stopTime) * zoomFactor + autoScrollPosition, panelWidth);
        }

        int jobCount = SimpleClient.jobStatus.Values.Count;

        float panelHeight = jobCount * (4 * height + 4 * separator + 2 * padding) + yOffset;

        using (EditorGUILayout.ScrollViewScope scrollView = new EditorGUILayout.ScrollViewScope(scrollPos, false, false, GUILayout.Width(this.position.width), GUILayout.Height(this.position.height - panelOffset)))
        {
            scrollPos = scrollView.scrollPosition;

            EditorGUILayout.LabelField("", darkgrey, GUILayout.Width(panelWidth), GUILayout.Height(panelHeight));


            if (autoScroll)
            {
                scrollPos.x = Mathf.Infinity;
            }

            float now = xOffset;
            if (startTime != null)
            {
                now = (float)TimeStamp.DurationInMillis(startTime, TimeStamp.Now()) * zoomFactor + xOffset;
            }

            if (generateLocal)
            {
                float y = 0f;
                y += yOffset;
                foreach (StatusUpdateMessage item in SimpleClient.jobStatus.Values)
                {
                    y += separator;
                    TodoItem worker = item.Get(Job.Worker);

                    DrawJobItemBar(item, y);
                    y += padding;

                    y += height + separator;
                    DrawTodoItemBar(worker, y);
                    foreach (string todo in worker.childTodos)
                    {
                        DrawTodoItemBar(worker.childDict[todo], y);
                    }

                    y += height;
                    y += padding;
                    y += separator;
                }
            }
            else
            {
                float y = 0f;
                y += yOffset;
                foreach (StatusUpdateMessage item in SimpleClient.jobStatus.Values)
                {
                    y += separator;
                    TodoItem master   = item.Get(Job.Master);
                    TodoItem transfer = item.Get(Job.Transfer);
                    TodoItem worker   = item.Get(Job.Worker);

                    DrawJobItemBar(item, y);
                    y += padding;
                    DrawTodoItemBar(master, y);
                    foreach (string todo in master.childTodos)
                    {
                        DrawTodoItemBar(master.childDict[todo], y);
                    }

                    y += height + separator;
                    foreach (string todo in transfer.childTodos)
                    {
                        DrawTodoItemBar(transfer.childDict[todo], y);
                    }

                    y += height + separator;
                    DrawTodoItemBar(worker, y);
                    foreach (string todo in worker.childTodos)
                    {
                        DrawTodoItemBar(worker.childDict[todo], y);
                    }

                    y += height;
                    y += padding;
                    y += separator;
                }
            }
            if (stopTime == null)
            {
                CustomGUIUtils.DrawBox(new Rect(now, 0, 1, panelHeight), Color.black);
            }

            #region Draw Time indicators
            if (1000 * zoomFactor > 20)
            {
                for (float x = 0; x < panelWidth; x += (1000 * zoomFactor))
                {
                    CustomGUIUtils.DrawBox(new Rect(x, 0, 1, panelHeight), Color.grey);
                }
            }

            if (15000 * zoomFactor > 20)
            {
                for (float x = 0; x < panelWidth; x += (15000 * zoomFactor))
                {
                    CustomGUIUtils.DrawBox(new Rect(x, 0, 1, panelHeight), XKCDColors.LightRed);
                }
            }

            for (float x = 0; x < panelWidth; x += (60000 * zoomFactor))
            {
                CustomGUIUtils.DrawBox(new Rect(x, 0, 1, panelHeight), Color.red);
            }
            #endregion // Draw time indicators
        }
        Repaint();
    }