public static int StringToInt(string numStr, NumberSystem numberSystem)
            {
                var numberTable = GetNumberTable(numberSystem);

                if (numberTable == null)
                {
                    throw new NotSupportedException($"找不到{numberSystem.ToString()}的算法");
                }

                var len = numberTable.Length;
                var num = 0;

                foreach (var n in numStr)
                {
                    if (num == 0)
                    {
                        num = numberTable.IndexOf(n);
                    }
                    else
                    {
                        num = (num * len) + numberTable.IndexOf(n);
                    }
                }

                return(num);
            }
Example #2
0
        public void GetNumberSystemErrorMessage(NumberSystem numberSystem)
        {
            // arrange

            // act
            var result = NumberConversionStrategy.GetNumberSystemErrorMessage(numberSystem);

            // assert
            Assert.Contains(numberSystem.ToString(), result);
        }
Example #3
0
        public Response AnalyzeNumber(int numberOfColumn)
        {
            _numberOfColumn      = numberOfColumn;
            _currentNumberSystem = NumberSystem.Decimal;
            int              currentLvl = 0;
            string           currentStr = _textReader.GetCurrentStr();
            NumberComponents component  = NumberComponents.Integer;

            component  = GetComponentFromChar(currentStr[_numberOfColumn]);
            currentLvl = _table[currentLvl][component];
            while (!IsFinalLvl(currentLvl) && _numberOfColumn < currentStr.Length)
            {
                _number += currentStr[_numberOfColumn];
                _numberOfColumn++;
                if (_numberOfColumn < currentStr.Length)
                {
                    component  = GetComponentFromChar(currentStr[_numberOfColumn]);
                    currentLvl = _table[currentLvl][component];
                }
                else
                {
                    component  = NumberComponents.Separator;
                    currentLvl = _table[currentLvl][component];
                }
            }

            Response response = new Response();

            response.numberOfColumn = numberOfColumn + 1;

            response.numberStr    = _textReader.GetNumberStr();
            response.numberSystem = _currentNumberSystem.ToString();
            response.value        = _number;
            response.state        = GetStateFromComponent(currentLvl);
            while (response.state == States.Error && currentStr[_numberOfColumn] != ' ')
            {
                response.value += currentStr[_numberOfColumn];
                _numberOfColumn++;
                if (_numberOfColumn >= currentStr.Length)
                {
                    break;
                }
            }
            response.numberOfCurColumn = _numberOfColumn;
            _number = "";
            return(response);
        }
Example #4
0
        public void Convert_WithValidFormatError(
            string initialEntry,
            NumberSystem initialEntrySystem)
        {
            // arrange
            var converter = new NumberConverterViewModel
            {
                EntryValue        = initialEntry,
                EntryNumberSystem = initialEntrySystem,
            };

            // act
            converter.Convert();

            // assert
            Assert.Null(converter.ResultValue);
            Assert.Contains(initialEntrySystem.ToString(), converter.ErrorMessage);
            Assert.True(converter.HasError);
        }