Merge remote-tracking branch 'upstream/master' into settings

This commit is contained in:
Eric Tian 2021-06-12 13:32:41 -07:00
commit dd591f5c50
74 changed files with 968 additions and 1003 deletions

View file

@ -0,0 +1,41 @@
#
# Continuous Integration (CI) - Internal
# This pipeline builds and validate the app for all supported architectures, in a production
# configuration. This pipeline relies on Microsoft-internal resources to run.
#
trigger:
- master
- release/*
- feature/*
pr: none
name: 0.$(Date:yyMM).$(DayOfMonth)$(Rev:rr).0
jobs:
- template: ./templates/build-app-internal.yaml
parameters:
platform: x64
- template: ./templates/build-app-internal.yaml
parameters:
platform: x86
- template: ./templates/build-app-internal.yaml
parameters:
platform: ARM
- template: ./templates/run-ui-tests.yaml
parameters:
platform: x64
runsettingsFileName: CalculatorUITests.release.runsettings
- template: ./templates/run-unit-tests.yaml
parameters:
platform: x64
- template: ./templates/run-unit-tests.yaml
parameters:
platform: x86
- template: ./templates/package-appxbundle.yaml

View file

@ -1,7 +1,7 @@
# #
# Continuous Integration (CI) # Continuous Integration (CI)
# This pipeline builds and validate the app in all supported configurations. If the build was # This pipeline builds and validate the app for all supported architecutres, in a public
# queued to validate a pull request, we build and test only x64. # configuration. If the build was queued to validate a pull request, we build and test only x64.
# #
trigger: trigger:

View file

@ -13,6 +13,7 @@ schedules:
branches: branches:
include: include:
- master - master
always: true
trigger: none trigger: none
pr: none pr: none

View file

@ -16,8 +16,8 @@ pr: none
variables: variables:
versionMajor: 10 versionMajor: 10
versionMinor: 2102 versionMinor: 2103
versionBuild: $[counter('10.2102.*', 0)] versionBuild: $[counter('10.2103.*', 0)]
versionPatch: 0 versionPatch: 0
name: '$(versionMajor).$(versionMinor).$(versionBuild).$(versionPatch)' name: '$(versionMajor).$(versionMinor).$(versionBuild).$(versionPatch)'

View file

@ -105,7 +105,7 @@ jobs:
- task: MS-RDX-MRO.windows-store-publish-dev.package-task.store-package@2 - task: MS-RDX-MRO.windows-store-publish-dev.package-task.store-package@2
displayName: Create StoreBroker Payload displayName: Create StoreBroker Payload
inputs: inputs:
serviceEndpoint: StoreBrokerProxy serviceEndpoint: Calculator StoreBroker Connection
sbConfigPath: Tools/Build/StoreBroker/SBCalculatorConfig.json sbConfigPath: Tools/Build/StoreBroker/SBCalculatorConfig.json
sourceFolder: $(Build.ArtifactStagingDirectory)/appxBundleSigned sourceFolder: $(Build.ArtifactStagingDirectory)/appxBundleSigned
contents: Microsoft.WindowsCalculator_8wekyb3d8bbwe.appxbundle contents: Microsoft.WindowsCalculator_8wekyb3d8bbwe.appxbundle
@ -125,7 +125,7 @@ jobs:
displayName: 'Flight StoreBroker Payload to team ring' displayName: 'Flight StoreBroker Payload to team ring'
name: StoreBrokerFlight name: StoreBrokerFlight
inputs: inputs:
serviceEndpoint: StoreBrokerProxy serviceEndpoint: Calculator StoreBroker Connection
appId: '$(AppId)' appId: '$(AppId)'
flightId: '$(FlightId)' flightId: '$(FlightId)'
inputMethod: JsonAndZip inputMethod: JsonAndZip
@ -149,8 +149,3 @@ jobs:
SubmissionDataPath: '$(SBPackagePath)\SBCalculator.json' SubmissionDataPath: '$(SBPackagePath)\SBCalculator.json'
PackagePath: '$(SBPackagePath)\SBCalculator.zip' PackagePath: '$(SBPackagePath)\SBCalculator.zip'
AeroEnvironment: Production AeroEnvironment: Production
- task: PkgESLateTasks@10
displayName: Run PackageES LateTasks
env:
XES_DISABLEPROV: true

View file

@ -4,11 +4,12 @@ Windows Calculator is under active development by Microsoft.
## Focus ## Focus
In 2020, the Windows Calculator team is focused on: In 2021, the Windows Calculator team is focused on:
* Iterating upon the existing app design based on the latest guidelines for [Fluent Design](https://developer.microsoft.com/en-us/windows/apps/design), [Windows 10X dual-screen devices](https://docs.microsoft.com/en-us/dual-screen/windows/), and [WinUI 3.0](https://github.com/microsoft/microsoft-ui-xaml). * Iterating upon the existing app design based on the latest guidelines for [Fluent Design](https://developer.microsoft.com/en-us/windows/apps/design) and [WinUI](https://github.com/microsoft/microsoft-ui-xaml).
* Unblocking community contributions by identifying and addressing bottlenecks affecting developers, including migrating portions of the codebase to C# ([#893](https://github.com/microsoft/calculator/issues/893)) and adding a settings page ([#596](https://github.com/microsoft/calculator/issues/596)). * Unblocking community contributions by identifying and addressing bottlenecks affecting developers, including:
* Addressing top user pain points, including clearing up confusion around how Standard Calculator behaves ([#138](https://github.com/microsoft/calculator/issues/138)) and fixing hidden characters in copied results ([#504](https://github.com/microsoft/calculator/issues/504)). * Migrating the codebase to C# ([#893](https://github.com/microsoft/calculator/issues/893))
* Investigating unit converter improvements ([#379](https://github.com/microsoft/calculator/issues/379), [#589](https://github.com/microsoft/calculator/issues/589) and [#594](https://github.com/microsoft/calculator/issues/594)) * Releasing infinite-precision engine as standalone package ([#1545](https://github.com/microsoft/calculator/issues/1545)) and adding support for arbitrary expression parsing ([#526](https://github.com/microsoft/calculator/issues/526))
* Adding a settings page ([#596](https://github.com/microsoft/calculator/issues/596))
* [Your feature idea here] - please review our [new feature development process](https://github.com/Microsoft/calculator/blob/master/docs/NewFeatureProcess.md) to get started! * [Your feature idea here] - please review our [new feature development process](https://github.com/Microsoft/calculator/blob/master/docs/NewFeatureProcess.md) to get started!
We welcome contributions of all kinds from the community, but especially those that support the efforts above. Please see our [contributing guidelines](https://github.com/Microsoft/calculator/blob/master/CONTRIBUTING.md) for more information on how to get involved. We welcome contributions of all kinds from the community, but especially those that support the efforts above. Please see our [contributing guidelines](https://github.com/Microsoft/calculator/blob/master/CONTRIBUTING.md) for more information on how to get involved.

View file

@ -52,8 +52,8 @@ namespace CalcEngine
Rational::Rational(uint64_t ui) Rational::Rational(uint64_t ui)
{ {
uint32_t hi = (uint32_t) (((ui) >> 32) & 0xffffffff); uint32_t hi = (uint32_t)(((ui) >> 32) & 0xffffffff);
uint32_t lo = (uint32_t) ui; uint32_t lo = (uint32_t)ui;
Rational temp = (Rational{ hi } << 32) | lo; Rational temp = (Rational{ hi } << 32) | lo;

View file

@ -31,13 +31,8 @@ namespace
// 0 is returned. Higher the number, higher the precedence of the operator. // 0 is returned. Higher the number, higher the precedence of the operator.
int NPrecedenceOfOp(int nopCode) int NPrecedenceOfOp(int nopCode)
{ {
static uint16_t rgbPrec[] = { static uint16_t rgbPrec[] = { 0, 0, IDC_OR, 0, IDC_XOR, 0, IDC_AND, 1, IDC_NAND, 1, IDC_NOR, 1, IDC_ADD, 2, IDC_SUB, 2, IDC_RSHF, 3,
0,0, IDC_OR,0, IDC_XOR,0, IDC_LSHF, 3, IDC_RSHFL, 3, IDC_MOD, 3, IDC_DIV, 3, IDC_MUL, 3, IDC_PWR, 4, IDC_ROOT, 4, IDC_LOGBASEY, 4 };
IDC_AND,1, IDC_NAND,1, IDC_NOR,1,
IDC_ADD,2, IDC_SUB,2,
IDC_RSHF,3, IDC_LSHF,3, IDC_RSHFL,3,
IDC_MOD,3, IDC_DIV,3, IDC_MUL,3,
IDC_PWR,4, IDC_ROOT,4, IDC_LOGBASEY,4 };
for (unsigned int iPrec = 0; iPrec < size(rgbPrec); iPrec += 2) for (unsigned int iPrec = 0; iPrec < size(rgbPrec); iPrec += 2)
{ {
@ -85,8 +80,7 @@ void CCalcEngine::ClearDisplay()
{ {
if (nullptr != m_pCalcDisplay) if (nullptr != m_pCalcDisplay)
{ {
m_pCalcDisplay->SetExpressionDisplay( m_pCalcDisplay->SetExpressionDisplay(make_shared<vector<pair<wstring, int>>>(), make_shared<vector<shared_ptr<IExpressionCommand>>>());
make_shared<vector<pair<wstring, int>>>(), make_shared<vector<shared_ptr<IExpressionCommand>>>());
} }
} }
@ -142,18 +136,10 @@ void CCalcEngine::ProcessCommandWorker(OpCode wParam)
// Toggle Record/Display mode if appropriate. // Toggle Record/Display mode if appropriate.
if (m_bRecord) if (m_bRecord)
{ {
if (IsBinOpCode(wParam) || if (IsBinOpCode(wParam) || IsUnaryOpCode(wParam) || IsOpInRange(wParam, IDC_FE, IDC_MMINUS) || IsOpInRange(wParam, IDC_OPENP, IDC_CLOSEP)
IsUnaryOpCode(wParam) || || IsOpInRange(wParam, IDM_HEX, IDM_BIN) || IsOpInRange(wParam, IDM_QWORD, IDM_BYTE) || IsOpInRange(wParam, IDM_DEG, IDM_GRAD)
IsOpInRange(wParam, IDC_FE, IDC_MMINUS) || || IsOpInRange(wParam, IDC_BINEDITSTART, IDC_BINEDITEND) || (IDC_INV == wParam) || (IDC_SIGN == wParam && 10 != m_radix) || (IDC_RAND == wParam)
IsOpInRange(wParam, IDC_OPENP, IDC_CLOSEP) || || (IDC_EULER == wParam))
IsOpInRange(wParam, IDM_HEX, IDM_BIN) ||
IsOpInRange(wParam, IDM_QWORD, IDM_BYTE) ||
IsOpInRange(wParam, IDM_DEG, IDM_GRAD) ||
IsOpInRange(wParam, IDC_BINEDITSTART, IDC_BINEDITEND) ||
(IDC_INV == wParam) ||
(IDC_SIGN == wParam && 10 != m_radix) ||
(IDC_RAND == wParam) ||
(IDC_EULER == wParam))
{ {
m_bRecord = false; m_bRecord = false;
m_currentVal = m_input.ToRational(m_radix, m_precision); m_currentVal = m_input.ToRational(m_radix, m_precision);
@ -269,7 +255,6 @@ void CCalcEngine::ProcessCommandWorker(OpCode wParam)
DisplayNum(); DisplayNum();
if (!m_fPrecedence) if (!m_fPrecedence)
{ {
wstring groupedString = GroupDigitsPerRadix(m_numberString, m_radix); wstring groupedString = GroupDigitsPerRadix(m_numberString, m_radix);
m_HistoryCollector.CompleteEquation(groupedString); m_HistoryCollector.CompleteEquation(groupedString);
m_HistoryCollector.AddOpndToHistory(m_numberString, m_currentVal); m_HistoryCollector.AddOpndToHistory(m_numberString, m_currentVal);
@ -360,13 +345,10 @@ void CCalcEngine::ProcessCommandWorker(OpCode wParam)
/* reset the m_bInv flag and indicators if it is set /* reset the m_bInv flag and indicators if it is set
and have been used */ and have been used */
if (m_bInv && if (m_bInv
((wParam == IDC_CHOP) || (wParam == IDC_SIN) || (wParam == IDC_COS) || && ((wParam == IDC_CHOP) || (wParam == IDC_SIN) || (wParam == IDC_COS) || (wParam == IDC_TAN) || (wParam == IDC_LN) || (wParam == IDC_DMS)
(wParam == IDC_TAN) || (wParam == IDC_LN) || (wParam == IDC_DMS) || || (wParam == IDC_DEGREES) || (wParam == IDC_SINH) || (wParam == IDC_COSH) || (wParam == IDC_TANH) || (wParam == IDC_SEC) || (wParam == IDC_CSC)
(wParam == IDC_DEGREES) || (wParam == IDC_SINH) || (wParam == IDC_COSH) || || (wParam == IDC_COT) || (wParam == IDC_SECH) || (wParam == IDC_CSCH) || (wParam == IDC_COTH)))
(wParam == IDC_TANH) || (wParam == IDC_SEC) || (wParam == IDC_CSC) ||
(wParam == IDC_COT) || (wParam == IDC_SECH) || (wParam == IDC_CSCH) ||
(wParam == IDC_COTH)))
{ {
m_bInv = false; m_bInv = false;
} }
@ -928,8 +910,7 @@ struct FunctionNameElement
}; };
// Table for each unary operator // Table for each unary operator
static const std::unordered_map<int, FunctionNameElement> operatorStringTable = static const std::unordered_map<int, FunctionNameElement> operatorStringTable = {
{
{ IDC_CHOP, { L"", SIDS_FRAC } }, { IDC_CHOP, { L"", SIDS_FRAC } },
{ IDC_SIN, { SIDS_SIND, SIDS_ASIND, SIDS_SINR, SIDS_ASINR, SIDS_SING, SIDS_ASING } }, { IDC_SIN, { SIDS_SIND, SIDS_ASIND, SIDS_SINR, SIDS_ASINR, SIDS_SING, SIDS_ASING } },

View file

@ -272,7 +272,7 @@ CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& r
break; break;
case IDC_FLOOR: case IDC_FLOOR:
result = (Frac(rat) < 0) ? Integer(rat - 1 ) : Integer(rat); result = (Frac(rat) < 0) ? Integer(rat - 1) : Integer(rat);
break; break;
case IDC_ABS: case IDC_ABS:

View file

@ -118,7 +118,6 @@ public:
ResultCode hr = this->GetSize(&nTokens); ResultCode hr = this->GetSize(&nTokens);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
std::pair<std::wstring, int> currentPair; std::pair<std::wstring, int> currentPair;
for (unsigned int i = 0; i < nTokens; i++) for (unsigned int i = 0; i < nTokens; i++)
{ {

View file

@ -146,11 +146,11 @@
#define IDC_COT 404 // Cotangent #define IDC_COT 404 // Cotangent
// 405 reserved for inverse // 405 reserved for inverse
#define IDC_SECH 406 //Hyperbolic Secant #define IDC_SECH 406 // Hyperbolic Secant
// 407 reserved for inverse // 407 reserved for inverse
#define IDC_CSCH 408 //Hyperbolic Cosecant #define IDC_CSCH 408 // Hyperbolic Cosecant
// 409 reserved for inverse // 409 reserved for inverse
#define IDC_COTH 410 //Hyperbolic Cotangent #define IDC_COTH 410 // Hyperbolic Cotangent
// 411 reserved for inverse // 411 reserved for inverse
#define IDC_POW2 412 // 2 ^ x #define IDC_POW2 412 // 2 ^ x
@ -170,7 +170,7 @@
#define IDC_NAND 501 // Nand #define IDC_NAND 501 // Nand
#define IDC_NOR 502 // Nor #define IDC_NOR 502 // Nor
#define IDC_RSHFL 505 //Right Shift Logical #define IDC_RSHFL 505 // Right Shift Logical
#define IDC_BINARYEXTENDEDLAST IDC_RSHFL #define IDC_BINARYEXTENDEDLAST IDC_RSHFL
#define IDC_RAND 600 // Random #define IDC_RAND 600 // Random

View file

@ -206,8 +206,7 @@ inline constexpr auto SIDS_CUBEROOT = L"CubeRoot";
inline constexpr auto SIDS_PROGRAMMER_MOD = L"ProgrammerMod"; inline constexpr auto SIDS_PROGRAMMER_MOD = L"ProgrammerMod";
// Include the resource key ID from above into this vector to load it into memory for the engine to use // Include the resource key ID from above into this vector to load it into memory for the engine to use
inline constexpr std::array<std::wstring_view, 152> g_sids = inline constexpr std::array<std::wstring_view, 152> g_sids = {
{
SIDS_PLUS_MINUS, SIDS_PLUS_MINUS,
SIDS_C, SIDS_C,
SIDS_CE, SIDS_CE,

View file

@ -162,8 +162,7 @@ namespace UnitConversionManager
std::unordered_map<UnitConversionManager::Unit, UnitConversionManager::ConversionData, UnitConversionManager::UnitHash>, std::unordered_map<UnitConversionManager::Unit, UnitConversionManager::ConversionData, UnitConversionManager::UnitHash>,
UnitConversionManager::UnitHash> UnitConversionManager::UnitHash>
UnitToUnitToConversionDataMap; UnitToUnitToConversionDataMap;
typedef std::unordered_map<int, std::vector<UnitConversionManager::Unit>> typedef std::unordered_map<int, std::vector<UnitConversionManager::Unit>> CategoryToUnitVectorMap;
CategoryToUnitVectorMap;
class IViewModelCurrencyCallback class IViewModelCurrencyCallback
{ {

View file

@ -20,6 +20,6 @@
#define SUCCEEDED(hr) (((ResultCode)(hr)) >= 0) #define SUCCEEDED(hr) (((ResultCode)(hr)) >= 0)
#define FAILED(hr) (((ResultCode)(hr)) < 0) #define FAILED(hr) (((ResultCode)(hr)) < 0)
#define SCODE_CODE(sc) ((sc) & 0xFFFF) #define SCODE_CODE(sc) ((sc)&0xFFFF)
#endif #endif

View file

@ -77,6 +77,5 @@ public
static NarratorAnnouncement ^ GetAlwaysOnTopChangedAnnouncement(Platform::String ^ announcement); static NarratorAnnouncement ^ GetAlwaysOnTopChangedAnnouncement(Platform::String ^ announcement);
static NarratorAnnouncement ^ GetBitShiftRadioButtonCheckedAnnouncement(Platform::String ^ announcement); static NarratorAnnouncement ^ GetBitShiftRadioButtonCheckedAnnouncement(Platform::String ^ announcement);
}; };
} }

View file

@ -94,29 +94,29 @@ public
Byte = (int)CM::Command::CommandByte, Byte = (int)CM::Command::CommandByte,
Cube = (int)CM::Command::CommandCUB, Cube = (int)CM::Command::CommandCUB,
DMS = (int)CM::Command::CommandDMS, DMS = (int)CM::Command::CommandDMS,
Hyp = (int) CM::Command::CommandHYP, Hyp = (int)CM::Command::CommandHYP,
Sec = (int) CM::Command::CommandSEC, Sec = (int)CM::Command::CommandSEC,
Csc = (int) CM::Command::CommandCSC, Csc = (int)CM::Command::CommandCSC,
Cot = (int) CM::Command::CommandCOT, Cot = (int)CM::Command::CommandCOT,
InvSec = (int) CM::Command::CommandASEC, InvSec = (int)CM::Command::CommandASEC,
InvCsc = (int) CM::Command::CommandACSC, InvCsc = (int)CM::Command::CommandACSC,
InvCot = (int) CM::Command::CommandACOT, InvCot = (int)CM::Command::CommandACOT,
Sech = (int) CM::Command::CommandSECH, Sech = (int)CM::Command::CommandSECH,
Csch = (int) CM::Command::CommandCSCH, Csch = (int)CM::Command::CommandCSCH,
Coth = (int) CM::Command::CommandCOTH, Coth = (int)CM::Command::CommandCOTH,
InvSech = (int) CM::Command::CommandASECH, InvSech = (int)CM::Command::CommandASECH,
InvCsch = (int) CM::Command::CommandACSCH, InvCsch = (int)CM::Command::CommandACSCH,
InvCoth = (int) CM::Command::CommandACOTH, InvCoth = (int)CM::Command::CommandACOTH,
CubeRoot = (int) CM::Command::CommandCUBEROOT, CubeRoot = (int)CM::Command::CommandCUBEROOT,
TwoPowerX = (int) CM::Command::CommandPOW2, TwoPowerX = (int)CM::Command::CommandPOW2,
LogBaseY = (int) CM::Command::CommandLogBaseY, LogBaseY = (int)CM::Command::CommandLogBaseY,
Nand = (int) CM::Command::CommandNand, Nand = (int)CM::Command::CommandNand,
Nor = (int) CM::Command::CommandNor, Nor = (int)CM::Command::CommandNor,
Abs = (int) CM::Command::CommandAbs, Abs = (int)CM::Command::CommandAbs,
Floor = (int) CM::Command::CommandFloor, Floor = (int)CM::Command::CommandFloor,
Ceil = (int) CM::Command::CommandCeil, Ceil = (int)CM::Command::CommandCeil,
Rand = (int) CM::Command::CommandRand, Rand = (int)CM::Command::CommandRand,
Euler = (int) CM::Command::CommandEuler, Euler = (int)CM::Command::CommandEuler,
RshL = (int)CM::Command::CommandRSHFL, RshL = (int)CM::Command::CommandRSHFL,
RolC = (int)CM::Command::CommandROLC, RolC = (int)CM::Command::CommandROLC,
RorC = (int)CM::Command::CommandRORC, RorC = (int)CM::Command::CommandRORC,

View file

@ -62,7 +62,7 @@ LocalizationService ^ LocalizationService::GetInstance()
/// <remarks> /// <remarks>
/// Should only be used for test purpose /// Should only be used for test purpose
/// </remarks> /// </remarks>
void LocalizationService::OverrideWithLanguage(_In_ const wchar_t * const language) void LocalizationService::OverrideWithLanguage(_In_ const wchar_t* const language)
{ {
s_singletonInstance = ref new LocalizationService(language); s_singletonInstance = ref new LocalizationService(language);
} }

View file

@ -295,7 +295,7 @@ void NavCategory::InitializeCategoryManifest(User ^ user)
i++; i++;
} }
} }
} }
// This function should only be used when storing the mode to app data. // This function should only be used when storing the mode to app data.
int NavCategory::Serialize(ViewMode mode) int NavCategory::Serialize(ViewMode mode)
@ -347,8 +347,9 @@ bool NavCategory::IsValidViewMode(ViewMode mode)
bool NavCategory::IsViewModeEnabled(ViewMode mode) bool NavCategory::IsViewModeEnabled(ViewMode mode)
{ {
auto iter = auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), [mode](const NavCategoryInitializer& initializer) {
find_if(begin(s_categoryManifest), end(s_categoryManifest), [mode](const NavCategoryInitializer& initializer) { return initializer.viewMode == mode && initializer.isEnabled; }); return initializer.viewMode == mode && initializer.isEnabled;
});
return iter != s_categoryManifest.end(); return iter != s_categoryManifest.end();
} }

