Skip to content

Commit 61151ee

Browse files
basic improvements that GitHub CoPilot AI just doesn't get
1 parent 768d563 commit 61151ee

File tree

5 files changed

+77
-96
lines changed

5 files changed

+77
-96
lines changed

.github/workflows/dotnet.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
run: dotnet restore src/OneBitSoftware.Slovom.sln
3131

3232
- name: Build
33-
run: dotnet build --no-restore src/OneBitSoftware.Slovom.sln
33+
run: dotnet build --no-restore --configuration Release src/OneBitSoftware.Slovom.sln
3434

3535
- name: Test
3636
run: dotnet test --no-build --verbosity normal src/OneBitSoftware.Slovom.sln

src/OneBitSoftware.Slovom.sln

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
1212
..\README.md = ..\README.md
1313
EndProjectSection
1414
EndProject
15+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}"
16+
EndProject
17+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{0D82CF71-EA4B-4A4B-9A7E-D20CE4225F6D}"
18+
ProjectSection(SolutionItems) = preProject
19+
..\.github\workflows\dotnet.yml = ..\.github\workflows\dotnet.yml
20+
EndProjectSection
21+
EndProject
1522
Global
1623
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1724
Debug|Any CPU = Debug|Any CPU
@@ -30,6 +37,10 @@ Global
3037
GlobalSection(SolutionProperties) = preSolution
3138
HideSolutionNode = FALSE
3239
EndGlobalSection
40+
GlobalSection(NestedProjects) = preSolution
41+
{02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {8EC462FD-D22E-90A8-E5CE-7E832BA40C5D}
42+
{0D82CF71-EA4B-4A4B-9A7E-D20CE4225F6D} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
43+
EndGlobalSection
3344
GlobalSection(ExtensibilityGlobals) = postSolution
3445
SolutionGuid = {7C0F044E-99DA-4CC5-8AE8-D1763EE5030E}
3546
EndGlobalSection

src/OneBitSoftware.Slovom/NumbersToWords.cs

Lines changed: 35 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@ static string Hundreds(int n)
4848

4949
if (n < 120)
5050
{
51-
return "сто и " + under20[d];
51+
return hundreds[i] + " и " + under20[d];
5252
}
5353
else if (n >= 120 && n < 200)
5454
{
55-
return "сто " + ConvertWholeNumber(d);
55+
return hundreds[i] + " " + ConvertWholeNumber(d);
5656
}
5757
else
5858
{
@@ -70,25 +70,13 @@ private static string Thousands(int n)
7070

7171
if (n == 1000) return "хиляда";
7272

73-
if (n > 1000 && n < 1099)
74-
{
75-
return "хиляда и " + Tens(d);
76-
}
73+
if (n > 1000 && n < 1099) return "хиляда и " + Tens(d);
7774

78-
if (n > 1099 && n < 2000)
79-
{
80-
return "хиляда " + Hundreds(d);
81-
}
75+
if (n > 1099 && n < 2000) return "хиляда " + Hundreds(d);
8276

83-
if (d == 0) // 2000,3000,4000, etc
84-
{
85-
return units[i] + " хиляди";
86-
}
77+
if (d == 0) return units[i] + " хиляди"; // 2000,3000,4000, etc
8778

88-
if (d < 100)
89-
{
90-
return units[i] + " хиляди и " + Tens(d);
91-
}
79+
if (d < 100) return units[i] + " хиляди и " + Tens(d);
9280

9381
return units[i] + " хиляди " + Hundreds(d);
9482
}
@@ -100,7 +88,7 @@ private static string TensOfThousands(int number)
10088
var e = n % 1000;
10189
var b = n / 1000;
10290
var i = number / 1000;
103-
var t = number / 10;
91+
var t = i / 100;
10492
var s = i % 10;
10593
var of = e % 100;
10694
var tware = of % 10;
@@ -124,88 +112,64 @@ private static string TensOfThousands(int number)
124112
{
125113
if (of == 0) // 11100, 11900, 11800 , etc
126114
{
127-
if (e == 0)
128-
{
129-
return teens[s] + " хиляди";
130-
}
115+
if (e == 0) return teens[s] + " хиляди";
131116

132-
return teens[s] + " хиляди и " + Hundreds(e);
117+
return BuildThousandsWithAnd(teens[s], Hundreds(e));
133118
}
134119

135-
return teens[s] + " хиляди " + Hundreds(e);
120+
return BuildThousandsWithoutAnd(teens[s], Hundreds(e));
136121
}
137122

138123
if (number > 20000 && number < 99999)
139124
{
140125
if (b == 1)
141126
{
142-
if (e < 100)
143-
{
144-
return tens[o] + " и една хиляди и " + Tens(e);
145-
}
146-
147-
if (tware == 0)
148-
{
149-
return tens[o] + " и една хиляди и " + Hundreds(e);
150-
}
151-
152-
if (tware > 0)
153-
{
154-
return tens[o] + " и една хиляди " + Hundreds(e);
155-
}
127+
if (e < 100) return tens[o] + " и една хиляди и " + Tens(e);
128+
129+
if (tware == 0) return tens[o] + " и една хиляди и " + Hundreds(e);
130+
131+
if (tware > 0) return tens[o] + " и една хиляди " + Hundreds(e);
156132
}
157133

158134
if (b == 2)
159135
{
160-
if (e < 100)
161-
{
162-
return tens[o] + " и две хиляди и " + Tens(e);
163-
}
164-
165-
if (tware == 0)
166-
{
167-
return tens[o] + " и две хиляди и " + Hundreds(e);
168-
}
169-
170-
if (tware > 0)
171-
{
172-
return tens[o] + " и две хиляди " + Hundreds(e);
173-
}
136+
if (e < 100) return tens[o] + " и две хиляди и " + Tens(e);
137+
138+
if (tware == 0) return tens[o] + " и две хиляди и " + Hundreds(e);
139+
140+
if (tware > 0) return tens[o] + " и две хиляди " + Hundreds(e);
174141
}
175142

176-
return Tens(i) + " хиляди и " + Hundreds(e);
143+
return BuildThousandsWithAnd(Tens(i), Hundreds(e));
177144
}
178145

179-
if (n == 0) // 10000,20000,30000, etc
180-
{
181-
return tens[o] + " хиляди";
182-
}
146+
if (n == 0) return tens[o] + " хиляди"; // 10000,20000,30000, etc
183147

184-
if (n < 100)
185-
{
186-
return tens[o] + " хиляди и " + Tens(of);
187-
}
148+
if (n < 100) return BuildThousandsWithAnd(tens[o], Tens(of));
188149

189-
return Tens(i) + " хиляди " + Hundreds(e);
150+
return BuildThousandsWithoutAnd(Tens(i), Hundreds(e));
151+
}
152+
153+
static string BuildThousandsWithoutAnd(string thousands, string afterThousands)
154+
{
155+
return thousands + " хиляди " + afterThousands;
190156
}
191157

