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); }
public void GetNumberSystemErrorMessage(NumberSystem numberSystem) { // arrange // act var result = NumberConversionStrategy.GetNumberSystemErrorMessage(numberSystem); // assert Assert.Contains(numberSystem.ToString(), result); }
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); }
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); }