View file

@ -241,7 +241,6 @@ namespace Utils
}; };
} }
// Regular DependencyProperty // Regular DependencyProperty
template <typename TOwner, typename TType> template <typename TOwner, typename TType>
Windows::UI::Xaml::DependencyProperty^ RegisterDependencyProperty( Windows::UI::Xaml::DependencyProperty^ RegisterDependencyProperty(

View file

@ -89,7 +89,7 @@ namespace CalculatorApp
} }
} }
CurrencyDataLoader::CurrencyDataLoader(_In_ unique_ptr<ICurrencyHttpClient> client, const wchar_t * forcedResponseLanguage) CurrencyDataLoader::CurrencyDataLoader(_In_ unique_ptr<ICurrencyHttpClient> client, const wchar_t* forcedResponseLanguage)
: m_client(move(client)) : m_client(move(client))
, m_loadStatus(CurrencyLoadStatus::NotLoaded) , m_loadStatus(CurrencyLoadStatus::NotLoaded)
, m_responseLanguage(L"en-US") , m_responseLanguage(L"en-US")

View file

@ -472,6 +472,3 @@ void App::DismissedEventHandler(SplashScreen ^ sender, Object ^ e)
{ {
SetupJumpList(); SetupJumpList();
} }

View file

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\packages\Microsoft.WindowsCalculator.PGO.1.0.2\build\native\Microsoft.WindowsCalculator.PGO.props" Condition="Exists('..\..\packages\Microsoft.WindowsCalculator.PGO.1.0.2\build\native\Microsoft.WindowsCalculator.PGO.props')" />
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<ProjectGuid>{9447424a-0e05-4911-beb8-e0354405f39a}</ProjectGuid> <ProjectGuid>{9447424a-0e05-4911-beb8-e0354405f39a}</ProjectGuid>
<RootNamespace>CalculatorApp</RootNamespace> <RootNamespace>CalculatorApp</RootNamespace>
@ -961,15 +960,12 @@
</ItemGroup> </ItemGroup>
</Target> </Target>
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
<Import Project="..\..\packages\Microsoft.WindowsCalculator.PGO.1.0.2\build\native\Microsoft.WindowsCalculator.PGO.targets" Condition="Exists('..\..\packages\Microsoft.WindowsCalculator.PGO.1.0.2\build\native\Microsoft.WindowsCalculator.PGO.targets')" />
<Import Project="..\..\packages\Microsoft.UI.Xaml.2.4.3\build\native\Microsoft.UI.Xaml.targets" Condition="Exists('..\..\packages\Microsoft.UI.Xaml.2.4.3\build\native\Microsoft.UI.Xaml.targets')" /> <Import Project="..\..\packages\Microsoft.UI.Xaml.2.4.3\build\native\Microsoft.UI.Xaml.targets" Condition="Exists('..\..\packages\Microsoft.UI.Xaml.2.4.3\build\native\Microsoft.UI.Xaml.targets')" />
</ImportGroup> </ImportGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup> <PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup> </PropertyGroup>
<Error Condition="!Exists('..\..\packages\Microsoft.WindowsCalculator.PGO.1.0.2\build\native\Microsoft.WindowsCalculator.PGO.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.WindowsCalculator.PGO.1.0.2\build\native\Microsoft.WindowsCalculator.PGO.props'))" />
<Error Condition="!Exists('..\..\packages\Microsoft.WindowsCalculator.PGO.1.0.2\build\native\Microsoft.WindowsCalculator.PGO.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.WindowsCalculator.PGO.1.0.2\build\native\Microsoft.WindowsCalculator.PGO.targets'))" />
<Error Condition="!Exists('..\..\packages\Microsoft.UI.Xaml.2.4.3\build\native\Microsoft.UI.Xaml.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.UI.Xaml.2.4.3\build\native\Microsoft.UI.Xaml.targets'))" /> <Error Condition="!Exists('..\..\packages\Microsoft.UI.Xaml.2.4.3\build\native\Microsoft.UI.Xaml.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.UI.Xaml.2.4.3\build\native\Microsoft.UI.Xaml.targets'))" />
</Target> </Target>
</Project> </Project>

View file

