コード例 #1
0
        public void DivisionTest()
        {
            var(div, remaining) = NumberWork.GetSufficientPartForDivision(1306, 16);

            Assert.Equal(130, div);
            Assert.Equal(6, remaining);

            (div, remaining) = NumberWork.GetSufficientPartForDivision(3, 2);

            Assert.Equal(3, div);
            Assert.Equal(-1, remaining);
        }
コード例 #2
0
        public void GetFirstDigitTest()
        {
            var(digit, remaining) = NumberWork.GetFirstDigit(3458977);

            Assert.Equal(3, digit);
            Assert.Equal(458977, remaining);

            (digit, remaining) = NumberWork.GetFirstDigit(7);

            Assert.Equal(7, digit);
            Assert.Equal(-1, remaining);

            (digit, remaining) = NumberWork.GetFirstDigit(0);

            Assert.Equal(0, digit);
            Assert.Equal(-1, remaining);
        }
コード例 #3
0
        public View BuildViewByModel(Model model)
        {
            View view = new View();

            int  degree    = NumberWork.GetMostRoundingDegree(model.First, model.Second);
            long xArg      = (long)(model.First * NumberWork.Pow(10, degree));
            long yArg      = (long)(model.Second * NumberWork.Pow(10, degree));
            int  maxLength = NumberWork.GetMaxLength(xArg, yArg);

            view.AddLine(makeIndent(Indent) + xArg);
            view.AddLine(makeIndent(Indent + maxLength - NumberWork.NumLength(yArg)) + yArg);
            view.AddLine(makeIndent(Indent) + makeLine(maxLength));

            foreach (var component in model.Components)
            {
                view.AddLine(makeIndent(Indent + maxLength - NumberWork.NumLength(component)) + component);
            }

            view.AddLine(makeIndent(Indent) + makeLine(maxLength));
            view.AddLine(makeIndent(Indent) + model.Result);

            return(view);
        }
コード例 #4
0
        private long[] computeComponents()
        {
            int  degree    = NumberWork.GetMostRoundingDegree(First, Second);
            long xArg      = (long)(First * NumberWork.Pow(10, degree));
            long yArg      = (long)(Second * NumberWork.Pow(10, degree));
            int  maxLength = NumberWork.GetMaxLength(xArg, yArg);

            long[] components = new long[maxLength];

            if (NumberWork.NumLength(xArg) < NumberWork.NumLength(yArg))
            {
                Util.Swap(ref xArg, ref yArg);
            }

            long[] xComps = NumberWork.GetNumberComponents(xArg);
            long[] yComps = NumberWork.GetNumberComponents(yArg);

            for (int i = 0; i < maxLength; i++)
            {
                components[i] = xComps[i] + (i < yComps.Length ? yComps[i] : 0);
            }

            return(components);
        }
コード例 #5
0
 public void RoundingDegreeTest()
 {
     Assert.Equal(2, NumberWork.GetMostRoundingDegree(13.6, 12.75));
     Assert.Equal(1, NumberWork.GetMostRoundingDegree(13.6, 10));
     Assert.Equal(0, NumberWork.GetMostRoundingDegree(10, 20));
 }
コード例 #6
0
 public void GetMaxLengthTest()
 {
     Assert.Equal(6, NumberWork.GetMaxLength(345, 867_498));
     Assert.Equal(3, NumberWork.GetMaxLength(0, 756));
 }
コード例 #7
0
 public void NumLengthTest()
 {
     Assert.Equal(3, NumberWork.NumLength(567));
 }
コード例 #8
0
 public void ConcatTest()
 {
     Assert.Equal(346, NumberWork.Concat(3, 46));
     Assert.Equal(346, NumberWork.Concat(34, 6));
     Assert.Equal(35_468, NumberWork.Concat(35, 468));
 }