Skip to content

Commit

Permalink
.net framework -> .net standard (#1)
Browse files Browse the repository at this point in the history
* update to vs2017 format

* some minor ref for c#7 features
files resaved for utf-8

* lib target framework was changed for .net standard 2.0
xunit tests based on readme added

* multitargeting
  • Loading branch information
dotmeer authored and posledam committed Aug 4, 2018
1 parent 249eb3e commit 48ba07c
Show file tree
Hide file tree
Showing 9 changed files with 218 additions and 75 deletions.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -106,3 +106,8 @@ Generated_Code #added for RIA/Silverlight projects
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
.vs/PawnHunter.Numerals/v15/Server/sqlite3/storage.ide-shm
.vs/PawnHunter.Numerals/v15/Server/sqlite3/storage.ide-wal
.vs/PawnHunter.Numerals/v15/Server/sqlite3/db.lock
.vs/PawnHunter.Numerals/DesignTimeBuild/.dtbcache
.vs/PawnHunter.Numerals/v15/Server/sqlite3/storage.ide
20 changes: 20 additions & 0 deletions PawnHunter.Numerals.Tests/PawnHunter.Numerals.Tests.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>

<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.0" />
<PackageReference Include="xunit" Version="2.3.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\PawnHunter.Numerals\PawnHunter.Numerals.csproj" />
</ItemGroup>

</Project>
125 changes: 125 additions & 0 deletions PawnHunter.Numerals.Tests/ReadmeBasedTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
using System;
using System.Globalization;
using Xunit;

namespace PawnHunter.Numerals.Tests
{
public class ReadmeBasedTests
{
[Fact]
public void Readme_example_1()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("ru-RU") };

var format = "Inbox: {0} {0:W;новое,новых} {0:W;сообщение,сообщения,сообщений}";

Assert.Equal("Inbox: 1 новое сообщение", string.Format(formatter, format, 1));
Assert.Equal("Inbox: 2 новых сообщения", string.Format(formatter, format, 2));
Assert.Equal("Inbox: 5 новых сообщений", string.Format(formatter, format, 5));
}

[Fact]
public void Readme_example_2()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("ru-RU") };

var format = "Inbox: {0} {0:W;нов(ое,ых)} {0:W;сообщени(е,я,й)}";

Assert.Equal("Inbox: 1 новое сообщение", string.Format(formatter, format, 1));
Assert.Equal("Inbox: 2 новых сообщения", string.Format(formatter, format, 2));
Assert.Equal("Inbox: 5 новых сообщений", string.Format(formatter, format, 5));
}

[Fact]
public void Readme_example_3()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("ru-RU") };

var format = "{0:W;Найден(а,о)} {0} {0:W;запис(ь,и,ей)}, {0:W;удовлетворяющ(ая,ие,их)} запросу.";

Assert.Equal("Найдена 1 запись, удовлетворяющая запросу.", string.Format(formatter, format, 1));
Assert.Equal("Найдено 2 записи, удовлетворяющие запросу.", string.Format(formatter, format, 2));
Assert.Equal("Найдено 5 записей, удовлетворяющих запросу.", string.Format(formatter, format, 5));
}

[Fact]
public void Readme_example_4()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("ru-RU") };

var format = "{0:T}";

Assert.Equal("Одно", string.Format(formatter, format, 1));
Assert.Equal("Тринадцать", string.Format(formatter, format, 13));
}

[Fact]
public void Readme_example_5()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("ru-RU") };

var format = "{0:t;f}";

Assert.Equal("одна", string.Format(formatter, format, 1));
Assert.Equal("тринадцать", string.Format(formatter, format, 13));
}

[Fact]
public void Readme_example_6()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("ru-RU") };

var format = "{0:T;M} {0:W;час(,а,ов)}.";

Assert.Equal("Один час.", string.Format(formatter, format, 1));
Assert.Equal("Два часа.", string.Format(formatter, format, 2));
Assert.Equal("Десять часов.", string.Format(formatter, format, 10));
}

[Fact]
public void Readme_example_7()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("ru-RU") };

var format = "{0:T;M} {0:W;час(,а,ов)} {1:t;F} {1:W;минут(а,ы,)}.";

Assert.Equal("Два часа десять минут.", string.Format(formatter, format, 2, 10));
Assert.Equal("Двадцать один час одна минута.", string.Format(formatter, format, 21, 1));
Assert.Equal("Ноль часов ноль минут.", string.Format(formatter, format, 0, 0));
}

