Feature/GraphingCalculator initial commit (#450)
Initial PR for the feature/GraphingCalculator feature branch, part of #338. The feature incorporates a proprietary Microsoft-owned graphing engine to drive graphing experiences in the Windows Calculator app. Due to the private nature of the graphing engine, the source available in the public repo will make use of a mock graphing engine. See README.md for more details. This PR simply serves as a base for future feature development. As such, the PR will be immediately merged. Feedback on the content of this PR, and on the feature in general, is encouraged. If there is feedback related to the content of this specific PR, please leave comments on the PR page. We will address the comments in future PRs to the feature branch.
This commit is contained in:
@@ -97,7 +97,7 @@ namespace CalculatorUnitTests
|
||||
|
||||
// Boundary testing
|
||||
VERIFY_ARE_EQUAL(ViewMode::None, NavCategory::Deserialize(ref new Box<int>(-1)));
|
||||
VERIFY_ARE_EQUAL(ViewMode::None, NavCategory::Deserialize(ref new Box<int>(17)));
|
||||
VERIFY_ARE_EQUAL(ViewMode::None, NavCategory::Deserialize(ref new Box<int>(18)));
|
||||
}
|
||||
|
||||
void NavCategoryUnitTests::IsValidViewMode_AllValid()
|
||||
@@ -106,6 +106,7 @@ namespace CalculatorUnitTests
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(ViewMode::Scientific));
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(ViewMode::Programmer));
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(ViewMode::Date));
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(ViewMode::Graphing));
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(ViewMode::Currency));
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(ViewMode::Volume));
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(ViewMode::Length));
|
||||
@@ -125,9 +126,9 @@ namespace CalculatorUnitTests
|
||||
{
|
||||
VERIFY_IS_FALSE(NavCategory::IsValidViewMode(ViewMode::None));
|
||||
|
||||
// There are 17 total options so int 17 should be the first invalid
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(static_cast<ViewMode>(16)));
|
||||
VERIFY_IS_FALSE(NavCategory::IsValidViewMode(static_cast<ViewMode>(17)));
|
||||
// There are 18 total options so int 18 should be the first invalid
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(static_cast<ViewMode>(17)));
|
||||
VERIFY_IS_FALSE(NavCategory::IsValidViewMode(static_cast<ViewMode>(18)));
|
||||
|
||||
// Also verify the lower bound
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(static_cast<ViewMode>(0)));
|
||||
@@ -141,6 +142,7 @@ namespace CalculatorUnitTests
|
||||
VERIFY_IS_TRUE(NavCategory::IsCalculatorViewMode(ViewMode::Programmer));
|
||||
|
||||
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Date));
|
||||
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Graphing));
|
||||
|
||||
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Currency));
|
||||
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Volume));
|
||||
@@ -165,6 +167,8 @@ namespace CalculatorUnitTests
|
||||
|
||||
VERIFY_IS_TRUE(NavCategory::IsDateCalculatorViewMode(ViewMode::Date));
|
||||
|
||||
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Graphing));
|
||||
|
||||
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Currency));
|
||||
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Volume));
|
||||
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Length));
|
||||
@@ -185,8 +189,8 @@ namespace CalculatorUnitTests
|
||||
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Standard));
|
||||
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Scientific));
|
||||
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Programmer));
|
||||
|
||||
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Date));
|
||||
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Graphing));
|
||||
|
||||
VERIFY_IS_TRUE(NavCategory::IsConverterViewMode(ViewMode::Currency));
|
||||
VERIFY_IS_TRUE(NavCategory::IsConverterViewMode(ViewMode::Volume));
|
||||
@@ -209,6 +213,7 @@ namespace CalculatorUnitTests
|
||||
VERIFY_ARE_EQUAL(StringReference(L"Scientific"), NavCategory::GetFriendlyName(ViewMode::Scientific));
|
||||
VERIFY_ARE_EQUAL(StringReference(L"Programmer"), NavCategory::GetFriendlyName(ViewMode::Programmer));
|
||||
VERIFY_ARE_EQUAL(StringReference(L"Date"), NavCategory::GetFriendlyName(ViewMode::Date));
|
||||
VERIFY_ARE_EQUAL(StringReference(L"Graphing"), NavCategory::GetFriendlyName(ViewMode::Graphing));
|
||||
VERIFY_ARE_EQUAL(StringReference(L"Currency"), NavCategory::GetFriendlyName(ViewMode::Currency));
|
||||
VERIFY_ARE_EQUAL(StringReference(L"Volume"), NavCategory::GetFriendlyName(ViewMode::Volume));
|
||||
VERIFY_ARE_EQUAL(StringReference(L"Length"), NavCategory::GetFriendlyName(ViewMode::Length));
|
||||
@@ -232,6 +237,7 @@ namespace CalculatorUnitTests
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategory::GetGroupType(ViewMode::Scientific));
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategory::GetGroupType(ViewMode::Programmer));
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategory::GetGroupType(ViewMode::Date));
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategory::GetGroupType(ViewMode::Graphing));
|
||||
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategory::GetGroupType(ViewMode::Currency));
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategory::GetGroupType(ViewMode::Volume));
|
||||
@@ -251,11 +257,12 @@ namespace CalculatorUnitTests
|
||||
void NavCategoryUnitTests::GetIndex()
|
||||
{
|
||||
// Index is the 0-based ordering of modes
|
||||
vector<ViewMode> orderedModes = {
|
||||
ViewMode orderedModes[] = {
|
||||
ViewMode::Standard,
|
||||
ViewMode::Scientific,
|
||||
ViewMode::Programmer,
|
||||
ViewMode::Date,
|
||||
ViewMode::Graphing,
|
||||
ViewMode::Currency,
|
||||
ViewMode::Volume,
|
||||
ViewMode::Length,
|
||||
@@ -271,7 +278,8 @@ namespace CalculatorUnitTests
|
||||
ViewMode::Angle
|
||||
};
|
||||
|
||||
for (size_t index = 0; index < orderedModes.size(); index++)
|
||||
auto orderedModesSize = size(orderedModes);
|
||||
for (size_t index = 0; index < orderedModesSize; index++)
|
||||
{
|
||||
ViewMode mode = orderedModes[index];
|
||||
VERIFY_ARE_EQUAL(index, (size_t)NavCategory::GetIndex(mode));
|
||||
@@ -283,11 +291,12 @@ namespace CalculatorUnitTests
|
||||
void NavCategoryUnitTests::GetPosition()
|
||||
{
|
||||
// Position is the 1-based ordering of modes
|
||||
vector<ViewMode> orderedModes = {
|
||||
ViewMode orderedModes[] = {
|
||||
ViewMode::Standard,
|
||||
ViewMode::Scientific,
|
||||
ViewMode::Programmer,
|
||||
ViewMode::Date,
|
||||
ViewMode::Graphing,
|
||||
ViewMode::Currency,
|
||||
ViewMode::Volume,
|
||||
ViewMode::Length,
|
||||
@@ -303,7 +312,8 @@ namespace CalculatorUnitTests
|
||||
ViewMode::Angle
|
||||
};
|
||||
|
||||
for (size_t pos = 1; pos <= orderedModes.size(); pos++)
|
||||
auto orderedModesSize = size(orderedModes);
|
||||
for (size_t pos = 1; pos <= orderedModesSize; pos++)
|
||||
{
|
||||
ViewMode mode = orderedModes[pos - 1];
|
||||
VERIFY_ARE_EQUAL(pos, (size_t)NavCategory::GetPosition(mode));
|
||||
@@ -327,6 +337,7 @@ namespace CalculatorUnitTests
|
||||
VERIFY_ARE_EQUAL(1, NavCategory::GetIndexInGroup(ViewMode::Scientific, CategoryGroupType::Calculator));
|
||||
VERIFY_ARE_EQUAL(2, NavCategory::GetIndexInGroup(ViewMode::Programmer, CategoryGroupType::Calculator));
|
||||
VERIFY_ARE_EQUAL(3, NavCategory::GetIndexInGroup(ViewMode::Date, CategoryGroupType::Calculator));
|
||||
VERIFY_ARE_EQUAL(4, NavCategory::GetIndexInGroup(ViewMode::Graphing, CategoryGroupType::Calculator));
|
||||
|
||||
VERIFY_ARE_EQUAL(0, NavCategory::GetIndexInGroup(ViewMode::Currency, CategoryGroupType::Converter));
|
||||
VERIFY_ARE_EQUAL(1, NavCategory::GetIndexInGroup(ViewMode::Volume, CategoryGroupType::Converter));
|
||||
@@ -351,6 +362,8 @@ namespace CalculatorUnitTests
|
||||
VERIFY_ARE_EQUAL(ViewMode::Standard, NavCategory::GetViewModeForVirtualKey(MyVirtualKey::Number1));
|
||||
VERIFY_ARE_EQUAL(ViewMode::Scientific, NavCategory::GetViewModeForVirtualKey(MyVirtualKey::Number2));
|
||||
VERIFY_ARE_EQUAL(ViewMode::Programmer, NavCategory::GetViewModeForVirtualKey(MyVirtualKey::Number3));
|
||||
VERIFY_ARE_EQUAL(ViewMode::Date, NavCategory::GetViewModeForVirtualKey(MyVirtualKey::Number4));
|
||||
VERIFY_ARE_EQUAL(ViewMode::Graphing, NavCategory::GetViewModeForVirtualKey(MyVirtualKey::Number5));
|
||||
}
|
||||
|
||||
TEST_CLASS(NavCategoryGroupUnitTests)
|
||||
@@ -380,29 +393,30 @@ namespace CalculatorUnitTests
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, calculatorGroup->GroupType);
|
||||
|
||||
IObservableVector<NavCategory^>^ calculatorCategories = calculatorGroup->Categories;
|
||||
VERIFY_ARE_EQUAL(4, calculatorCategories->Size);
|
||||
VERIFY_ARE_EQUAL(5, calculatorCategories->Size);
|
||||
ValidateNavCategory(calculatorCategories, 0u, ViewMode::Standard, 1);
|
||||
ValidateNavCategory(calculatorCategories, 1u, ViewMode::Scientific, 2);
|
||||
ValidateNavCategory(calculatorCategories, 2u, ViewMode::Programmer, 3);
|
||||
ValidateNavCategory(calculatorCategories, 3u, ViewMode::Date, 4);
|
||||
ValidateNavCategory(calculatorCategories, 4u, ViewMode::Graphing, 5);
|
||||
|
||||
NavCategoryGroup^ converterGroup = menuOptions->GetAt(1);
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, converterGroup->GroupType);
|
||||
|
||||
IObservableVector<NavCategory^>^ converterCategories = converterGroup->Categories;
|
||||
VERIFY_ARE_EQUAL(13, converterCategories->Size);
|
||||
ValidateNavCategory(converterCategories, 0u, ViewMode::Currency, 5);
|
||||
ValidateNavCategory(converterCategories, 1u, ViewMode::Volume, 6);
|
||||
ValidateNavCategory(converterCategories, 2u, ViewMode::Length, 7);
|
||||
ValidateNavCategory(converterCategories, 3u, ViewMode::Weight, 8);
|
||||
ValidateNavCategory(converterCategories, 4u, ViewMode::Temperature, 9);
|
||||
ValidateNavCategory(converterCategories, 5u, ViewMode::Energy, 10);
|
||||
ValidateNavCategory(converterCategories, 6u, ViewMode::Area, 11);
|
||||
ValidateNavCategory(converterCategories, 7u, ViewMode::Speed, 12);
|
||||
ValidateNavCategory(converterCategories, 8u, ViewMode::Time, 13);
|
||||
ValidateNavCategory(converterCategories, 9u, ViewMode::Power, 14);
|
||||
ValidateNavCategory(converterCategories, 10u, ViewMode::Data, 15);
|
||||
ValidateNavCategory(converterCategories, 11u, ViewMode::Pressure, 16);
|
||||
ValidateNavCategory(converterCategories, 12u, ViewMode::Angle, 17);
|
||||
ValidateNavCategory(converterCategories, 0u, ViewMode::Currency, 6);
|
||||
ValidateNavCategory(converterCategories, 1u, ViewMode::Volume, 7);
|
||||
ValidateNavCategory(converterCategories, 2u, ViewMode::Length, 8);
|
||||
ValidateNavCategory(converterCategories, 3u, ViewMode::Weight, 9);
|
||||
ValidateNavCategory(converterCategories, 4u, ViewMode::Temperature, 10);
|
||||
ValidateNavCategory(converterCategories, 5u, ViewMode::Energy, 11);
|
||||
ValidateNavCategory(converterCategories, 6u, ViewMode::Area, 12);
|
||||
ValidateNavCategory(converterCategories, 7u, ViewMode::Speed, 13);
|
||||
ValidateNavCategory(converterCategories, 8u, ViewMode::Time, 14);
|
||||
ValidateNavCategory(converterCategories, 9u, ViewMode::Power, 15);
|
||||
ValidateNavCategory(converterCategories, 10u, ViewMode::Data, 16);
|
||||
ValidateNavCategory(converterCategories, 11u, ViewMode::Pressure, 17);
|
||||
ValidateNavCategory(converterCategories, 12u, ViewMode::Angle, 18);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user