@ -528,7 +528,8 @@ void KeyboardShortcutManager::OnAcceleratorKeyActivated(CoreDispatcher ^, Accele
return; return;
} }
const bool controlKeyPressed = (Window::Current->CoreWindow->GetKeyState(VirtualKey::Control) & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down; const bool controlKeyPressed =
(Window::Current->CoreWindow->GetKeyState(VirtualKey::Control) & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down;
// Ctrl is pressed in addition to alt, this means Alt Gr is intended. do not navigate. // Ctrl is pressed in addition to alt, this means Alt Gr is intended. do not navigate.
if (controlKeyPressed) if (controlKeyPressed)
{ {

View file

@ -1922,7 +1922,7 @@
<comment>An abbreviation for a measurement unit of Angle</comment> <comment>An abbreviation for a measurement unit of Angle</comment>
</data> </data>
<data name="UnitAbbreviation_Gradian" xml:space="preserve"> <data name="UnitAbbreviation_Gradian" xml:space="preserve">
<value>Grad</value> <value>gon</value>
<comment>An abbreviation for a measurement unit of Angle</comment> <comment>An abbreviation for a measurement unit of Angle</comment>
</data> </data>
<data name="UnitAbbreviation_Atmosphere" xml:space="preserve"> <data name="UnitAbbreviation_Atmosphere" xml:space="preserve">

View file

@ -3348,7 +3348,7 @@
<comment>Label for the Line Style section of the style picker</comment> <comment>Label for the Line Style section of the style picker</comment>
</data> </data>
<data name="KeyGraphFeaturesLabel.Text" xml:space="preserve"> <data name="KeyGraphFeaturesLabel.Text" xml:space="preserve">
<value>Ανάλυση λειτουργίας</value> <value>Ανάλυση συνάρτησης</value>
<comment>Title for KeyGraphFeatures Control</comment> <comment>Title for KeyGraphFeatures Control</comment>
</data> </data>
<data name="KGFHorizontalAsymptotesNone" xml:space="preserve"> <data name="KGFHorizontalAsymptotesNone" xml:space="preserve">
@ -4047,7 +4047,7 @@
<comment>Announcement used in Graphing Calculator when a function is removed from the function list</comment> <comment>Announcement used in Graphing Calculator when a function is removed from the function list</comment>
</data> </data>
<data name="KGFEquationTextBox.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="KGFEquationTextBox.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>Πλαίσιο εξισώσεων ανάλυσης συναρτήσεων</value> <value>Πλαίσιο εξισώσεων Ανάλυση συνάρτησης</value>
<comment>This is the automation name text for the equation box in the function analysis panel</comment> <comment>This is the automation name text for the equation box in the function analysis panel</comment>
</data> </data>
<data name="graphingEqualButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="graphingEqualButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">

View file

@ -1106,7 +1106,7 @@
<comment>Screen reader prompt for the Unit Converter Units2 i.e. bottom units field.</comment> <comment>Screen reader prompt for the Unit Converter Units2 i.e. bottom units field.</comment>
</data> </data>
<data name="CategoryName_AreaText" xml:space="preserve"> <data name="CategoryName_AreaText" xml:space="preserve">
<value>Zone</value> <value>Aire</value>
<comment>Unit conversion category name called Area (eg. area of a sports field in square meters)</comment> <comment>Unit conversion category name called Area (eg. area of a sports field in square meters)</comment>
</data> </data>
<data name="CategoryName_DataText" xml:space="preserve"> <data name="CategoryName_DataText" xml:space="preserve">

View file

@ -2992,11 +2992,11 @@
<comment>Name for the absolute value function. Used by screen readers.</comment> <comment>Name for the absolute value function. Used by screen readers.</comment>
</data> </data>
<data name="LeftShift" xml:space="preserve"> <data name="LeftShift" xml:space="preserve">
<value>ឃី shift ខាងឆ្វេង</value> <value>ប្តូរទៅខាងឆ្វេង</value>
<comment>Name for the programmer function that shifts bits to the left. Used by screen readers.</comment> <comment>Name for the programmer function that shifts bits to the left. Used by screen readers.</comment>
</data> </data>
<data name="RightShift" xml:space="preserve"> <data name="RightShift" xml:space="preserve">
<value>ឃី shift ខាងស្តាំ</value> <value>ប្តូរទៅខាងស្តាំ</value>
<comment>Name for the programmer function that shifts bits to the right. Used by screen readers.</comment> <comment>Name for the programmer function that shifts bits to the right. Used by screen readers.</comment>
</data> </data>
<data name="Factorial" xml:space="preserve"> <data name="Factorial" xml:space="preserve">

View file

@ -1922,7 +1922,7 @@
<comment>An abbreviation for a measurement unit of Angle</comment> <comment>An abbreviation for a measurement unit of Angle</comment>
</data> </data>
<data name="UnitAbbreviation_Gradian" xml:space="preserve"> <data name="UnitAbbreviation_Gradian" xml:space="preserve">
<value>대학원생</value> <value>그리드</value>
<comment>An abbreviation for a measurement unit of Angle</comment> <comment>An abbreviation for a measurement unit of Angle</comment>
</data> </data>
<data name="UnitAbbreviation_Atmosphere" xml:space="preserve"> <data name="UnitAbbreviation_Atmosphere" xml:space="preserve">
@ -2006,7 +2006,7 @@
<comment>A measurement unit for weight. (Please choose the most appropriate plural form to fit any number between 0 and 999,999,999,999,999)</comment> <comment>A measurement unit for weight. (Please choose the most appropriate plural form to fit any number between 0 and 999,999,999,999,999)</comment>
</data> </data>
<data name="UnitName_Degree" xml:space="preserve"> <data name="UnitName_Degree" xml:space="preserve">
<value>도</value> <value>도</value>
<comment>A measurement unit for Angle.</comment> <comment>A measurement unit for Angle.</comment>
</data> </data>
<data name="UnitName_Radian" xml:space="preserve"> <data name="UnitName_Radian" xml:space="preserve">
@ -4023,7 +4023,7 @@
<comment>Graph settings heading for the theme options</comment> <comment>Graph settings heading for the theme options</comment>
</data> </data>
<data name="AlwaysLightTheme.Content" xml:space="preserve"> <data name="AlwaysLightTheme.Content" xml:space="preserve">
<value>항상 가늘게</value> <value>항상 게</value>
<comment>Graph settings option to set graph to light theme</comment> <comment>Graph settings option to set graph to light theme</comment>
</data> </data>
<data name="MatchAppTheme.Content" xml:space="preserve"> <data name="MatchAppTheme.Content" xml:space="preserve">
@ -4035,7 +4035,7 @@
<comment>This is the automation name text for the Graph settings heading for the theme options</comment> <comment>This is the automation name text for the Graph settings heading for the theme options</comment>
</data> </data>
<data name="AlwaysLightTheme.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="AlwaysLightTheme.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>항상 가늘게</value> <value>항상 게</value>
<comment>This is the automation name text for the Graph settings option to set graph to light theme</comment> <comment>This is the automation name text for the Graph settings option to set graph to light theme</comment>
</data> </data>
<data name="MatchAppTheme.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="MatchAppTheme.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">

View file

@ -1706,7 +1706,7 @@
<comment>A measurement unit for energy. (Please choose the most appropriate plural form to fit any number between 0 and 999,999,999,999,999)</comment> <comment>A measurement unit for energy. (Please choose the most appropriate plural form to fit any number between 0 and 999,999,999,999,999)</comment>
</data> </data>
<data name="UnitName_Foot" xml:space="preserve"> <data name="UnitName_Foot" xml:space="preserve">
<value>ຕີນ</value> <value>ຟຸດ</value>
<comment>A measurement unit for length. (Please choose the most appropriate plural form to fit any number between 0 and 999,999,999,999,999)</comment> <comment>A measurement unit for length. (Please choose the most appropriate plural form to fit any number between 0 and 999,999,999,999,999)</comment>
</data> </data>
<data name="UnitName_FeetPerSecond" xml:space="preserve"> <data name="UnitName_FeetPerSecond" xml:space="preserve">

View file

@ -2318,7 +2318,7 @@
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment> <comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
</data> </data>
<data name="AboutFlyoutContribute" xml:space="preserve"> <data name="AboutFlyoutContribute" xml:space="preserve">
<value>Para saber como pode contribuir para a calculadora do Windows, dê saída do projeto no %HL%GitHub%HL%.</value> <value>Para saber como pode contribuir para a Calculadora do Windows, consulte o projeto no %HL%GitHub%HL%.</value>
<comment>{Locked="%HL%GitHub%HL%"}. GitHub link, Displayed on the About panel</comment> <comment>{Locked="%HL%GitHub%HL%"}. GitHub link, Displayed on the About panel</comment>
</data> </data>
<data name="AboutButton.Content" xml:space="preserve"> <data name="AboutButton.Content" xml:space="preserve">
@ -2572,7 +2572,7 @@
<comment>Automation name for the group of radices (Hexadecimal, Decimal, Octal, Binary). https://en.wikipedia.org/wiki/Radix </comment> <comment>Automation name for the group of radices (Hexadecimal, Decimal, Octal, Binary). https://en.wikipedia.org/wiki/Radix </comment>
</data> </data>
<data name="ProgrammerOperators.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="ProgrammerOperators.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>Operadores do programador</value> <value>Operadores de programador</value>
<comment>Automation name for the group of programmer operators (RoL, RoR, Lsh, Rsh, OR, XOR, NOT, AND).</comment> <comment>Automation name for the group of programmer operators (RoL, RoR, Lsh, Rsh, OR, XOR, NOT, AND).</comment>
</data> </data>
<data name="InputModeSelectionGroup.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="InputModeSelectionGroup.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
@ -3280,7 +3280,7 @@
<comment>Announcement used in Graphing Calculator when graph view button is clicked and automatic best fit is set, resetting the graph</comment> <comment>Announcement used in Graphing Calculator when graph view button is clicked and automatic best fit is set, resetting the graph</comment>
</data> </data>
<data name="zoomInButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="zoomInButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>Zoom In (Ctrl + adição)</value> <value>Ampliar (Ctrl + adição)</value>
<comment>This is the tool tip automation name for the Calculator zoom in button.</comment> <comment>This is the tool tip automation name for the Calculator zoom in button.</comment>
</data> </data>
<data name="zoomInButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="zoomInButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
@ -3288,7 +3288,7 @@
<comment>Screen reader prompt for the zoom in button.</comment> <comment>Screen reader prompt for the zoom in button.</comment>
</data> </data>
<data name="zoomOutButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="zoomOutButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>Zoom out (Ctrl + subtração)</value> <value>Reduzir (Ctrl + subtração)</value>
<comment>This is the tool tip automation name for the Calculator zoom out button.</comment> <comment>This is the tool tip automation name for the Calculator zoom out button.</comment>
</data> </data>
<data name="zoomOutButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="zoomOutButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">

View file

@ -126,7 +126,7 @@
<comment>Error message shown when there's no possible value for a function.</comment> <comment>Error message shown when there's no possible value for a function.</comment>
</data> </data>
<data name="105" xml:space="preserve"> <data name="105" xml:space="preserve">
<value>存不足</value> <value>存储器空间不足</value>
<comment>Error message shown when we run out of memory during a calculation.</comment> <comment>Error message shown when we run out of memory during a calculation.</comment>
</data> </data>
<data name="107" xml:space="preserve"> <data name="107" xml:space="preserve">

View file

@ -418,11 +418,11 @@
<comment>Used to describe the first bit of a binary number. Used in bit flip</comment> <comment>Used to describe the first bit of a binary number. Used in bit flip</comment>
</data> </data>
<data name="MemoryButton_Open" xml:space="preserve"> <data name="MemoryButton_Open" xml:space="preserve">
<value>打开内存浮出控件</value> <value>打开记忆浮出控件</value>
<comment>This is the automation name and label for the memory button when the memory flyout is closed.</comment> <comment>This is the automation name and label for the memory button when the memory flyout is closed.</comment>
</data> </data>
<data name="MemoryButton_Close" xml:space="preserve"> <data name="MemoryButton_Close" xml:space="preserve">
<value>关闭内存浮出控件</value> <value>关闭记忆浮出控件</value>
<comment>This is the automation name and label for the memory button when the memory flyout is open.</comment> <comment>This is the automation name and label for the memory button when the memory flyout is open.</comment>
</data> </data>
<data name="AlwaysOnTop_Enter" xml:space="preserve"> <data name="AlwaysOnTop_Enter" xml:space="preserve">
@ -434,7 +434,7 @@
<comment>This is the tool tip automation name for the always-on-top button when in always-on-top mode.</comment> <comment>This is the tool tip automation name for the always-on-top button when in always-on-top mode.</comment>
</data> </data>
<data name="MemoryButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="MemoryButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>内存</value> <value>记忆</value>
<comment>This is the tool tip automation name for the memory button.</comment> <comment>This is the tool tip automation name for the memory button.</comment>
</data> </data>
<data name="HistoryButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="HistoryButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
@ -450,15 +450,15 @@
<comment>This is the tool tip automation name for the numberPad button.</comment> <comment>This is the tool tip automation name for the numberPad button.</comment>
</data> </data>
<data name="ClearMemoryButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="ClearMemoryButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>清除所有内存Ctrl+L</value> <value>清除所有记忆(Ctrl+L)</value>
<comment>This is the tool tip automation name for the Clear Memory (MC) button.</comment> <comment>This is the tool tip automation name for the Clear Memory (MC) button.</comment>
</data> </data>
<data name="MemoryLabel.Text" xml:space="preserve"> <data name="MemoryLabel.Text" xml:space="preserve">
<value>内存</value> <value>记忆</value>
<comment>The text that shows as the header for the memory list</comment> <comment>The text that shows as the header for the memory list</comment>
</data> </data>
<data name="MemoryPivotItem.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="MemoryPivotItem.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>内存</value> <value>记忆</value>
<comment>The automation name for the Memory pivot item that is shown when Calculator is in wide layout.</comment> <comment>The automation name for the Memory pivot item that is shown when Calculator is in wide layout.</comment>
</data> </data>
<data name="HistoryLabel.Text" xml:space="preserve"> <data name="HistoryLabel.Text" xml:space="preserve">
@ -566,7 +566,7 @@
<comment>Screen reader prompt for the history flyout</comment> <comment>Screen reader prompt for the history flyout</comment>
</data> </data>
<data name="MemoryPane" xml:space="preserve"> <data name="MemoryPane" xml:space="preserve">
<value>内存</value> <value>记忆</value>
<comment>Screen reader prompt for the memory flyout</comment> <comment>Screen reader prompt for the memory flyout</comment>
</data> </data>
<data name="Format_HexButtonValue" xml:space="preserve"> <data name="Format_HexButtonValue" xml:space="preserve">
@ -606,91 +606,91 @@
<comment>Screen reader prompt for the Calculator History button, when the flyout is open.</comment> <comment>Screen reader prompt for the Calculator History button, when the flyout is open.</comment>
</data> </data>
<data name="memButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="memButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>内存存储</value> <value>记忆存储</value>
<comment>Screen reader prompt for the Calculator Memory button</comment> <comment>Screen reader prompt for the Calculator Memory button</comment>
</data> </data>
<data name="memButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="memButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>内存存储(Ctrl+M)</value> <value>记忆存储(Ctrl+M)</value>
<comment>This is the tool tip automation name for the Memory Store (MS) button.</comment> <comment>This is the tool tip automation name for the Memory Store (MS) button.</comment>
</data> </data>
<data name="ClearMemoryButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="ClearMemoryButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>清除所有内存</value> <value>清除所有记忆</value>
<comment>Screen reader prompt for the Calculator Clear Memory button</comment> <comment>Screen reader prompt for the Calculator Clear Memory button</comment>
</data> </data>
<data name="Memory_Cleared" xml:space="preserve"> <data name="Memory_Cleared" xml:space="preserve">
<value>已清理内存</value> <value>记忆已清除</value>
<comment>Screen reader prompt for the Calculator Clear Memory button, when the button is invoked.</comment> <comment>Screen reader prompt for the Calculator Clear Memory button, when the button is invoked.</comment>
</data> </data>
<data name="MemRecall.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="MemRecall.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>内存重新调用</value> <value>记忆读出</value>
<comment>Screen reader prompt for the Calculator Memory Recall button</comment> <comment>Screen reader prompt for the Calculator Memory Recall button</comment>
</data> </data>
<data name="MemRecall.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="MemRecall.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>内存重新调用Ctrl+R</value> <value>记忆读出(Ctrl+R)</value>
<comment>This is the tool tip automation name for the Memory Recall (MR) button.</comment> <comment>This is the tool tip automation name for the Memory Recall (MR) button.</comment>
</data> </data>
<data name="MemPlus.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="MemPlus.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>内存添加</value> <value>记忆加法</value>
<comment>Screen reader prompt for the Calculator Memory Add button</comment> <comment>Screen reader prompt for the Calculator Memory Add button</comment>
</data> </data>
<data name="MemPlus.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="MemPlus.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>内存添加Ctrl+P</value> <value>记忆加法(Ctrl+P)</value>
<comment>This is the tool tip automation name for the Memory Add (M+) button.</comment> <comment>This is the tool tip automation name for the Memory Add (M+) button.</comment>
</data> </data>
<data name="MemMinus.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="MemMinus.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>内存减少</value> <value>记忆减法</value>
<comment>Screen reader prompt for the Calculator Memory Subtract button</comment> <comment>Screen reader prompt for the Calculator Memory Subtract button</comment>
</data> </data>
<data name="MemMinus.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="MemMinus.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>内存减少Ctrl+Q</value> <value>记忆减法(Ctrl+Q)</value>
<comment>This is the tool tip automation name for the Memory Subtract (M-) button.</comment> <comment>This is the tool tip automation name for the Memory Subtract (M-) button.</comment>
</data> </data>
<data name="ClearMemoryItemButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="ClearMemoryItemButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>清除内存项</value> <value>清除记忆项</value>
<comment>Screen reader prompt for the Calculator Clear Memory button</comment> <comment>Screen reader prompt for the Calculator Clear Memory button</comment>
</data> </data>
<data name="ClearMemoryItemButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="ClearMemoryItemButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>清除内存项</value> <value>清除记忆项</value>
<comment>This is the tool tip automation name for the Clear Memory Item (MC) button in the Memory list.</comment> <comment>This is the tool tip automation name for the Clear Memory Item (MC) button in the Memory list.</comment>
</data> </data>
<data name="MemPlusItem.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="MemPlusItem.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>添加到内存项</value> <value>增加到记忆项</value>
<comment>Screen reader prompt for the Calculator Memory Add button in the Memory list</comment> <comment>Screen reader prompt for the Calculator Memory Add button in the Memory list</comment>
</data> </data>
<data name="MemPlusItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="MemPlusItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>添加到内存项</value> <value>增加到记忆项</value>
<comment>This is the tool tip automation name for the Calculator Memory Add button in the Memory list</comment> <comment>This is the tool tip automation name for the Calculator Memory Add button in the Memory list</comment>
</data> </data>
<data name="MemMinusItem.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="MemMinusItem.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>从内存项中移除</value> <value>从记忆项中减去</value>
<comment>Screen reader prompt for the Calculator Memory Subtract button in the Memory list</comment> <comment>Screen reader prompt for the Calculator Memory Subtract button in the Memory list</comment>
</data> </data>
<data name="MemMinusItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="MemMinusItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>从内存项中移除</value> <value>从记忆项中减去</value>
<comment>This is the tool tip automation name for the Calculator Memory Subtract button in the Memory list</comment> <comment>This is the tool tip automation name for the Calculator Memory Subtract button in the Memory list</comment>
</data> </data>
<data name="ClearMemorySwipeItem.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="ClearMemorySwipeItem.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>清除内存项</value> <value>清除记忆项</value>
<comment>Screen reader prompt for the Calculator Clear Memory button</comment> <comment>Screen reader prompt for the Calculator Clear Memory button</comment>
</data> </data>
<data name="ClearMemoryMenuItem.Text" xml:space="preserve"> <data name="ClearMemoryMenuItem.Text" xml:space="preserve">
<value>清除内存项</value> <value>清除记忆项</value>
<comment>Text string for the Calculator Clear Memory option in the Memory list context menu</comment> <comment>Text string for the Calculator Clear Memory option in the Memory list context menu</comment>
</data> </data>
<data name="MemPlusSwipeItem.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="MemPlusSwipeItem.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>添加到内存项</value> <value>增加到记忆项</value>
<comment>Screen reader prompt for the Calculator Memory Add swipe button in the Memory list</comment> <comment>Screen reader prompt for the Calculator Memory Add swipe button in the Memory list</comment>
</data> </data>
<data name="MemPlusMenuItem.Text" xml:space="preserve"> <data name="MemPlusMenuItem.Text" xml:space="preserve">
<value>添加到内存项</value> <value>增加到记忆项</value>
<comment>Text string for the Calculator Memory Add option in the Memory list context menu</comment> <comment>Text string for the Calculator Memory Add option in the Memory list context menu</comment>
</data> </data>
<data name="MemMinusSwipeItem.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="MemMinusSwipeItem.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>从内存项中移除</value> <value>从记忆项中减去</value>
<comment>Screen reader prompt for the Calculator Memory Subtract swipe button in the Memory list</comment> <comment>Screen reader prompt for the Calculator Memory Subtract swipe button in the Memory list</comment>
</data> </data>
<data name="MemMinusMenuItem.Text" xml:space="preserve"> <data name="MemMinusMenuItem.Text" xml:space="preserve">
<value>从内存项中移除</value> <value>从记忆项中减去</value>
<comment>Text string for the Calculator Memory Subtract option in the Memory list context menu</comment> <comment>Text string for the Calculator Memory Subtract option in the Memory list context menu</comment>
</data> </data>
<data name="DeleteHistorySwipeItem.Text" xml:space="preserve"> <data name="DeleteHistorySwipeItem.Text" xml:space="preserve">
@ -1122,7 +1122,7 @@
<comment>Unit conversion category name called Length</comment> <comment>Unit conversion category name called Length</comment>
</data> </data>
<data name="CategoryName_PowerText" xml:space="preserve"> <data name="CategoryName_PowerText" xml:space="preserve">
<value>电源</value> <value>功率</value>
<comment>Unit conversion category name called Power (eg. the power of an engine or a light bulb)</comment> <comment>Unit conversion category name called Power (eg. the power of an engine or a light bulb)</comment>
</data> </data>
<data name="CategoryName_SpeedText" xml:space="preserve"> <data name="CategoryName_SpeedText" xml:space="preserve">
@ -2286,7 +2286,7 @@
<comment>A soccer ball, used as a comparison measurement unit for weight. (Please choose the most appropriate plural form to fit any number between 0 and 999,999,999,999,999)</comment> <comment>A soccer ball, used as a comparison measurement unit for weight. (Please choose the most appropriate plural form to fit any number between 0 and 999,999,999,999,999)</comment>
</data> </data>
<data name="MemoryItemHelpText" xml:space="preserve"> <data name="MemoryItemHelpText" xml:space="preserve">
<value>内存项</value> <value>记忆项</value>
<comment>Help text used by accessibility tools to indicate that an item in the list of memory values is a memory item.</comment> <comment>Help text used by accessibility tools to indicate that an item in the list of memory values is a memory item.</comment>
</data> </data>
<data name="SupplementaryUnit_AutomationName" xml:space="preserve"> <data name="SupplementaryUnit_AutomationName" xml:space="preserve">
@ -2334,11 +2334,11 @@
<comment>The text that shows as the header for the history list</comment> <comment>The text that shows as the header for the history list</comment>
</data> </data>
<data name="MemoryPaneEmpty.Text" xml:space="preserve"> <data name="MemoryPaneEmpty.Text" xml:space="preserve">
<value>内存中没有内容</value> <value>存储器中未保存数据</value>
<comment>The text that shows as the header for the memory list</comment> <comment>The text that shows as the header for the memory list</comment>
</data> </data>
<data name="MemoryFlyout.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="MemoryFlyout.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>内存</value> <value>记忆</value>
<comment>Screen reader prompt for the negate button on the converter operator keypad</comment> <comment>Screen reader prompt for the negate button on the converter operator keypad</comment>
</data> </data>
<data name="CannotPaste" xml:space="preserve"> <data name="CannotPaste" xml:space="preserve">
@ -2536,11 +2536,11 @@
<comment>Automation name for when the mode header is focused and the current mode is Date Calculation.</comment> <comment>Automation name for when the mode header is focused and the current mode is Date Calculation.</comment>
</data> </data>
<data name="DockPanel.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="DockPanel.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>历史记录和内存列表</value> <value>历史记录和记忆列表</value>
<comment>Automation name for the group of controls for history and memory lists.</comment> <comment>Automation name for the group of controls for history and memory lists.</comment>
</data> </data>
<data name="MemoryPanel.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="MemoryPanel.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>内存控件</value> <value>记忆控件</value>
<comment>Automation name for the group of memory controls (Mem Clear, Mem Recall, Mem Add, Mem Subtract, Mem Store, Memory flyout toggle)</comment> <comment>Automation name for the group of memory controls (Mem Clear, Mem Recall, Mem Add, Mem Subtract, Mem Store, Memory flyout toggle)</comment>
</data> </data>
<data name="StandardFunctions.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="StandardFunctions.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
@ -2600,15 +2600,15 @@
<comment>{Locked='%1','%2'} Formatting string for a Narrator announcement when user presses a button with auditory feedback. "%1" is the display value and "%2" is the button press feedback. Example, user presses "plus" and hears "Display is 7 plus".</comment> <comment>{Locked='%1','%2'} Formatting string for a Narrator announcement when user presses a button with auditory feedback. "%1" is the display value and "%2" is the button press feedback. Example, user presses "plus" and hears "Display is 7 plus".</comment>
</data> </data>
<data name="Format_MemorySave" xml:space="preserve"> <data name="Format_MemorySave" xml:space="preserve">
<value>%1 已保存到存</value> <value>%1 已保存到存储器</value>
<comment>{Locked='%1'} Formatting string for a Narrator announcement when the user stores a number to memory. The %1 is the automation name of the display. Users will hear "_current_value_ saved to memory".</comment> <comment>{Locked='%1'} Formatting string for a Narrator announcement when the user stores a number to memory. The %1 is the automation name of the display. Users will hear "_current_value_ saved to memory".</comment>
</data> </data>
<data name="Format_MemorySlotChanged" xml:space="preserve"> <data name="Format_MemorySlotChanged" xml:space="preserve">
<value>内存插槽 %1 是 %2</value> <value>记忆组 %1 是 %2</value>
<comment>{Locked='%1','%2'} Formatting string for a Narrator announcement when the user changes a memory slot. The %1 is the index of the memory slot and %2 is the new value. For example, users might hear "Memory slot 2 is 37".</comment> <comment>{Locked='%1','%2'} Formatting string for a Narrator announcement when the user changes a memory slot. The %1 is the index of the memory slot and %2 is the new value. For example, users might hear "Memory slot 2 is 37".</comment>
</data> </data>
<data name="Format_MemorySlotCleared" xml:space="preserve"> <data name="Format_MemorySlotCleared" xml:space="preserve">
<value>已清理内存插槽 %1</value> <value>记忆组 %1 已清除</value>
<comment>{Locked='%1'} Formatting string for a Narrator announcement when the user clears a memory slot. The %1 is the index of the memory slot. For example, users might hear "Memory slot 2 cleared".</comment> <comment>{Locked='%1'} Formatting string for a Narrator announcement when the user clears a memory slot. The %1 is the index of the memory slot. For example, users might hear "Memory slot 2 cleared".</comment>
</data> </data>
<data name="divideButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve"> <data name="divideButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
@ -2772,11 +2772,11 @@
<comment>Access key for the Clear memory button. {StringCategory="Accelerator"}</comment> <comment>Access key for the Clear memory button. {StringCategory="Accelerator"}</comment>
</data> </data>
<data name="ClearMemory.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve"> <data name="ClearMemory.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
<value>清除所有内存Ctrl+L</value> <value>清除所有记忆(Ctrl+L)</value>
<comment>This is the tool tip automation name for the Clear Memory button in the Memory Pane.</comment> <comment>This is the tool tip automation name for the Clear Memory button in the Memory Pane.</comment>
</data> </data>
<data name="ClearMemory.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="ClearMemory.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>清除所有内存</value> <value>清除所有记忆</value>
<comment>Screen reader prompt for the Calculator Clear Memory button in the Memory Pane</comment> <comment>Screen reader prompt for the Calculator Clear Memory button in the Memory Pane</comment>
</data> </data>
<data name="HistoryLabel.AccessKey" xml:space="preserve"> <data name="HistoryLabel.AccessKey" xml:space="preserve">
@ -3216,7 +3216,7 @@
<comment>Label for a radio button that toggles rotate circular behavior for the shift operations.</comment> <comment>Label for a radio button that toggles rotate circular behavior for the shift operations.</comment>
</data> </data>
<data name="rotateCarryShiftButton.Content" xml:space="preserve"> <data name="rotateCarryShiftButton.Content" xml:space="preserve">
<value>通过循环移位旋转</value> <value>带进位旋转循</value>
<comment>Label for a radio button that toggles rotate circular with carry behavior for the shift operations.</comment> <comment>Label for a radio button that toggles rotate circular with carry behavior for the shift operations.</comment>
</data> </data>
<data name="cubeRootButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="cubeRootButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
@ -4095,11 +4095,11 @@
<comment>Screen reader prompt for the graph options panel</comment> <comment>Screen reader prompt for the graph options panel</comment>
</data> </data>
<data name="DockPanel_HistoryMemoryLists" xml:space="preserve"> <data name="DockPanel_HistoryMemoryLists" xml:space="preserve">
<value>历史记录和内存列表</value> <value>历史记录和记忆列表</value>
<comment>Automation name for the group of controls for history and memory lists.</comment> <comment>Automation name for the group of controls for history and memory lists.</comment>
</data> </data>
<data name="DockPanel_MemoryList" xml:space="preserve"> <data name="DockPanel_MemoryList" xml:space="preserve">
<value>内存列表</value> <value>记忆列表</value>
<comment>Automation name for the group of controls for memory list.</comment> <comment>Automation name for the group of controls for memory list.</comment>
</data> </data>
<data name="Format_HistorySlotCleared" xml:space="preserve"> <data name="Format_HistorySlotCleared" xml:space="preserve">
@ -4123,11 +4123,11 @@
<comment>Label for a radio button that toggles logical shift behavior for the shift operations.</comment> <comment>Label for a radio button that toggles logical shift behavior for the shift operations.</comment>
</data> </data>
<data name="rotateCircularButtonSelected" xml:space="preserve"> <data name="rotateCircularButtonSelected" xml:space="preserve">
<value>旋转所选循环移位</value> <value>已选择旋转循环移位</value>
<comment>Label for a radio button that toggles rotate circular behavior for the shift operations.</comment> <comment>Label for a radio button that toggles rotate circular behavior for the shift operations.</comment>
</data> </data>
<data name="rotateCarryShiftButtonSelected" xml:space="preserve"> <data name="rotateCarryShiftButtonSelected" xml:space="preserve">
<value>通过所选循环移位旋转</value> <value>已选择带进位旋转循环移位</value>
<comment>Label for a radio button that toggles rotate circular with carry behavior for the shift operations.</comment> <comment>Label for a radio button that toggles rotate circular with carry behavior for the shift operations.</comment>
</data> </data>
</root> </root>

View file

@ -866,7 +866,9 @@
Checked="ShiftButton_Check" Checked="ShiftButton_Check"
Content="&#xF897;" Content="&#xF897;"
IsEnabledChanged="ShiftButton_IsEnabledChanged" IsEnabledChanged="ShiftButton_IsEnabledChanged"
Unchecked="ShiftButton_Check"/> Unchecked="ShiftButton_Check"
AllowFocusOnInteraction="False"
/>
<controls:CalculatorButton x:Name="PiButton" <controls:CalculatorButton x:Name="PiButton"
x:Uid="piButton" x:Uid="piButton"

View file

@ -135,6 +135,7 @@
Margin="8,0,8,-6" Margin="8,0,8,-6"
VerticalAlignment="Center" VerticalAlignment="Center"
DataContext="{x:Bind}" DataContext="{x:Bind}"
SmallChange="{x:Bind Step, Mode=TwoWay}"
StepFrequency="{x:Bind Step, Mode=TwoWay}" StepFrequency="{x:Bind Step, Mode=TwoWay}"
ValueChanged="Slider_ValueChanged" ValueChanged="Slider_ValueChanged"
Value="{x:Bind Value, Mode=TwoWay}" Value="{x:Bind Value, Mode=TwoWay}"

View file

@ -80,7 +80,7 @@ public
void AnnounceCategoryName(); void AnnounceCategoryName();
CalculatorApp::Calculator ^ m_calculator; CalculatorApp::Calculator ^ m_calculator;
GraphingCalculator^ m_graphingCalculator; GraphingCalculator ^ m_graphingCalculator;
CalculatorApp::UnitConverter ^ m_converter; CalculatorApp::UnitConverter ^ m_converter;
CalculatorApp::DateCalculator ^ m_dateCalculator; CalculatorApp::DateCalculator ^ m_dateCalculator;
CalculatorApp::SettingsPage ^ m_settings; CalculatorApp::SettingsPage ^ m_settings;

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Microsoft.UI.Xaml" version="2.4.3" targetFramework="native" /> <package id="Microsoft.UI.Xaml" version="2.4.3" targetFramework="native" />
<package id="Microsoft.WindowsCalculator.PGO" version="1.0.2" targetFramework="native" />
</packages> </packages>

View file

@ -726,16 +726,18 @@ namespace CalculatorManagerTest
Command::Command8, Command::Command3, Command::CommandAnd, Command::CommandNULL }; Command::Command8, Command::Command3, Command::CommandAnd, Command::CommandNULL };
TestDriver::Test(L"-120", L"53 NOR 83 AND ", commands2, true, false); TestDriver::Test(L"-120", L"53 NOR 83 AND ", commands2, true, false);
Command commands3[] = { Command::ModeProgrammer, Command::Command5, Command::CommandLSHF, Command commands3[] = {
Command::Command1, Command::CommandAnd, Command::CommandNULL }; Command::ModeProgrammer, Command::Command5, Command::CommandLSHF, Command::Command1, Command::CommandAnd, Command::CommandNULL
};
TestDriver::Test(L"10", L"5 Lsh 1 AND ", commands3, true, false); TestDriver::Test(L"10", L"5 Lsh 1 AND ", commands3, true, false);
Command commands5[] = { Command::ModeProgrammer, Command::Command5, Command::CommandRSHFL, Command commands5[] = {
Command::Command1, Command::CommandAnd, Command::CommandNULL }; Command::ModeProgrammer, Command::Command5, Command::CommandRSHFL, Command::Command1, Command::CommandAnd, Command::CommandNULL
};
TestDriver::Test(L"2", L"5 Rsh 1 AND ", commands5, true, false); TestDriver::Test(L"2", L"5 Rsh 1 AND ", commands5, true, false);
Command commands6[] = { Command::ModeProgrammer, Command::CommandBINPOS63, Command::CommandRSHF, Command commands6[] = { Command::ModeProgrammer, Command::CommandBINPOS63, Command::CommandRSHF, Command::Command5,
Command::Command5, Command::Command6, Command::CommandAnd, Command::CommandNULL }; Command::Command6, Command::CommandAnd, Command::CommandNULL };
TestDriver::Test(L"-128", L"-9223372036854775808 Rsh 56 AND ", commands6, true, false); TestDriver::Test(L"-128", L"-9223372036854775808 Rsh 56 AND ", commands6, true, false);
Command commands7[] = { Command::ModeProgrammer, Command::Command1, Command::CommandROL, Command::CommandNULL }; Command commands7[] = { Command::ModeProgrammer, Command::Command1, Command::CommandROL, Command::CommandNULL };
@ -1016,15 +1018,12 @@ namespace CalculatorManagerTest
void CalculatorManagerTest::CalculatorManagerTestBinaryOperatorReceived() void CalculatorManagerTest::CalculatorManagerTestBinaryOperatorReceived()
{ {
CalculatorManagerDisplayTester* pCalculatorDisplay = (CalculatorManagerDisplayTester *)m_calculatorDisplayTester.get(); CalculatorManagerDisplayTester* pCalculatorDisplay = (CalculatorManagerDisplayTester*)m_calculatorDisplayTester.get();
VERIFY_ARE_EQUAL(0, pCalculatorDisplay->GetBinaryOperatorReceivedCallCount()); VERIFY_ARE_EQUAL(0, pCalculatorDisplay->GetBinaryOperatorReceivedCallCount());
m_calculatorManager->SetStandardMode(); m_calculatorManager->SetStandardMode();
ExecuteCommands({ ExecuteCommands({ Command::Command1, Command::CommandADD });
Command::Command1,
Command::CommandADD
});
wstring display = pCalculatorDisplay->GetPrimaryDisplay(); wstring display = pCalculatorDisplay->GetPrimaryDisplay();
VERIFY_ARE_EQUAL(L"1", display); VERIFY_ARE_EQUAL(L"1", display);
@ -1035,17 +1034,12 @@ namespace CalculatorManagerTest
void CalculatorManagerTest::CalculatorManagerTestBinaryOperatorReceived_Multiple() void CalculatorManagerTest::CalculatorManagerTestBinaryOperatorReceived_Multiple()
{ {
CalculatorManagerDisplayTester* pCalculatorDisplay = (CalculatorManagerDisplayTester *)m_calculatorDisplayTester.get(); CalculatorManagerDisplayTester* pCalculatorDisplay = (CalculatorManagerDisplayTester*)m_calculatorDisplayTester.get();
VERIFY_ARE_EQUAL(0, pCalculatorDisplay->GetBinaryOperatorReceivedCallCount()); VERIFY_ARE_EQUAL(0, pCalculatorDisplay->GetBinaryOperatorReceivedCallCount());
m_calculatorManager->SetStandardMode(); m_calculatorManager->SetStandardMode();
ExecuteCommands({ ExecuteCommands({ Command::Command1, Command::CommandADD, Command::CommandSUB, Command::CommandMUL });
Command::Command1,
Command::CommandADD,
Command::CommandSUB,
Command::CommandMUL
});
wstring display = pCalculatorDisplay->GetPrimaryDisplay(); wstring display = pCalculatorDisplay->GetPrimaryDisplay();
VERIFY_ARE_EQUAL(L"1", display); VERIFY_ARE_EQUAL(L"1", display);
@ -1056,13 +1050,12 @@ namespace CalculatorManagerTest
void CalculatorManagerTest::CalculatorManagerTestBinaryOperatorReceived_LongInput() void CalculatorManagerTest::CalculatorManagerTestBinaryOperatorReceived_LongInput()
{ {
CalculatorManagerDisplayTester* pCalculatorDisplay = (CalculatorManagerDisplayTester *)m_calculatorDisplayTester.get(); CalculatorManagerDisplayTester* pCalculatorDisplay = (CalculatorManagerDisplayTester*)m_calculatorDisplayTester.get();
VERIFY_ARE_EQUAL(0, pCalculatorDisplay->GetBinaryOperatorReceivedCallCount()); VERIFY_ARE_EQUAL(0, pCalculatorDisplay->GetBinaryOperatorReceivedCallCount());
m_calculatorManager->SetStandardMode(); m_calculatorManager->SetStandardMode();
ExecuteCommands({ ExecuteCommands({ Command::Command1,
Command::Command1,
Command::CommandADD, Command::CommandADD,
Command::Command2, Command::Command2,
Command::CommandMUL, Command::CommandMUL,
@ -1072,8 +1065,7 @@ namespace CalculatorManagerTest
Command::Command5, Command::Command5,
Command::CommandDIV, Command::CommandDIV,
Command::Command5, Command::Command5,
Command::CommandEQU Command::CommandEQU });
});
wstring display = pCalculatorDisplay->GetPrimaryDisplay(); wstring display = pCalculatorDisplay->GetPrimaryDisplay();
VERIFY_ARE_EQUAL(L"5", display); VERIFY_ARE_EQUAL(L"5", display);
@ -1099,7 +1091,7 @@ namespace CalculatorManagerTest
Command commands5[] = { Command::Command2, Command::CommandMUL, Command::Command4, Command::CommandREC, Command::CommandNULL }; Command commands5[] = { Command::Command2, Command::CommandMUL, Command::Command4, Command::CommandREC, Command::CommandNULL };
TestDriver::Test(L"0.25", L"2 \x00D7 1/(4)", commands5); TestDriver::Test(L"0.25", L"2 \x00D7 1/(4)", commands5);
Command commands6[] = { Command::Command5, Command::CommandDIV, Command::Command6, Command::CommandPERCENT, Command::CommandNULL}; Command commands6[] = { Command::Command5, Command::CommandDIV, Command::Command6, Command::CommandPERCENT, Command::CommandNULL };
TestDriver::Test(L"0.06", L"5 \x00F7 0.06", commands6); TestDriver::Test(L"0.06", L"5 \x00F7 0.06", commands6);
Command commands7[] = { Command::Command4, Command::CommandSQRT, Command::CommandSUB, Command::CommandNULL }; Command commands7[] = { Command::Command4, Command::CommandSQRT, Command::CommandSUB, Command::CommandNULL };
@ -1135,7 +1127,8 @@ namespace CalculatorManagerTest
Command commands17[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandEQU, Command::CommandNULL }; Command commands17[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandEQU, Command::CommandNULL };
TestDriver::Test(L"3", L"1 + 2=", commands17); TestDriver::Test(L"3", L"1 + 2=", commands17);
Command commands18[] = { Command::Command2, Command::Command0, Command::CommandMUL, Command::Command0, Command::Command2, Command::CommandEQU, Command::CommandNULL }; Command commands18[] = { Command::Command2, Command::Command0, Command::CommandMUL, Command::Command0,
Command::Command2, Command::CommandEQU, Command::CommandNULL };
TestDriver::Test(L"40", L"20 \x00D7 2=", commands18); TestDriver::Test(L"40", L"20 \x00D7 2=", commands18);
Command commands19[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandADD, Command::CommandBACK, Command::CommandNULL }; Command commands19[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandADD, Command::CommandBACK, Command::CommandNULL };
@ -1153,7 +1146,8 @@ namespace CalculatorManagerTest
Command commands23[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandCENTR, Command::CommandNULL }; Command commands23[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandCENTR, Command::CommandNULL };
TestDriver::Test(L"0", L"1 + ", commands23); TestDriver::Test(L"0", L"1 + ", commands23);
Command commands24[] = { Command::Command1, Command::CommandMUL, Command::Command2, Command::CommandMUL, Command::Command3, Command::CommandMUL, Command::Command4, Command::CommandMUL, Command::Command5, Command::CommandMUL, Command::CommandNULL }; Command commands24[] = { Command::Command1, Command::CommandMUL, Command::Command2, Command::CommandMUL, Command::Command3, Command::CommandMUL,
Command::Command4, Command::CommandMUL, Command::Command5, Command::CommandMUL, Command::CommandNULL };
TestDriver::Test(L"120", L"120 \x00D7 ", commands24); TestDriver::Test(L"120", L"120 \x00D7 ", commands24);
} }

View file

@ -73,21 +73,13 @@ namespace CalculatorUnitTests
} }
VERIFY_ARE_EQUAL( VERIFY_ARE_EQUAL(
m_CopyPasteManager->ValidatePasteExpression( m_CopyPasteManager->ValidatePasteExpression(
StringReference(exp_TooLong.c_str()), StringReference(exp_TooLong.c_str()), ViewMode::Standard, CategoryGroupType::Calculator, NumberBase::Unknown, BitLength::BitLengthUnknown),
ViewMode::Standard,
CategoryGroupType::Calculator,
NumberBase::Unknown,
BitLength::BitLengthUnknown),
StringReference(exp_TooLong.c_str()), StringReference(exp_TooLong.c_str()),
L"Verify ValidatePasteExpression handles expressions up to max length"); L"Verify ValidatePasteExpression handles expressions up to max length");
exp_TooLong += L"1"; exp_TooLong += L"1";
VERIFY_ARE_EQUAL( VERIFY_ARE_EQUAL(
m_CopyPasteManager->ValidatePasteExpression( m_CopyPasteManager->ValidatePasteExpression(
StringReference(exp_TooLong.c_str()), StringReference(exp_TooLong.c_str()), ViewMode::Standard, CategoryGroupType::Calculator, NumberBase::Unknown, BitLength::BitLengthUnknown),
ViewMode::Standard,
CategoryGroupType::Calculator,
NumberBase::Unknown,
BitLength::BitLengthUnknown),
StringReference(L"NoOp"), StringReference(L"NoOp"),
L"Verify ValidatePasteExpression returns NoOp for strings over max length"); L"Verify ValidatePasteExpression returns NoOp for strings over max length");
@ -333,8 +325,7 @@ namespace CalculatorUnitTests
0, 0,
L"Verify Scientific mode maximum values"); L"Verify Scientific mode maximum values");
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::None, CategoryGroupType::Converter, NumberBase::Unknown, BitLength::BitLengthUnknown),
ViewMode::None, CategoryGroupType::Converter, NumberBase::Unknown, BitLength::BitLengthUnknown),
m_CopyPasteManager->MaxConverterInputLength, m_CopyPasteManager->MaxConverterInputLength,
0, 0,
L"Verify Converter mode maximum values"); L"Verify Converter mode maximum values");
@ -345,96 +336,79 @@ namespace CalculatorUnitTests
unsigned long long int ullByteMax = UINT8_MAX; unsigned long long int ullByteMax = UINT8_MAX;
Logger::WriteMessage(L"Verify Programmer Mode NumberBase::HexBase maximum values"); Logger::WriteMessage(L"Verify Programmer Mode NumberBase::HexBase maximum values");
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::HexBase, BitLength::BitLengthQWord),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::HexBase, BitLength::BitLengthQWord),
16u, 16u,
ullQwordMax); ullQwordMax);
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::HexBase, BitLength::BitLengthDWord),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::HexBase, BitLength::BitLengthDWord),
8u, 8u,
ullDwordMax); ullDwordMax);
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::HexBase, BitLength::BitLengthWord),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::HexBase, BitLength::BitLengthWord),
4u, 4u,
ullWordMax); ullWordMax);
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::HexBase, BitLength::BitLengthByte),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::HexBase, BitLength::BitLengthByte),
2u, 2u,
ullByteMax); ullByteMax);
Logger::WriteMessage(L"Verify Programmer Mode NumberBase::DecBase maximum values"); Logger::WriteMessage(L"Verify Programmer Mode NumberBase::DecBase maximum values");
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::DecBase, BitLength::BitLengthQWord),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::DecBase, BitLength::BitLengthQWord),
19u, 19u,
ullQwordMax >> 1); ullQwordMax >> 1);
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::DecBase, BitLength::BitLengthDWord),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::DecBase, BitLength::BitLengthDWord),
10u, 10u,
ullDwordMax >> 1); ullDwordMax >> 1);
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::DecBase, BitLength::BitLengthWord),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::DecBase, BitLength::BitLengthWord),
5u, 5u,
ullWordMax >> 1); ullWordMax >> 1);
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::DecBase, BitLength::BitLengthByte),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::DecBase, BitLength::BitLengthByte),
3u, 3u,
ullByteMax >> 1); ullByteMax >> 1);
Logger::WriteMessage(L"Verify Programmer Mode NumberBase::OctBase maximum values"); Logger::WriteMessage(L"Verify Programmer Mode NumberBase::OctBase maximum values");
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::OctBase, BitLength::BitLengthQWord),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::OctBase, BitLength::BitLengthQWord),
22u, 22u,
ullQwordMax); ullQwordMax);
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::OctBase, BitLength::BitLengthDWord),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::OctBase, BitLength::BitLengthDWord),
11u, 11u,
ullDwordMax); ullDwordMax);
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::OctBase, BitLength::BitLengthWord),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::OctBase, BitLength::BitLengthWord),
6u, 6u,
ullWordMax); ullWordMax);
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::OctBase, BitLength::BitLengthByte),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::OctBase, BitLength::BitLengthByte),
3u, 3u,
ullByteMax); ullByteMax);
Logger::WriteMessage(L"Verify Programmer Mode NumberBase::BinBase maximum values"); Logger::WriteMessage(L"Verify Programmer Mode NumberBase::BinBase maximum values");
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::BinBase, BitLength::BitLengthQWord),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::BinBase, BitLength::BitLengthQWord),
64u, 64u,
ullQwordMax); ullQwordMax);
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::BinBase, BitLength::BitLengthDWord),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::BinBase, BitLength::BitLengthDWord),
32u, 32u,
ullDwordMax); ullDwordMax);
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::BinBase, BitLength::BitLengthWord),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::BinBase, BitLength::BitLengthWord),
16u, 16u,
ullWordMax); ullWordMax);
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::Programmer, CategoryGroupType::None, NumberBase::BinBase, BitLength::BitLengthByte),
ViewMode::Programmer, CategoryGroupType::None, NumberBase::BinBase, BitLength::BitLengthByte),
8u, 8u,
ullByteMax); ullByteMax);
Logger::WriteMessage(L"Verify invalid ViewModes/Categories return 0 for max values"); Logger::WriteMessage(L"Verify invalid ViewModes/Categories return 0 for max values");
VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS( VERIFY_MAXOPERANDLENGTHANDVALUE_ARE_EQUALS(
m_CopyPasteManager->GetMaxOperandLengthAndValue( m_CopyPasteManager->GetMaxOperandLengthAndValue(ViewMode::None, CategoryGroupType::None, NumberBase::Unknown, BitLength::BitLengthUnknown),
ViewMode::None, CategoryGroupType::None, NumberBase::Unknown, BitLength::BitLengthUnknown),
0u, 0u,
0ull); 0ull);
}; };
@ -551,8 +525,7 @@ namespace CalculatorUnitTests
VERIFY_IS_NULL(CopyPasteManager::TryOperandToULL(L"0xFFFFFFFFFFFFFFFFF1", NumberBase::HexBase)); VERIFY_IS_NULL(CopyPasteManager::TryOperandToULL(L"0xFFFFFFFFFFFFFFFFF1", NumberBase::HexBase));
VERIFY_IS_NULL(CopyPasteManager::TryOperandToULL(L"18446744073709551616", NumberBase::DecBase)); VERIFY_IS_NULL(CopyPasteManager::TryOperandToULL(L"18446744073709551616", NumberBase::DecBase));
VERIFY_IS_NULL(CopyPasteManager::TryOperandToULL(L"2000000000000000000000", NumberBase::OctBase)); VERIFY_IS_NULL(CopyPasteManager::TryOperandToULL(L"2000000000000000000000", NumberBase::OctBase));
VERIFY_IS_NULL( VERIFY_IS_NULL(CopyPasteManager::TryOperandToULL(L"11111111111111111111111111111111111111111111111111111111111111111", NumberBase::BinBase));
CopyPasteManager::TryOperandToULL(L"11111111111111111111111111111111111111111111111111111111111111111", NumberBase::BinBase));
// Invalid values/characters // Invalid values/characters
VERIFY_IS_NULL(CopyPasteManager::TryOperandToULL(L"-1", NumberBase::DecBase)); VERIFY_IS_NULL(CopyPasteManager::TryOperandToULL(L"-1", NumberBase::DecBase));
VERIFY_IS_NULL(CopyPasteManager::TryOperandToULL(L"5555", NumberBase::BinBase)); VERIFY_IS_NULL(CopyPasteManager::TryOperandToULL(L"5555", NumberBase::BinBase));
@ -827,12 +800,17 @@ namespace CalculatorUnitTests
L"61%99" L"61%99"
L"-6.1%99", L"-6.1%99",
L"1.1111111111111111111111111111111e+1142" }; L"1.1111111111111111111111111111111e+1142" };
String String ^ negativeInput[] = { L"abcdef",
^ negativeInput[] = { L"abcdef", L"xyz", L"ABab", L"e+234", L"123456789123456781234567890123456" /*boundary condition: greater than 32 digits*/, L"xyz",
L"ABab",
L"e+234",
L"123456789123456781234567890123456" /*boundary condition: greater than 32 digits*/,
L"11.1111111111111111111111111111111e+1142", L"11.1111111111111111111111111111111e+1142",
L"1.1e+10001", /*boundary condition: exponent greater than 5 digits*/ 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"0.11111111111111111111111111111111111e+111111" /*boundary condition: both exponent and non exponent exceed limits*/
L"SIN(2)", L"2+2==", L"2=+2" }; L"SIN(2)",
L"2+2==",
L"2=+2" };
ASSERT_POSITIVE_TESTCASES(ValidateScientificPasteExpression, positiveInput); ASSERT_POSITIVE_TESTCASES(ValidateScientificPasteExpression, positiveInput);
ASSERT_NEGATIVE_TESTCASES(ValidateScientificPasteExpression, negativeInput); ASSERT_NEGATIVE_TESTCASES(ValidateScientificPasteExpression, negativeInput);
@ -1221,9 +1199,16 @@ namespace CalculatorUnitTests
void CopyPasteManagerTest::ValidateProgrammerOctPasteExpressionTest() void CopyPasteManagerTest::ValidateProgrammerOctPasteExpressionTest()
{ {
String ^ qwordPositiveInput[] = { L"123", L"123+456", L"1,234", L"1 2 3", L"1'2'3'4", L"1_2_3_4", L"\n\r1,234\n", L"\f\n1+2\t\r\v\x85", String ^ qwordPositiveInput[] = { L"123", L"123+456",
L"\n 1+\n2 ", L"1\"2", L"(123)+(456)", L"0t1234", L"0T1234", L"0o1234", L"0O1234", L"1234u", L"1,234", L"1 2 3",
L"1234ul", L"1234ULL", L"2+2=", L"2+2= ", L"1'2'3'4", L"1_2_3_4",
L"\n\r1,234\n", L"\f\n1+2\t\r\v\x85",
L"\n 1+\n2 ", L"1\"2",
L"(123)+(456)", L"0t1234",
L"0T1234", L"0o1234",
L"0O1234", L"1234u",
L"1234ul", L"1234ULL",
L"2+2=", L"2+2= ",
L"127%71", L"1777777777777777777777" /*boundary condition: the max allowed number*/ }; L"127%71", L"1777777777777777777777" /*boundary condition: the max allowed number*/ };
String ^ qwordNegativeInput[] = { L"+123", String ^ qwordNegativeInput[] = { L"+123",
L"1.23", L"1.23",
@ -1514,11 +1499,9 @@ namespace CalculatorUnitTests
ASSERT_POSITIVE_TESTCASES(ValidateProgrammerBinWordPasteExpression, wordPositiveInput); ASSERT_POSITIVE_TESTCASES(ValidateProgrammerBinWordPasteExpression, wordPositiveInput);
ASSERT_NEGATIVE_TESTCASES(ValidateProgrammerBinWordPasteExpression, wordNegativeInput); ASSERT_NEGATIVE_TESTCASES(ValidateProgrammerBinWordPasteExpression, wordNegativeInput);
String String ^ bytePositiveInput[] = { L"100", L"100+101", L"1,001", L"1 0 1", L"1'0'0'1", L"1_0_0_1", L"\n\r1,010\n", L"\n 1+\n1 ",
^ bytePositiveInput[] = { L"100", L"100+101", L"1,001", L"1 0 1", L"1'0'0'1", L"1_0_0_1", L"\n\r1,010\n", L"1\"1", L"(101)+(10)", L"0b1001", L"0B1111", L"0y1001", L"0Y1001", L"1100b", L"1101B",
L"\n 1+\n1 ", L"1\"1", L"(101)+(10)", L"0b1001", L"0B1111", L"0y1001", L"0Y1001", L"1111u", L"1111ul", L"1111ULL", L"10100010", L"11111111" /*boundary condition: max allowed number*/ };
L"1100b", L"1101B", L"1111u", L"1111ul", L"1111ULL", L"10100010",
L"11111111" /*boundary condition: max allowed number*/ };
String ^ byteNegativeInput[] = { L"+10101", String ^ byteNegativeInput[] = { L"+10101",
L"1.01", L"1.01",
L"1''0", L"1''0",

View file

@ -380,16 +380,17 @@ TEST_METHOD(Load_Success_LoadedFromWeb)
} }
; ;
TEST_CLASS(CurrencyConverterUnitTests){ TEST_CLASS(CurrencyConverterUnitTests)
{
const UCM::Category CURRENCY_CATEGORY = { NavCategory::Serialize(ViewMode::Currency), L"Currency", false /*supportsNegative*/ }; const UCM::Category CURRENCY_CATEGORY = { NavCategory::Serialize(ViewMode::Currency), L"Currency", false /*supportsNegative*/ };
const UCM::Unit GetUnit(const vector<UCM::Unit>& unitList, const wstring& target){ const UCM::Unit GetUnit(const vector<UCM::Unit>& unitList, const wstring& target)
{
return *find_if(begin(unitList), end(unitList), [&target](const UCM::Unit& u) { return u.abbreviation == target; }); return *find_if(begin(unitList), end(unitList), [&target](const UCM::Unit& u) { return u.abbreviation == target; });
} }
TEST_METHOD(Loaded_LoadOrderedUnits) TEST_METHOD(Loaded_LoadOrderedUnits)
{ {
StandardCacheSetup(); StandardCacheSetup();
CurrencyDataLoader loader(nullptr, L"en-US"); CurrencyDataLoader loader(nullptr, L"en-US");
@ -415,10 +416,10 @@ TEST_METHOD(Loaded_LoadOrderedUnits)
VERIFY_ARE_EQUAL(wstring(L"Europe - Euro"), eurUnit.name); VERIFY_ARE_EQUAL(wstring(L"Europe - Euro"), eurUnit.name);
VERIFY_ARE_EQUAL(wstring(L"EUR"), eurUnit.abbreviation); VERIFY_ARE_EQUAL(wstring(L"EUR"), eurUnit.abbreviation);
} }
TEST_METHOD(Loaded_LoadOrderedRatios) TEST_METHOD(Loaded_LoadOrderedRatios)
{ {
StandardCacheSetup(); StandardCacheSetup();
CurrencyDataLoader loader(nullptr, L"en-US"); CurrencyDataLoader loader(nullptr, L"en-US");
@ -448,10 +449,10 @@ TEST_METHOD(Loaded_LoadOrderedRatios)
UCM::ConversionData eurRatioData = ratios[eurUnit]; UCM::ConversionData eurRatioData = ratios[eurUnit];
VERIFY_IS_TRUE((std::abs(0.920503 - eurRatioData.ratio) < 1e-6)); VERIFY_IS_TRUE((std::abs(0.920503 - eurRatioData.ratio) < 1e-6));
} }
TEST_METHOD(Loaded_GetCurrencySymbols_Valid) TEST_METHOD(Loaded_GetCurrencySymbols_Valid)
{ {
StandardCacheSetup(); StandardCacheSetup();
CurrencyDataLoader loader(nullptr, L"en-US"); CurrencyDataLoader loader(nullptr, L"en-US");
@ -477,10 +478,10 @@ TEST_METHOD(Loaded_GetCurrencySymbols_Valid)
VERIFY_ARE_EQUAL(wstring(L"$"), symbols.first); VERIFY_ARE_EQUAL(wstring(L"$"), symbols.first);
VERIFY_ARE_EQUAL(wstring(L"\x20ac"), symbols.second); // € VERIFY_ARE_EQUAL(wstring(L"\x20ac"), symbols.second); // €
} }
TEST_METHOD(Loaded_GetCurrencySymbols_Invalid) TEST_METHOD(Loaded_GetCurrencySymbols_Invalid)
{ {
StandardCacheSetup(); StandardCacheSetup();
CurrencyDataLoader loader(nullptr, L"en-US"); CurrencyDataLoader loader(nullptr, L"en-US");
@ -520,10 +521,10 @@ TEST_METHOD(Loaded_GetCurrencySymbols_Invalid)
VERIFY_ARE_EQUAL(wstring(L""), symbols.first); VERIFY_ARE_EQUAL(wstring(L""), symbols.first);
VERIFY_ARE_EQUAL(wstring(L""), symbols.second); VERIFY_ARE_EQUAL(wstring(L""), symbols.second);
} }
TEST_METHOD(Loaded_GetCurrencyRatioEquality_Valid) TEST_METHOD(Loaded_GetCurrencyRatioEquality_Valid)
{ {
StandardCacheSetup(); StandardCacheSetup();
CurrencyDataLoader loader(nullptr, L"en-US"); CurrencyDataLoader loader(nullptr, L"en-US");
@ -549,10 +550,10 @@ TEST_METHOD(Loaded_GetCurrencyRatioEquality_Valid)
VERIFY_ARE_EQUAL(wstring(L"1 USD = 0.9205 EUR"), ratio.first); VERIFY_ARE_EQUAL(wstring(L"1 USD = 0.9205 EUR"), ratio.first);
VERIFY_ARE_EQUAL(wstring(L"1 United States Dollar = 0.9205 Europe Euro"), ratio.second); VERIFY_ARE_EQUAL(wstring(L"1 United States Dollar = 0.9205 Europe Euro"), ratio.second);
} }
TEST_METHOD(Loaded_GetCurrencyRatioEquality_Invalid) TEST_METHOD(Loaded_GetCurrencyRatioEquality_Invalid)
{ {
StandardCacheSetup(); StandardCacheSetup();
CurrencyDataLoader loader(nullptr, L"en-US"); CurrencyDataLoader loader(nullptr, L"en-US");
@ -591,10 +592,10 @@ TEST_METHOD(Loaded_GetCurrencyRatioEquality_Invalid)
VERIFY_ARE_EQUAL(wstring(L""), ratio.first); VERIFY_ARE_EQUAL(wstring(L""), ratio.first);
VERIFY_ARE_EQUAL(wstring(L""), ratio.second); VERIFY_ARE_EQUAL(wstring(L""), ratio.second);
} }
TEST_METHOD(Test_RoundCurrencyRatio) TEST_METHOD(Test_RoundCurrencyRatio)
{ {
CurrencyDataLoader loader{ nullptr }; CurrencyDataLoader loader{ nullptr };
VERIFY_ARE_EQUAL(CurrencyDataLoader::RoundCurrencyRatio(1234567), 1234567); VERIFY_ARE_EQUAL(CurrencyDataLoader::RoundCurrencyRatio(1234567), 1234567);
VERIFY_ARE_EQUAL(CurrencyDataLoader::RoundCurrencyRatio(0), 0); VERIFY_ARE_EQUAL(CurrencyDataLoader::RoundCurrencyRatio(0), 0);
@ -623,7 +624,6 @@ TEST_METHOD(Test_RoundCurrencyRatio)
VERIFY_ARE_EQUAL(CurrencyDataLoader::RoundCurrencyRatio(0.0000032169348392), 0.000003217); VERIFY_ARE_EQUAL(CurrencyDataLoader::RoundCurrencyRatio(0.0000032169348392), 0.000003217);
VERIFY_ARE_EQUAL(CurrencyDataLoader::RoundCurrencyRatio(0.000000002134987218), 0.000000002135); VERIFY_ARE_EQUAL(CurrencyDataLoader::RoundCurrencyRatio(0.000000002134987218), 0.000000002135);
VERIFY_ARE_EQUAL(CurrencyDataLoader::RoundCurrencyRatio(0.000000000000087231445), 0.00000000000008723); VERIFY_ARE_EQUAL(CurrencyDataLoader::RoundCurrencyRatio(0.000000000000087231445), 0.00000000000008723);
} }
} };
;
} }

View file

@ -411,124 +411,149 @@ namespace CalculatorFunctionalTests
Cleanup(); Cleanup();
} }
void HistoryStandardOrderOfOperations_1() { void HistoryStandardOrderOfOperations_1()
Command commands[] = { Command::Command1, Command::CommandREC }; {
Command commands[] = { Command::Command1, Command::CommandREC, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"", L"", commands); HistoryStandardOrderOfOperationsHelper(L"", L"", commands);
} }
void HistoryStandardOrderOfOperations_2() { void HistoryStandardOrderOfOperations_2()
Command commands[] = { Command::Command4, Command::CommandSQRT }; {
Command commands[] = { Command::Command4, Command::CommandSQRT, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"", L"", commands); HistoryStandardOrderOfOperationsHelper(L"", L"", commands);
} }
void HistoryStandardOrderOfOperations_3() { void HistoryStandardOrderOfOperations_3()
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command4, Command::CommandSQRT }; {
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command4, Command::CommandSQRT, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"", L"", commands); HistoryStandardOrderOfOperationsHelper(L"", L"", commands);
} }
void HistoryStandardOrderOfOperations_4() { void HistoryStandardOrderOfOperations_4()
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command4, Command::CommandSQRT, Command::CommandSUB }; {
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command4, Command::CommandSQRT, Command::CommandSUB, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"3", L"1 + \x221A( 4 ) =", commands); HistoryStandardOrderOfOperationsHelper(L"3", L"1 + \x221A( 4 ) =", commands);
} }
void HistoryStandardOrderOfOperations_5() { void HistoryStandardOrderOfOperations_5()
Command commands[] = { Command::Command2, Command::CommandMUL, Command::Command4, Command::CommandREC }; {
Command commands[] = { Command::Command2, Command::CommandMUL, Command::Command4, Command::CommandREC, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"", L"", commands); HistoryStandardOrderOfOperationsHelper(L"", L"", commands);
} }
void HistoryStandardOrderOfOperations_6() { void HistoryStandardOrderOfOperations_6()
Command commands[] = { Command::Command5, Command::CommandDIV, Command::Command6, Command::CommandPERCENT }; {
Command commands[] = { Command::Command5, Command::CommandDIV, Command::Command6, Command::CommandPERCENT, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"", L"", commands); HistoryStandardOrderOfOperationsHelper(L"", L"", commands);
} }
void HistoryStandardOrderOfOperations_7() { void HistoryStandardOrderOfOperations_7()
Command commands[] = { Command::Command4, Command::CommandSQRT, Command::CommandSUB }; {
Command commands[] = { Command::Command4, Command::CommandSQRT, Command::CommandSUB, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"", L"", commands); HistoryStandardOrderOfOperationsHelper(L"", L"", commands);
} }
void HistoryStandardOrderOfOperations_8() { void HistoryStandardOrderOfOperations_8()
Command commands[] = { Command::Command7, Command::CommandSQR, Command::CommandDIV }; {
Command commands[] = { Command::Command7, Command::CommandSQR, Command::CommandDIV, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"", L"", commands); HistoryStandardOrderOfOperationsHelper(L"", L"", commands);
} }
void HistoryStandardOrderOfOperations_9() { void HistoryStandardOrderOfOperations_9()
Command commands[] = { Command::Command8, Command::CommandSQR, Command::CommandSQRT }; {
Command commands[] = { Command::Command8, Command::CommandSQR, Command::CommandSQRT, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"", L"", commands); HistoryStandardOrderOfOperationsHelper(L"", L"", commands);
} }
void HistoryStandardOrderOfOperations_10() { void HistoryStandardOrderOfOperations_10()
Command commands[] = { Command::Command1, Command::Command0, Command::CommandADD, Command::Command2, Command::CommandSUB }; {
Command commands[] = { Command::Command1, Command::Command0, Command::CommandADD, Command::Command2, Command::CommandSUB, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"12", L"10 + 2 =", commands); HistoryStandardOrderOfOperationsHelper(L"12", L"10 + 2 =", commands);
} }
void HistoryStandardOrderOfOperations_11() { void HistoryStandardOrderOfOperations_11()
Command commands[] = { Command::Command3, Command::CommandMUL, Command::Command4, Command::CommandDIV }; {
Command commands[] = { Command::Command3, Command::CommandMUL, Command::Command4, Command::CommandDIV, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"12", L"3 \x00D7 4 =", commands); HistoryStandardOrderOfOperationsHelper(L"12", L"3 \x00D7 4 =", commands);
} }
void HistoryStandardOrderOfOperations_12() { void HistoryStandardOrderOfOperations_12()
Command commands[] = { Command::Command6, Command::CommandDIV, Command::Command3, Command::CommandSUB, Command::CommandADD }; {
Command commands[] = { Command::Command6, Command::CommandDIV, Command::Command3, Command::CommandSUB, Command::CommandADD, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"2", L"6 \x00F7 3 =", commands); HistoryStandardOrderOfOperationsHelper(L"2", L"6 \x00F7 3 =", commands);
} }
void HistoryStandardOrderOfOperations_13() { void HistoryStandardOrderOfOperations_13()
Command commands[] = { Command::Command7, Command::CommandSUB, Command::Command4, Command::CommandDIV, Command::CommandMUL }; {
Command commands[] = { Command::Command7, Command::CommandSUB, Command::Command4, Command::CommandDIV, Command::CommandMUL, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"3", L"7 - 4 =", commands); HistoryStandardOrderOfOperationsHelper(L"3", L"7 - 4 =", commands);
} }
void HistoryStandardOrderOfOperations_14() { void HistoryStandardOrderOfOperations_14()
Command commands[] = { Command::Command8, Command::CommandMUL, Command::Command2, Command::CommandADD, Command::CommandSQRT }; {
Command commands[] = { Command::Command8, Command::CommandMUL, Command::Command2, Command::CommandADD, Command::CommandSQRT, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"16", L"8 \x00D7 2 =", commands); HistoryStandardOrderOfOperationsHelper(L"16", L"8 \x00D7 2 =", commands);
} }
void HistoryStandardOrderOfOperations_15() { void HistoryStandardOrderOfOperations_15()
Command commands[] = { Command::Command9, Command::CommandADD, Command::Command0, Command::CommandMUL, Command::CommandSIGN }; {
Command commands[] = { Command::Command9, Command::CommandADD, Command::Command0, Command::CommandMUL, Command::CommandSIGN, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"9", L"9 + 0 =", commands); HistoryStandardOrderOfOperationsHelper(L"9", L"9 + 0 =", commands);
} }
void HistoryStandardOrderOfOperations_16() { void HistoryStandardOrderOfOperations_16()
Command commands[] = { Command::Command9, Command::CommandSIGN, Command::Command0, Command::CommandADD, Command::CommandMUL }; {
Command commands[] = { Command::Command9, Command::CommandSIGN, Command::Command0, Command::CommandADD, Command::CommandMUL, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"", L"", commands); HistoryStandardOrderOfOperationsHelper(L"", L"", commands);
} }
void HistoryStandardOrderOfOperations_17() { void HistoryStandardOrderOfOperations_17()
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandEQU }; {
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandEQU, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"3", L"1 + 2 =", commands); HistoryStandardOrderOfOperationsHelper(L"3", L"1 + 2 =", commands);
} }
void HistoryStandardOrderOfOperations_18() { void HistoryStandardOrderOfOperations_18()
Command commands[] = { Command::Command2, Command::Command0, Command::CommandMUL, Command::Command0, Command::Command2, Command::CommandEQU }; {
Command commands[] = { Command::Command2, Command::Command0, Command::CommandMUL, Command::Command0, Command::Command2, Command::CommandEQU, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"40", L"20 \x00D7 2 =", commands); HistoryStandardOrderOfOperationsHelper(L"40", L"20 \x00D7 2 =", commands);
} }
void HistoryStandardOrderOfOperations_19() { void HistoryStandardOrderOfOperations_19()
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandADD, Command::CommandBACK }; {
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandADD, Command::CommandBACK, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"3", L"1 + 2 =", commands); HistoryStandardOrderOfOperationsHelper(L"3", L"1 + 2 =", commands);
} }
void HistoryStandardOrderOfOperations_20() { void HistoryStandardOrderOfOperations_20()
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandADD, Command::CommandCLEAR }; {
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandADD, Command::CommandCLEAR, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"3", L"1 + 2 =", commands); HistoryStandardOrderOfOperationsHelper(L"3", L"1 + 2 =", commands);
} }
void HistoryStandardOrderOfOperations_21() { void HistoryStandardOrderOfOperations_21()
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandADD, Command::CommandCENTR }; {
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandADD, Command::CommandCENTR, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"3", L"1 + 2 =", commands); HistoryStandardOrderOfOperationsHelper(L"3", L"1 + 2 =", commands);
} }
void HistoryStandardOrderOfOperations_22() { void HistoryStandardOrderOfOperations_22()
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandCLEAR }; {
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandCLEAR, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"", L"", commands); HistoryStandardOrderOfOperationsHelper(L"", L"", commands);
} }
void HistoryStandardOrderOfOperations_23() { void HistoryStandardOrderOfOperations_23()
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandCENTR }; {
Command commands[] = { Command::Command1, Command::CommandADD, Command::Command2, Command::CommandCENTR, Command::CommandNULL };
HistoryStandardOrderOfOperationsHelper(L"", L"", commands); HistoryStandardOrderOfOperationsHelper(L"", L"", commands);
} }
void HistoryStandardOrderOfOperationsMultiple() { void HistoryStandardOrderOfOperationsMultiple()
{
Initialize(); Initialize();
Command commands[] = { Command::Command1, Command::CommandMUL, Command::Command2, Command::CommandMUL, Command::Command3, Command::CommandMUL, Command::Command4, Command::CommandMUL, Command::Command5, Command::CommandMUL }; Command commands[] = { Command::Command1, Command::CommandMUL, Command::Command2, Command::CommandMUL, Command::Command3,
Command::CommandMUL, Command::Command4, Command::CommandMUL, Command::Command5, Command::CommandMUL, Command::CommandNULL };
int initialSize = m_historyViewModel->ItemsCount; int initialSize = m_historyViewModel->ItemsCount;
Command* currentCommand = commands; Command* currentCommand = commands;
while (*currentCommand != Command::CommandNULL) while (*currentCommand != Command::CommandNULL)
@ -613,99 +638,123 @@ namespace CalculatorFunctionalTests
HistoryClearCommandWithEmptyHistory(); HistoryClearCommandWithEmptyHistory();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_1(){ void HistoryTests::TestHistoryStandardOrderOfOperations_1()
{
HistoryStandardOrderOfOperations_1(); HistoryStandardOrderOfOperations_1();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_2(){ void HistoryTests::TestHistoryStandardOrderOfOperations_2()
{
HistoryStandardOrderOfOperations_2(); HistoryStandardOrderOfOperations_2();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_3(){ void HistoryTests::TestHistoryStandardOrderOfOperations_3()
{
HistoryStandardOrderOfOperations_3(); HistoryStandardOrderOfOperations_3();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_4(){ void HistoryTests::TestHistoryStandardOrderOfOperations_4()
{
HistoryStandardOrderOfOperations_4(); HistoryStandardOrderOfOperations_4();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_5(){ void HistoryTests::TestHistoryStandardOrderOfOperations_5()
{
HistoryStandardOrderOfOperations_5(); HistoryStandardOrderOfOperations_5();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_6(){ void HistoryTests::TestHistoryStandardOrderOfOperations_6()
{
HistoryStandardOrderOfOperations_6(); HistoryStandardOrderOfOperations_6();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_7(){ void HistoryTests::TestHistoryStandardOrderOfOperations_7()
{
HistoryStandardOrderOfOperations_7(); HistoryStandardOrderOfOperations_7();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_8(){ void HistoryTests::TestHistoryStandardOrderOfOperations_8()
{
HistoryStandardOrderOfOperations_8(); HistoryStandardOrderOfOperations_8();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_9(){ void HistoryTests::TestHistoryStandardOrderOfOperations_9()
{
HistoryStandardOrderOfOperations_9(); HistoryStandardOrderOfOperations_9();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_10(){ void HistoryTests::TestHistoryStandardOrderOfOperations_10()
{
HistoryStandardOrderOfOperations_10(); HistoryStandardOrderOfOperations_10();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_11(){ void HistoryTests::TestHistoryStandardOrderOfOperations_11()
{
HistoryStandardOrderOfOperations_11(); HistoryStandardOrderOfOperations_11();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_12(){ void HistoryTests::TestHistoryStandardOrderOfOperations_12()
{
HistoryStandardOrderOfOperations_12(); HistoryStandardOrderOfOperations_12();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_13(){ void HistoryTests::TestHistoryStandardOrderOfOperations_13()
{
HistoryStandardOrderOfOperations_13(); HistoryStandardOrderOfOperations_13();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_14(){ void HistoryTests::TestHistoryStandardOrderOfOperations_14()
{
HistoryStandardOrderOfOperations_14(); HistoryStandardOrderOfOperations_14();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_15(){ void HistoryTests::TestHistoryStandardOrderOfOperations_15()
{
HistoryStandardOrderOfOperations_15(); HistoryStandardOrderOfOperations_15();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_16(){ void HistoryTests::TestHistoryStandardOrderOfOperations_16()
{
HistoryStandardOrderOfOperations_16(); HistoryStandardOrderOfOperations_16();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_17(){ void HistoryTests::TestHistoryStandardOrderOfOperations_17()
{
HistoryStandardOrderOfOperations_17(); HistoryStandardOrderOfOperations_17();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_18(){ void HistoryTests::TestHistoryStandardOrderOfOperations_18()
{
HistoryStandardOrderOfOperations_18(); HistoryStandardOrderOfOperations_18();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_19(){ void HistoryTests::TestHistoryStandardOrderOfOperations_19()
{
HistoryStandardOrderOfOperations_19(); HistoryStandardOrderOfOperations_19();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_20(){ void HistoryTests::TestHistoryStandardOrderOfOperations_20()
{
HistoryStandardOrderOfOperations_20(); HistoryStandardOrderOfOperations_20();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_21(){ void HistoryTests::TestHistoryStandardOrderOfOperations_21()
{
HistoryStandardOrderOfOperations_21(); HistoryStandardOrderOfOperations_21();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_22(){ void HistoryTests::TestHistoryStandardOrderOfOperations_22()
{
HistoryStandardOrderOfOperations_22(); HistoryStandardOrderOfOperations_22();
} }
void HistoryTests::TestHistoryStandardOrderOfOperations_23(){ void HistoryTests::TestHistoryStandardOrderOfOperations_23()
{
HistoryStandardOrderOfOperations_23(); HistoryStandardOrderOfOperations_23();
} }
void HistoryTests::TestHistoryStandardOrderOfOperationsMultiple(){ void HistoryTests::TestHistoryStandardOrderOfOperationsMultiple()
{
HistoryStandardOrderOfOperationsMultiple(); HistoryStandardOrderOfOperationsMultiple();
} }
} }

View file

@ -14,130 +14,70 @@ using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace CalculatorUnitTests namespace CalculatorUnitTests
{ {
TEST_CLASS(LocalizationServiceUnitTests) TEST_CLASS(LocalizationServiceUnitTests){ public:
{
public:
TEST_METHOD(TestSortStrings) TEST_METHOD(TestSortStrings){ auto localizationService = LocalizationService::GetInstance();
{ vector<String ^> stringsToSort = {
auto localizationService = LocalizationService::GetInstance(); L"Zebra", L"Alpha", L"beta1", L"Gamma", L"Beta", L"alpha1", L"États-Unis", L"Epsilon", L"Etude",
vector<String^> stringsToSort =
{
L"Zebra",
L"Alpha",
L"beta1",
L"Gamma",
L"Beta",
L"alpha1",
L"États-Unis",
L"Epsilon",
L"Etude",
}; };
vector<String^> expectedResult = vector<String ^> expectedResult = {
{ L"Alpha", L"alpha1", L"Beta", L"beta1", L"Epsilon", L"États-Unis", L"Etude", L"Gamma", L"Zebra",
L"Alpha",
L"alpha1",
L"Beta",
L"beta1",
L"Epsilon",
L"États-Unis",
L"Etude",
L"Gamma",
L"Zebra",
}; };
VERIFY_ARE_EQUAL(stringsToSort.size(), expectedResult.size()); VERIFY_ARE_EQUAL(stringsToSort.size(), expectedResult.size());
VERIFY_IS_FALSE(equal(stringsToSort.begin(), stringsToSort.end(), expectedResult.begin())); VERIFY_IS_FALSE(equal(stringsToSort.begin(), stringsToSort.end(), expectedResult.begin()));
localizationService->Sort(stringsToSort); localizationService->Sort(stringsToSort);
VERIFY_IS_TRUE(equal(stringsToSort.begin(), stringsToSort.end(), expectedResult.begin())); VERIFY_IS_TRUE(equal(stringsToSort.begin(), stringsToSort.end(), expectedResult.begin()));
} }
TEST_METHOD(TestSortEmptyStrings) TEST_METHOD(TestSortEmptyStrings)
{ {
//Verify if LocalizationService::Sort doesn't crash when the vector is empty or null // Verify if LocalizationService::Sort doesn't crash when the vector is empty or null
auto localizationService = LocalizationService::GetInstance(); auto localizationService = LocalizationService::GetInstance();
vector<String^> stringsToSort = {}; vector<String ^> stringsToSort = {};
localizationService->Sort(stringsToSort); localizationService->Sort(stringsToSort);
stringsToSort = { L"" }; stringsToSort = { L"" };
localizationService->Sort(stringsToSort); localizationService->Sort(stringsToSort);
stringsToSort = { L"",L"",L"" }; stringsToSort = { L"", L"", L"" };
localizationService->Sort(stringsToSort); localizationService->Sort(stringsToSort);
stringsToSort = { nullptr,L"",L"" }; stringsToSort = { nullptr, L"", L"" };
localizationService->Sort(stringsToSort); localizationService->Sort(stringsToSort);
} }
TEST_METHOD(TestSortGeneric) TEST_METHOD(TestSortGeneric)
{ {
vector<String^> stringsToSort = vector<String ^> stringsToSort = {
{ L"fermentum", L"fringilla", L"Curabitur", L"rhoncus", L"Aenean", L"Fusce",
L"fermentum", L"sollicitudin", L"empor", L"edapibus", L"édapibas", L"édapîbos", L"édapîbÉs",
L"fringilla",
L"Curabitur",
L"rhoncus",
L"Aenean",
L"Fusce",
L"sollicitudin",
L"empor",
L"edapibus",
L"édapibas",
L"édapîbos",
L"édapîbÉs",
}; };
vector<String^> expectedResult = vector<String ^> expectedResult = {
{ L"Aenean", L"Curabitur", L"édapibas", L"édapîbÉs", L"édapîbos", L"edapibus",
L"Aenean", L"empor", L"fermentum", L"fringilla", L"Fusce", L"rhoncus", L"sollicitudin",
L"Curabitur",
L"édapibas",
L"édapîbÉs",
L"édapîbos",
L"edapibus",
L"empor",
L"fermentum",
L"fringilla",
L"Fusce",
L"rhoncus",
L"sollicitudin",
}; };
auto sortFunction = [](String ^ s) { return ref new String(L"CAL:") + s + L"TEST"; };
auto sortFunction = [](String^ s) {
return ref new String(L"CAL:") + s + L"TEST";
};
VERIFY_ARE_EQUAL(stringsToSort.size(), expectedResult.size()); VERIFY_ARE_EQUAL(stringsToSort.size(), expectedResult.size());
VERIFY_IS_FALSE(equal(stringsToSort.begin(), stringsToSort.end(), expectedResult.begin())); VERIFY_IS_FALSE(equal(stringsToSort.begin(), stringsToSort.end(), expectedResult.begin()));
auto localizationService = LocalizationService::GetInstance(); auto localizationService = LocalizationService::GetInstance();
localizationService->Sort<String^>(stringsToSort, sortFunction); localizationService->Sort<String ^>(stringsToSort, sortFunction);
VERIFY_IS_TRUE(equal(stringsToSort.begin(), stringsToSort.end(), expectedResult.begin())); VERIFY_IS_TRUE(equal(stringsToSort.begin(), stringsToSort.end(), expectedResult.begin()));
vector<String^> expected2Result = vector<String ^> expected2Result = {
{ L"édapibas", L"édapîbÉs", L"édapîbos", L"edapibus", L"Aenean", L"fermentum",
L"édapibas", L"rhoncus", L"empor", L"sollicitudin", L"fringilla", L"Curabitur", L"Fusce",
L"édapîbÉs",
L"édapîbos",
L"edapibus",
L"Aenean",
L"fermentum",
L"rhoncus",
L"empor",
L"sollicitudin",
L"fringilla",
L"Curabitur",
L"Fusce",
}; };
auto sort2Function = [](String^ s) { auto sort2Function = [](String ^ s) { return ref new String(s->Begin() + 1); };
return ref new String(s->Begin()+1);
};
VERIFY_ARE_EQUAL(stringsToSort.size(), expected2Result.size()); VERIFY_ARE_EQUAL(stringsToSort.size(), expected2Result.size());
VERIFY_IS_FALSE(equal(stringsToSort.begin(), stringsToSort.end(), expected2Result.begin())); VERIFY_IS_FALSE(equal(stringsToSort.begin(), stringsToSort.end(), expected2Result.begin()));
localizationService->Sort<String^>(stringsToSort, sort2Function); localizationService->Sort<String ^>(stringsToSort, sort2Function);
VERIFY_IS_TRUE(equal(stringsToSort.begin(), stringsToSort.end(), expected2Result.begin())); VERIFY_IS_TRUE(equal(stringsToSort.begin(), stringsToSort.end(), expected2Result.begin()));
}
} }
}; ;
} }

View file

@ -18,18 +18,13 @@ static Windows::Globalization::NumberFormatting::DecimalFormatter ^ CreateDecima
namespace CalculatorUnitTests namespace CalculatorUnitTests
{ {
TEST_CLASS(LocalizationSettingsUnitTests) TEST_CLASS(LocalizationSettingsUnitTests){ public: TEST_METHOD(TestLocaleName){ auto formatter = CreateDecimalFormatter(L"en-US", L"US");
{
public:
TEST_METHOD(TestLocaleName)
{
auto formatter = CreateDecimalFormatter(L"en-US", L"US");
LocalizationSettings settings(formatter); LocalizationSettings settings(formatter);
VERIFY_ARE_EQUAL(L"en-US", settings.GetLocaleName()); VERIFY_ARE_EQUAL(L"en-US", settings.GetLocaleName());
} }
TEST_METHOD(TestIsDigitEnUsSetting) TEST_METHOD(TestIsDigitEnUsSetting)
{ {
auto arabicFormatter = CreateDecimalFormatter(L"ar-AE", L"AE"); auto arabicFormatter = CreateDecimalFormatter(L"ar-AE", L"AE");
LocalizationSettings arabicSettings(arabicFormatter); LocalizationSettings arabicSettings(arabicFormatter);
VERIFY_IS_FALSE(arabicSettings.IsDigitEnUsSetting()); VERIFY_IS_FALSE(arabicSettings.IsDigitEnUsSetting());
@ -37,26 +32,26 @@ namespace CalculatorUnitTests
auto englishFormatter = CreateDecimalFormatter(L"en-US", L"US"); auto englishFormatter = CreateDecimalFormatter(L"en-US", L"US");
LocalizationSettings englishSettings(englishFormatter); LocalizationSettings englishSettings(englishFormatter);
VERIFY_IS_TRUE(englishSettings.IsDigitEnUsSetting()); VERIFY_IS_TRUE(englishSettings.IsDigitEnUsSetting());
} }
TEST_METHOD(TestLocalizeDisplayValue) TEST_METHOD(TestLocalizeDisplayValue)
{ {
auto formatter = CreateDecimalFormatter(L"ar-AE", L"AE"); auto formatter = CreateDecimalFormatter(L"ar-AE", L"AE");
LocalizationSettings settings(formatter); LocalizationSettings settings(formatter);
std::wstring input(L"A123"); std::wstring input(L"A123");
settings.LocalizeDisplayValue(&input); settings.LocalizeDisplayValue(&input);
VERIFY_ARE_EQUAL(L"A١٢٣", input); VERIFY_ARE_EQUAL(L"A١٢٣", input);
} }
TEST_METHOD(TestGetEnglishValueFromLocalizedDigits) TEST_METHOD(TestGetEnglishValueFromLocalizedDigits)
{ {
auto formatter = CreateDecimalFormatter(L"ar-AE", L"AE"); auto formatter = CreateDecimalFormatter(L"ar-AE", L"AE");
LocalizationSettings settings(formatter); LocalizationSettings settings(formatter);
VERIFY_ARE_EQUAL(L"A123", settings.GetEnglishValueFromLocalizedDigits(L"A١٢٣")); VERIFY_ARE_EQUAL(L"A123", settings.GetEnglishValueFromLocalizedDigits(L"A١٢٣"));
} }
TEST_METHOD(TestIsEnUsDigit) TEST_METHOD(TestIsEnUsDigit)
{ {
auto& settings = LocalizationSettings::GetInstance(); auto& settings = LocalizationSettings::GetInstance();
VERIFY_IS_FALSE(settings.IsEnUsDigit(L'/')); VERIFY_IS_FALSE(settings.IsEnUsDigit(L'/'));
VERIFY_IS_TRUE(settings.IsEnUsDigit(L'0')); VERIFY_IS_TRUE(settings.IsEnUsDigit(L'0'));
@ -64,30 +59,31 @@ namespace CalculatorUnitTests
VERIFY_IS_TRUE(settings.IsEnUsDigit(L'8')); VERIFY_IS_TRUE(settings.IsEnUsDigit(L'8'));
VERIFY_IS_TRUE(settings.IsEnUsDigit(L'9')); VERIFY_IS_TRUE(settings.IsEnUsDigit(L'9'));
VERIFY_IS_FALSE(settings.IsEnUsDigit(L':')); VERIFY_IS_FALSE(settings.IsEnUsDigit(L':'));
} }
TEST_METHOD(TestIsLocalizedDigit) TEST_METHOD(TestIsLocalizedDigit)
{ {
auto formatter = CreateDecimalFormatter(L"en-US", L"US"); auto formatter = CreateDecimalFormatter(L"en-US", L"US");
LocalizationSettings settings(formatter); LocalizationSettings settings(formatter);
VERIFY_IS_TRUE(settings.IsLocalizedDigit(L'0')); VERIFY_IS_TRUE(settings.IsLocalizedDigit(L'0'));
VERIFY_IS_FALSE(settings.IsLocalizedDigit(L'A')); VERIFY_IS_FALSE(settings.IsLocalizedDigit(L'A'));
} }
TEST_METHOD(TestIsLocalizedHexDigit) TEST_METHOD(TestIsLocalizedHexDigit)
{ {
auto formatter = CreateDecimalFormatter(L"en-US", L"US"); auto formatter = CreateDecimalFormatter(L"en-US", L"US");
LocalizationSettings settings(formatter); LocalizationSettings settings(formatter);
VERIFY_IS_TRUE(settings.IsLocalizedHexDigit(L'0')); VERIFY_IS_TRUE(settings.IsLocalizedHexDigit(L'0'));
VERIFY_IS_TRUE(settings.IsLocalizedHexDigit(L'A')); VERIFY_IS_TRUE(settings.IsLocalizedHexDigit(L'A'));
VERIFY_IS_FALSE(settings.IsLocalizedHexDigit(L'G')); VERIFY_IS_FALSE(settings.IsLocalizedHexDigit(L'G'));
} }
TEST_METHOD(TestRemoveGroupSeparators) TEST_METHOD(TestRemoveGroupSeparators)
{ {
auto formatter = CreateDecimalFormatter(L"en-US", L"US"); auto formatter = CreateDecimalFormatter(L"en-US", L"US");
LocalizationSettings settings(formatter); LocalizationSettings settings(formatter);
VERIFY_ARE_EQUAL(L"1000000", settings.RemoveGroupSeparators(L"1,000 000")); VERIFY_ARE_EQUAL(L"1000000", settings.RemoveGroupSeparators(L"1,000 000"));
} }
}; }
;
} }

View file

@ -460,7 +460,7 @@ TEST_METHOD(MultipleStandardModesHistoryAddItemTest)
{ {
VERIFY_IS_TRUE(2 == viewModels[i]->HistoryVM->ItemsCount); VERIFY_IS_TRUE(2 == viewModels[i]->HistoryVM->ItemsCount);
for (int j = 0; j < 2 ; j++) for (int j = 0; j < 2; j++)
{ {
auto item = static_cast<HistoryItemViewModel ^>(viewModels[i]->HistoryVM->Items->GetAt(j)); auto item = static_cast<HistoryItemViewModel ^>(viewModels[i]->HistoryVM->Items->GetAt(j));

View file

@ -4,12 +4,10 @@
#include <CppUnitTest.h> #include <CppUnitTest.h>
using namespace Windows::UI::Xaml::Automation::Peers; using namespace Windows::UI::Xaml::Automation::Peers;
using namespace Microsoft::VisualStudio::CppUnitTestFramework; using namespace Microsoft::VisualStudio::CppUnitTestFramework;
using namespace CalculatorApp::Common::Automation; using namespace CalculatorApp::Common::Automation;
namespace CalculatorUnitTests namespace CalculatorUnitTests
{ {
TEST_CLASS(NarratorAnnouncementUnitTests) TEST_CLASS(NarratorAnnouncementUnitTests)
@ -183,10 +181,3 @@ namespace CalculatorUnitTests
const Platform::StringReference NarratorAnnouncementUnitTests::m_testAnnouncement(L"TestAnnouncement"); const Platform::StringReference NarratorAnnouncementUnitTests::m_testAnnouncement(L"TestAnnouncement");
} }

View file

@ -586,8 +586,7 @@ namespace CalculatorUnitTests
VERIFY_ARE_EQUAL(m_viewModel->DecimalDisplayValue, StringReference(L"-2")); VERIFY_ARE_EQUAL(m_viewModel->DecimalDisplayValue, StringReference(L"-2"));
VERIFY_ARE_EQUAL(m_viewModel->OctalDisplayValue, StringReference(L"1 777 777 777 777 777 777 776")); VERIFY_ARE_EQUAL(m_viewModel->OctalDisplayValue, StringReference(L"1 777 777 777 777 777 777 776"));
VERIFY_ARE_EQUAL( VERIFY_ARE_EQUAL(
m_viewModel->BinaryDisplayValue, m_viewModel->BinaryDisplayValue, StringReference(L"1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1110"));
StringReference(L"1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1110"));
VERIFY_ARE_EQUAL(m_viewModel->DisplayValue, StringReference(L"-2")); VERIFY_ARE_EQUAL(m_viewModel->DisplayValue, StringReference(L"-2"));
auto val = ref new Platform::Collections::Vector<bool>(64, true); auto val = ref new Platform::Collections::Vector<bool>(64, true);
val->SetAt(0, false); val->SetAt(0, false);

View file

@ -293,7 +293,6 @@ namespace UnitConverterUnitTests
VERIFY_IS_TRUE(s_testVMCallback->CheckSuggestedValues(vector<tuple<wstring, Unit>>(begin(test2), end(test2)))); VERIFY_IS_TRUE(s_testVMCallback->CheckSuggestedValues(vector<tuple<wstring, Unit>>(begin(test2), end(test2))));
} }
// Verify a basic copy paste steam. '20.43' with backspace button pressed // Verify a basic copy paste steam. '20.43' with backspace button pressed
void UnitConverterTest::UnitConverterTestBackspaceBasic() void UnitConverterTest::UnitConverterTestBackspaceBasic()
{ {
@ -360,7 +359,6 @@ namespace UnitConverterUnitTests
VERIFY_IS_TRUE(s_testVMCallback->CheckSuggestedValues(vector<tuple<wstring, Unit>>())); VERIFY_IS_TRUE(s_testVMCallback->CheckSuggestedValues(vector<tuple<wstring, Unit>>()));
} }
// Test input escaping // Test input escaping
void UnitConverterTest::UnitConverterTestQuote() void UnitConverterTest::UnitConverterTestQuote()
{ {

View file

@ -123,8 +123,8 @@ namespace GraphControl
HRESULT hr; HRESULT hr;
// Reset the Grid using the m_initialDisplayRange properties when the user was last in Manual Adjustment mode and an equation was added. // Reset the Grid using the m_initialDisplayRange properties when the user was last in Manual Adjustment mode and an equation was added.
// Reset the Grid using the TryPlotGraph method when the range is updated via Graph Settings. Return out of this block so we don't render 2 times. // Reset the Grid using the TryPlotGraph method when the range is updated via Graph Settings. Return out of this block so we don't render 2
// Reset the Grid using the ResetRange() in all other cases. // times. Reset the Grid using the ResetRange() in all other cases.
if (m_resetUsingInitialDisplayRange) if (m_resetUsingInitialDisplayRange)
{ {
hr = renderer->SetDisplayRanges(m_initialDisplayRangeXMin, m_initialDisplayRangeXMax, m_initialDisplayRangeYMin, m_initialDisplayRangeYMax); hr = renderer->SetDisplayRanges(m_initialDisplayRangeXMin, m_initialDisplayRangeXMax, m_initialDisplayRangeYMin, m_initialDisplayRangeYMax);
@ -1123,7 +1123,8 @@ optional<vector<shared_ptr<Graphing::IEquation>>> Grapher::TryInitializeGraph(bo
{ {
if (IsKeepCurrentView) if (IsKeepCurrentView)
{ {
// PrepareGraph() populates the values of the graph after TryInitialize but before rendering. This allows us to get the range of the graph to be rendered. // PrepareGraph() populates the values of the graph after TryInitialize but before rendering. This allows us to get the range of the graph to be
// rendered.
if (SUCCEEDED(renderer->PrepareGraph())) if (SUCCEEDED(renderer->PrepareGraph()))
{ {
// Get the initial display ranges from the graph that was just initialized to be used in ResetGrid if they user clicks the GraphView button. // Get the initial display ranges from the graph that was just initialized to be used in ResetGrid if they user clicks the GraphView button.

View file

@ -82,7 +82,6 @@ public enum class GraphViewChangedReason
void ZoomFromCenter(double scale); void ZoomFromCenter(double scale);
void ResetGrid(); void ResetGrid();
property Windows::Foundation::Point TraceLocation property Windows::Foundation::Point TraceLocation
{ {
Windows::Foundation::Point get() Windows::Foundation::Point get()

View file

@ -254,8 +254,7 @@ namespace GraphControl::DX
lround(m_d3dRenderTargetSize.Width), lround(m_d3dRenderTargetSize.Width),
lround(m_d3dRenderTargetSize.Height), lround(m_d3dRenderTargetSize.Height),
DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM,
0 0);
);
if (hr == DXGI_ERROR_DEVICE_REMOVED || hr == DXGI_ERROR_DEVICE_RESET) if (hr == DXGI_ERROR_DEVICE_REMOVED || hr == DXGI_ERROR_DEVICE_RESET)
{ {
@ -533,8 +532,7 @@ namespace GraphControl::DX
// This method is called in the event handler for the CompositionScaleChanged event. // This method is called in the event handler for the CompositionScaleChanged event.
void DeviceResources::SetCompositionScale(float compositionScaleX, float compositionScaleY) void DeviceResources::SetCompositionScale(float compositionScaleX, float compositionScaleY)
{ {
if (m_compositionScaleX != compositionScaleX || if (m_compositionScaleX != compositionScaleX || m_compositionScaleY != compositionScaleY)
m_compositionScaleY != compositionScaleY)
{ {
m_compositionScaleX = compositionScaleX; m_compositionScaleX = compositionScaleX;
m_compositionScaleY = compositionScaleY; m_compositionScaleY = compositionScaleY;

View file

@ -152,6 +152,7 @@ namespace GraphControl::DX
void OnSizeChanged(Platform::Object ^ sender, Windows::UI::Xaml::SizeChangedEventArgs ^ e); void OnSizeChanged(Platform::Object ^ sender, Windows::UI::Xaml::SizeChangedEventArgs ^ e);
double GetPrecision(const double maxAxis, const double minAxis); double GetPrecision(const double maxAxis, const double minAxis);
private: private:
DX::DeviceResources m_deviceResources; DX::DeviceResources m_deviceResources;
NearestPointRenderer m_nearestPointRenderer; NearestPointRenderer m_nearestPointRenderer;
@ -191,7 +192,6 @@ namespace GraphControl::DX
double m_XTraceValue; double m_XTraceValue;
double m_YTraceValue; double m_YTraceValue;
// And where is it located on screen // And where is it located on screen
Windows::Foundation::Point m_TraceLocation; Windows::Foundation::Point m_TraceLocation;

View file

@ -154,11 +154,12 @@ public
event EquationChangedEventHandler ^ EquationLineEnabledChanged; event EquationChangedEventHandler ^ EquationLineEnabledChanged;
private: private:
void OnEquationPropertyChanged(Object^ sender, Windows::UI::Xaml::Data::PropertyChangedEventArgs ^ args) void OnEquationPropertyChanged(Object ^ sender, Windows::UI::Xaml::Data::PropertyChangedEventArgs ^ args)
{ {
auto equation = static_cast<Equation ^>(sender); auto equation = static_cast<Equation ^>(sender);
auto propertyName = args->PropertyName; auto propertyName = args->PropertyName;
if (propertyName == GraphControl::Equation::LineColorPropertyName || propertyName == GraphControl::Equation::IsSelectedPropertyName || propertyName == GraphControl::Equation::EquationStylePropertyName) if (propertyName == GraphControl::Equation::LineColorPropertyName || propertyName == GraphControl::Equation::IsSelectedPropertyName
|| propertyName == GraphControl::Equation::EquationStylePropertyName)
{ {
EquationStyleChanged(equation); EquationStyleChanged(equation);
} }

View file

@ -4,7 +4,6 @@
#pragma once #pragma once
#include "Utils.h" #include "Utils.h"
namespace Graphing namespace Graphing
{ {
struct IGraphFunctionAnalysisData; struct IGraphFunctionAnalysisData;
@ -17,7 +16,6 @@ namespace CalculatorApp
namespace GraphControl namespace GraphControl
{ {
public public
ref class KeyGraphFeaturesInfo sealed ref class KeyGraphFeaturesInfo sealed
{ {

View file

@ -25,7 +25,6 @@
#include <map> #include <map>
#include <type_traits> #include <type_traits>
// DirectX headers // DirectX headers
#include <d2d1_3.h> #include <d2d1_3.h>
#include <d3d11_4.h> #include <d3d11_4.h>

View file

@ -109,7 +109,6 @@ namespace MockGraphingImpl
return S_OK; return S_OK;
} }
private: private:
double m_xMin; double m_xMin;
double m_xMax; double m_xMax;

View file

@ -54,7 +54,7 @@ namespace Graphing
{ {
virtual ~IExpressible() = default; virtual ~IExpressible() = default;
virtual std::shared_ptr< IExpression > GetExpression() const = 0; virtual std::shared_ptr<IExpression> GetExpression() const = 0;
}; };
class Color class Color

View file

@ -30,6 +30,6 @@ namespace Graphing
virtual bool TryResetSelection() = 0; virtual bool TryResetSelection() = 0;
virtual std::shared_ptr< Graphing::Analyzer::IGraphAnalyzer > GetAnalyzer() const = 0; virtual std::shared_ptr<Graphing::Analyzer::IGraphAnalyzer> GetAnalyzer() const = 0;
}; };
} }

View file

@ -23,7 +23,18 @@ namespace Graphing::Renderer
virtual HRESULT SetDpi(float dpiX, float dpiY) = 0; virtual HRESULT SetDpi(float dpiX, float dpiY) = 0;
virtual HRESULT DrawD2D1(ID2D1Factory* pDirect2dFactory, ID2D1RenderTarget* pRenderTarget, bool& hasSomeMissingDataOut) = 0; virtual HRESULT DrawD2D1(ID2D1Factory* pDirect2dFactory, ID2D1RenderTarget* pRenderTarget, bool& hasSomeMissingDataOut) = 0;
virtual HRESULT GetClosePointData(double inScreenPointX, double inScreenPointY, double precision, int& formulaIdOut, float& xScreenPointOut, float& yScreenPointOut, double& xValueOut, double& yValueOut, double& rhoValueOut, double& thetaValueOut, double& tValueOut) = 0; virtual HRESULT GetClosePointData(
double inScreenPointX,
double inScreenPointY,
double precision,
int& formulaIdOut,
float& xScreenPointOut,
float& yScreenPointOut,
double& xValueOut,
double& yValueOut,
double& rhoValueOut,
double& thetaValueOut,
double& tValueOut) = 0;
virtual HRESULT ScaleRange(double centerX, double centerY, double scale) = 0; virtual HRESULT ScaleRange(double centerX, double centerY, double scale) = 0;
virtual HRESULT ChangeRange(ChangeRangeAction action) = 0; virtual HRESULT ChangeRange(ChangeRangeAction action) = 0;

View file

@ -6,7 +6,7 @@
using namespace TraceLogging; using namespace TraceLogging;
using namespace std; using namespace std;
using namespace Platform;; using namespace Platform;
using namespace Windows::Foundation; using namespace Windows::Foundation;
using namespace Windows::Foundation::Diagnostics; using namespace Windows::Foundation::Diagnostics;
@ -39,7 +39,7 @@ TraceLoggingCommon::TraceLoggingCommon()
CoCreateGuid(&sessionGuid); CoCreateGuid(&sessionGuid);
} }
TraceLoggingCommon ^ TraceLoggingCommon::GetInstance() TraceLoggingCommon ^ TraceLoggingCommon::GetInstance()
{ {
static TraceLoggingCommon ^ s_selfInstance = ref new TraceLoggingCommon(); static TraceLoggingCommon ^ s_selfInstance = ref new TraceLoggingCommon();
return s_selfInstance; return s_selfInstance;

View file

@ -23,7 +23,6 @@ namespace TraceLogging
private: private:
TraceLoggingCommon(); TraceLoggingCommon();
Windows::Foundation::Diagnostics::LoggingChannel ^ g_calculatorProvider; Windows::Foundation::Diagnostics::LoggingChannel ^ g_calculatorProvider;
Windows::Foundation::Diagnostics::LoggingActivity ^ m_appLaunchActivity; Windows::Foundation::Diagnostics::LoggingActivity ^ m_appLaunchActivity;
GUID sessionGuid; GUID sessionGuid;

View file

@ -3,7 +3,6 @@
<packageSources> <packageSources>
<clear /> <clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="EEApps" value="https://eeapps.blob.core.windows.net/eeapps/index.json" />
</packageSources> </packageSources>
<disabledPackageSources> <disabledPackageSources>
<clear /> <clear />