[Fact]
public void Readme_example_8()
{
var formatter = new NumeralsFormatter {CultureInfo = new CultureInfo("ru-RU")};

var format = "{0:T;M} {0:W;рубл(ь,я,ей)} {1:00} коп.";

Assert.Equal("Один рубль 12 коп.", string.Format(formatter, format, 1, 12));
Assert.Equal("Три рубля 05 коп.", string.Format(formatter, format, 3, 5));
Assert.Equal("Минус три рубля -05 коп.", string.Format(formatter, format, -3, -5));
}

[Fact]
public void Readme_example_9()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("en-US") };

var format = "{0:T} {0:W;dollar(,s)} and {1:t} {1:W;cent(,s)}.";

Assert.Equal("One dollar and two cents.", string.Format(formatter, format, 1, 2));
Assert.Equal("One hundred and twenty-three thousand, four hundred and fifty-six dollars and seven cents.", string.Format(formatter, format, 123456, 7));
}

[Fact]
public void Readme_example_10()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("en-US") };

var format = "{0:T} {0:W;hour(,s)} and {1:t} {1:W;minute(,s)}.";
var dateTime = new DateTime(2018, 8, 1, 4, 1, 0);

Assert.Equal("Four hours and one minute.", string.Format(formatter, format, dateTime.Hour, dateTime.Minute));
}
}
}
15 changes: 13 additions & 2 deletions PawnHunter.Numerals.sln
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PawnHunter.Numerals", "PawnHunter.Numerals\PawnHunter.Numerals.csproj", "{3E75115F-5A5F-46C7-8C6D-C08624B84847}"
# Visual Studio 15
VisualStudioVersion = 15.0.27703.2042
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PawnHunter.Numerals", "PawnHunter.Numerals\PawnHunter.Numerals.csproj", "{3E75115F-5A5F-46C7-8C6D-C08624B84847}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PawnHunter.Numerals.Tests", "PawnHunter.Numerals.Tests\PawnHunter.Numerals.Tests.csproj", "{4E094EA2-D4C8-494F-95AB-D194BB345213}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand All @@ -13,8 +17,15 @@ Global
{3E75115F-5A5F-46C7-8C6D-C08624B84847}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E75115F-5A5F-46C7-8C6D-C08624B84847}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3E75115F-5A5F-46C7-8C6D-C08624B84847}.Release|Any CPU.Build.0 = Release|Any CPU
{4E094EA2-D4C8-494F-95AB-D194BB345213}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4E094EA2-D4C8-494F-95AB-D194BB345213}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4E094EA2-D4C8-494F-95AB-D194BB345213}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4E094EA2-D4C8-494F-95AB-D194BB345213}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {3E65B77D-3B54-402B-949F-2DB1FDC3E6F1}
EndGlobalSection
EndGlobal
2 changes: 1 addition & 1 deletion PawnHunter.Numerals/Neutral.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ namespace PawnHunter.Numerals
{
internal class Neutral
{
static internal long[] Ranks = new long[]
internal static long[] Ranks = new long[]
{
1000000000000000000,
1000000000000000,
Expand Down
8 changes: 4 additions & 4 deletions PawnHunter.Numerals/NumeralsFormatter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ public sealed class NumeralsFormatter : IFormatProvider, ICustomFormatter
/// </summary>
public CultureInfo CultureInfo
{
get { return _cultureInfo; }
set { _cultureInfo = value; }
get => _cultureInfo;
set => _cultureInfo = value;
}

#endregion Properties
Expand Down Expand Up @@ -101,7 +101,7 @@ private string FormatNumeral(string[] stringFormatParts, long arg)

default:
throw new FormatException(
String.Format("The '{0}' culture is not supported.", cultureInfo.DisplayName),
$"The '{cultureInfo.DisplayName}' culture is not supported.",
new NotSupportedException());
}
}
Expand Down Expand Up @@ -226,7 +226,7 @@ string ICustomFormatter.Format(string format, object arg, IFormatProvider format
if (arg is ulong && Convert.ToUInt64(arg) > long.MaxValue)
{
throw new FormatException("Argument is too large.",
new ArgumentOutOfRangeException("arg", arg,
new ArgumentOutOfRangeException(nameof(arg), arg,
String.Format("arg must be within -{0} ... {0} range.", long.MaxValue)));
}

Expand Down
50 changes: 16 additions & 34 deletions PawnHunter.Numerals/PawnHunter.Numerals.csproj
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{3E75115F-5A5F-46C7-8C6D-C08624B84847}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>PawnHunter.Numerals</RootNamespace>
<AssemblyName>PawnHunter.Numerals</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworks Condition="'$(LibraryFrameworks)'==''">net45;net46;net47;netstandard20</TargetFrameworks>
<TargetFrameworks Condition="'$(LibraryFrameworks)'!=''">$(LibraryFrameworks)</TargetFrameworks>
<LangVersion>latest</LangVersion>
<Configurations>Debug;Release</Configurations>
<GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyDescriptionAttribute>false</GenerateAssemblyDescriptionAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<GenerateAssemblyCopyrightAttribute>false</GenerateAssemblyCopyrightAttribute>
<GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
Expand All @@ -30,28 +30,10 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
</ItemGroup>
<ItemGroup>
<Compile Include="Countable.cs" />
<Compile Include="English.cs" />
<Compile Include="Neutral.cs" />
<Compile Include="NumeralsFormatter.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Russian.cs" />
<Compile Include="Ukrainian.cs" />
</ItemGroup>
<PropertyGroup />
<PropertyGroup />
<ItemGroup />
<ItemGroup>
<None Include="Examples.html" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
34 changes: 17 additions & 17 deletions PawnHunter.Numerals/Russian.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,39 +9,39 @@ public sealed class Russian

private static readonly Countable[] Ranks = new[]
{
new Countable(" êâèíòèëüîí", " êâèíòèëüîíà", " êâèíòèëüîíîâ", Gender.Masculine),
new Countable(" êâàäðèëüîí", " êâàäðèëüîíà", " êâàäðèëüîíîâ", Gender.Masculine),
new Countable(" òðèëëèîí", " òðèëëèîíà", " òðèëëèîíîâ", Gender.Masculine),
new Countable(" ìèëëèàðä", " ìèëëèàðäà", " ìèëëèàðäîâ", Gender.Masculine),
new Countable(" ìèëëèîí", " ìèëëèîíà", " ìèëëèîíîâ", Gender.Masculine),
new Countable(" òûñÿ÷à", " òûñÿ÷è", " òûñÿ÷", Gender.Feminine),
new Countable(" квинтильон", " квинтильона", " квинтильонов", Gender.Masculine),
new Countable(" квадрильон", " квадрильона", " квадрильонов", Gender.Masculine),
new Countable(" триллион", " триллиона", " триллионов", Gender.Masculine),
new Countable(" миллиард", " миллиарда", " миллиардов", Gender.Masculine),
new Countable(" миллион", " миллиона", " миллионов", Gender.Masculine),
new Countable(" тысяча", " тысячи", " тысяч", Gender.Feminine),
new Countable("", "", "")
};

private static readonly string[] Hundreds = new[]
{
"", "ñòî", "äâåñòè", "òðèñòà", "÷åòûðåñòà", "ïÿòüñîò",
"øåñòüñîò", "ñåìüñîò", "âîñåìüñîò", "äåâÿòüñîò"
"", "сто", "двести", "триста", "четыреста", "пятьсот",
"шестьсот", "семьсот", "восемьсот", "девятьсот"
};

private static readonly string[] Tens = new[]
{
"", "äåñÿòü", "äâàäöàòü", "òðèäöàòü", "ñîðîê", "ïÿòüäåñÿò",
"øåñòüäåñÿò", "ñåìüäåñÿò", "âîñåìüäåñÿò", "äåâÿíîñòî"
"", "десять", "двадцать", "тридцать", "сорок", "пятьдесят",
"шестьдесят", "семьдесят", "восемьдесят", "девяносто"
};

private static readonly string[] Units = new[]
{
"íîëü", "îäèí", "äâà", "òðè", "÷åòûðå", "ïÿòü",
"øåñòü", "ñåìü", "âîñåìü", "äåâÿòü", "äåñÿòü", "îäèííàäöàòü",
"äâåíàäöàòü", "òðèíàäöàòü", "÷åòûðíàäöàòü", "ïÿòíàäöàòü",
"øåñòíàäöàòü", "ñåìíàäöàòü", "âîñåìíàäöàòü", "äåâÿòíàäöàòü"
"ноль", "один", "два", "три", "четыре", "пять",
"шесть", "семь", "восемь", "девять", "десять", "одиннадцать",
"двенадцать", "тринадцать", "четырнадцать", "пятнадцать",
"шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"
};

private static readonly string[,] Gendered = new[,]
{
{ "îäèí", "îäíà", "îäíî" },
{ "äâà", "äâå", "äâà" }
{ "один", "одна", "одно" },
{ "два", "две", "два" }
};

#endregion Fields
Expand Down Expand Up @@ -129,7 +129,7 @@ public static string ToString(long number, Gender gender, bool uppercase)

if (isNegative)
{
sb.Insert(0, "ìèíóñ ");
sb.Insert(0, "минус ");
}

if (uppercase)
Expand Down
Loading

0 comments on commit 48ba07c

Please sign in to comment.