Fix copy-pasting result computed by the calculator gives "Invalid input" (#1444)

* Remove exponent value from operand length

* Copy paste test with boundary exponential numbers.
This commit is contained in:
Chaitanya Mehta 2020-12-17 13:15:24 -05:00 committed by GitHub
parent 3172f7fea2
commit 7d8803dd1a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 5 deletions

View File

@ -502,23 +502,32 @@ ULONG32 CopyPasteManager::StandardScientificOperandLength(Platform::String ^ ope
{
auto operandWstring = wstring(operand->Data());
const bool hasDecimal = operandWstring.find('.') != wstring::npos;
auto length = operandWstring.length();
if (hasDecimal)
{
if (operandWstring.length() >= 2)
if (length >= 2)
{
if ((operandWstring[0] == L'0') && (operandWstring[1] == L'.'))
{
return static_cast<ULONG32>(operandWstring.length() - 2);
length -= 2;
}
else
{
return static_cast<ULONG32>(operandWstring.length() - 1);
length -= 1;
}
}
}
return static_cast<ULONG32>(operandWstring.length());
auto exponentPos = operandWstring.find('e');
const bool hasExponent = exponentPos != wstring::npos;
if (hasExponent)
{
auto expLength = operandWstring.substr(exponentPos).length();
length -= expLength;
}
return static_cast<ULONG32>(length);
}
ULONG32 CopyPasteManager::ProgrammerOperandLength(Platform::String ^ operand, NumberBase numberBase)

View File

@ -825,9 +825,13 @@ namespace CalculatorUnitTests
L"12^2",
L"-12.12^-2",
L"61%99"
L"-6.1%99" };
L"-6.1%99",
L"1.1111111111111111111111111111111e+1142" };
String
^ negativeInput[] = { L"abcdef", L"xyz", L"ABab", L"e+234", L"123456789123456781234567890123456" /*boundary condition: greater than 32 digits*/,
L"11.1111111111111111111111111111111e+1142",
L"1.1e+10001", /*boundary condition: exponent greater than 5 digits*/
L"0.11111111111111111111111111111111111e+111111" /*boundary condition: both exponent and non exponent exceed limits*/
L"SIN(2)", L"2+2==", L"2=+2" };
ASSERT_POSITIVE_TESTCASES(ValidateScientificPasteExpression, positiveInput);