158+
static string BuildThousandsWithAnd(string thousands, string afterThousands)
159+
{
160+
return thousands + " хиляди и " + afterThousands;
161+
}
192162

193163
public static string Convert(decimal number)
194164
{
195-
if (number == 0 || number == 0.0m)
196-
{
197-
return under20[0] + AppendLvFemale; // нула лева
198-
}
165+
if (number == 0 || number == 0.0m) return under20[0] + AppendLvFemale; // нула лева
199166

200167
number = Math.Abs(number); // Convert negative number to positive
201168

202169
int leva = (int)number;
203170
int stotinki = (int)((number % 1.0m) * 100);
204171

205-
if (number == 1 && stotinki == 0)
206-
{
207-
return under20[leva] + AppendLvMale; // един лев
208-
}
172+
if (number == 1 && stotinki == 0) return under20[leva] + AppendLvMale; // един лев
209173

210174
string levaWords = leva != 1 ? ConvertWholeNumber(leva) + AppendLvFemale : "един" + AppendLvMale;
211175

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

3-
<PropertyGroup>
4-
<TargetFramework>net9.0</TargetFramework>
5-
<ImplicitUsings>enable</ImplicitUsings>
6-
<Nullable>enable</Nullable>
7-
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
8-
<PackageId>OneBitSoftware.Slovom</PackageId>
9-
<Version>1.0.0</Version>
10-
<Authors>Radi Atanassov</Authors>
11-
<Company>OneBit Software</Company>
12-
<Description>A .NET library for converting currency values into Bulgarian words, tailored for accounting needs.</Description>
13-
<PackageTags>NumbersToWords;Bulgarian;Accounting</PackageTags>
14-
<RepositoryUrl>https://github.com/OneBitSoftware/OneBitSoftware.Slovom</RepositoryUrl>
15-
</PropertyGroup>
3+
<PropertyGroup>
4+
<TargetFramework>net9.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
8+
<PackageId>OneBitSoftware.Slovom</PackageId>
9+
<Version>1.0.0</Version>
10+
<Authors>Radi Atanassov</Authors>
11+
<Company>OneBit Software</Company>
12+
<Description>A .NET library for converting currency values into Bulgarian words, tailored for accounting needs.</Description>
13+
<PackageTags>NumbersToWords;Bulgarian;Accounting</PackageTags>
14+
<RepositoryUrl>https://github.com/OneBitSoftware/OneBitSoftware.Slovom</RepositoryUrl>
15+
<PackageReadmeFile>readme.md</PackageReadmeFile>
16+
</PropertyGroup>
1617

17-
<ItemGroup>
18-
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.7.0.110445">
19-
<PrivateAssets>all</PrivateAssets>
20-
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
21-
</PackageReference>
22-
</ItemGroup>
18+
<ItemGroup>
19+
<None Include="..\..\README.md" Link="README.md" Pack="true" PackagePath="\">
20+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
21+
</None>
22+
</ItemGroup>
23+
24+
<ItemGroup>
25+
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.7.0.110445">
26+
<PrivateAssets>all</PrivateAssets>
27+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
28+
</PackageReference>
29+
</ItemGroup>
2330

2431
</Project>

src/Tests/ConvertTests.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
using Xunit;
2-
using OneBitSoftware.Slovom;
3-
4-
namespace Tests
1+
namespace Tests
52
{
3+
using Xunit;
4+
using OneBitSoftware.Slovom;
5+
66
public class ConvertTests
77
{
8-
98
[Theory]
109
[InlineData(0, "нула лева")]
1110
[InlineData(1, "един лев")]

0 commit comments

Comments
 (0)