Skip to content

Commit 95cdd60

Browse files
authored
Multiple fixes (#205)
* Remove directory workflow * Use new C# features * Update README.md * Update all projects to .net 5 * Refactor BitArray.cs * Add HuffmanCompressor tests * Renormalize line endings
1 parent f5013e0 commit 95cdd60

File tree

118 files changed

+2604
-3315
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

118 files changed

+2604
-3315
lines changed

.github/workflows/directory_workflow.yml

Lines changed: 0 additions & 58 deletions
This file was deleted.

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ language: csharp
22
solution: C-Sharp.sln
33
mono: none
44
dist: xenial
5-
dotnet: 3.1
5+
dotnet: 5.0
66
script:
77
- dotnet build
88
- travis_wait 60 dotnet test --collect:"XPlat Code Coverage"

Algorithms.Tests/Algorithms.Tests.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>netcoreapp3.1</TargetFramework>
4+
<TargetFramework>net5.0</TargetFramework>
55
<IsPackable>false</IsPackable>
6-
<LangVersion>default</LangVersion>
76
<CodeAnalysisRuleSet>..\stylecop.ruleset</CodeAnalysisRuleSet>
87
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
98
<Nullable>enable</Nullable>

Algorithms.Tests/Compressors/HuffmanCompressorTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
using Algorithms.DataCompression;
22
using Algorithms.Sorters.Comparison;
3+
4+
using FluentAssertions;
5+
36
using NUnit.Framework;
47
using NUnit.Framework.Internal;
58

@@ -45,5 +48,16 @@ public static void DecompressedTextTheSameAsOriginal([Random(0, 1000, 100, Disti
4548
//Assert
4649
Assert.AreEqual(text, decompressedText);
4750
}
51+
52+
[Test]
53+
public static void ListNodeComparer_NullIsUnordered()
54+
{
55+
var comparer = new HuffmanCompressor.ListNodeComparer();
56+
var node = new HuffmanCompressor.ListNode('a', 0.1);
57+
58+
comparer.Compare(node, null).Should().Be(0);
59+
comparer.Compare(null, node).Should().Be(0);
60+
comparer.Compare(null, null).Should().Be(0);
61+
}
4862
}
4963
}

Algorithms.Tests/Encoders/NysiisEncoderTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ public void AttemptNysiis(string source, string expected)
1515
Assert.AreEqual(expected, nysiis);
1616
}
1717

18-
static IEnumerable<string[]> TestData => names.Zip(expected, (l, r) => new[] { l, r });
18+
static IEnumerable<string[]> TestData => _names.Zip(_expected, (l, r) => new[] { l, r });
1919

20-
static string[] names = {
20+
static string[] _names = {
2121
"Jay", "John", "Jane", "Zayne", "Guerra",
2222
"Iga", "Cowan", "Louisa", "Arnie", "Olsen",
2323
"Corban", "Nava", "Cynthia Malone", "Amiee MacKee",
2424
"MacGyver", "Yasmin Edge"
2525
};
26-
static string[] expected = {
26+
static string[] _expected = {
2727
"JY", "JAN", "JAN", "ZAYN", "GAR",
2828
"IG", "CAN", "LAS", "ARNY", "OLSAN",
2929
"CARBAN", "NAV", "CYNTANALAN", "ANANACY",

Algorithms.Tests/Encoders/SoundexEncoderTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ public static class SoundexEncoderTest
1010
[TestCaseSource(nameof(TestData))]
1111
public static void AttemptSoundex(string source, string encoded)
1212
{
13-
SoundexEncoder enc = new SoundexEncoder();
13+
SoundexEncoder enc = new();
1414
var nysiis = enc.Encode(source);
1515
Assert.AreEqual(nysiis, encoded);
1616
}
1717

18-
static IEnumerable<string[]> TestData => names.Zip(expected, (l, r) => new[] { l, r });
18+
static IEnumerable<string[]> TestData => _names.Zip(_expected, (l, r) => new[] { l, r });
1919

20-
static string[] names = {
20+
static readonly string[] _names = {
2121
"Robert", "Rupert", "Rubin", "Ashcraft", "Ashcroft",
2222
"Tymczak", "Pfister", "Honeyman"
2323
};
24-
static string[] expected = {
24+
static readonly string[] _expected = {
2525
"R163", "R163", "R150", "A261", "A261", "T522", "P236",
2626
"H555"
2727
};
Lines changed: 102 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,102 @@
1-
using System;
2-
using System.Linq;
3-
using Algorithms.Knapsack;
4-
using NUnit.Framework;
5-
6-
namespace Algorithms.Tests.Knapsack
7-
{
8-
public static class DynamicProgrammingKnapsackSolverTests
9-
{
10-
[Test]
11-
public static void SmallSampleOfChar()
12-
{
13-
//Arrange
14-
var items = new[] { 'A', 'B', 'C' };
15-
var val = new[] { 50, 100, 130 };
16-
var wt = new[] { 10, 20, 40 };
17-
18-
var capacity = 50;
19-
20-
Func<char, int> weightSelector = x => wt[Array.IndexOf(items, x)];
21-
Func<char, double> valueSelector = x => val[Array.IndexOf(items, x)];
22-
23-
var expected = new[] { 'A', 'C' };
24-
25-
26-
//Act
27-
var solver = new DynamicProgrammingKnapsackSolver<char>();
28-
var actual = solver.Solve(items, capacity, weightSelector, valueSelector);
29-
30-
//Assert
31-
Assert.AreEqual(expected.OrderBy(x => x), actual.OrderBy(x => x));
32-
}
33-
34-
[Test]
35-
public static void FSU_P01()
36-
{
37-
// Data from https://people.sc.fsu.edu/~jburkardt/datasets/knapsack_01/knapsack_01.html
38-
39-
//Arrange
40-
var items = new[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };
41-
var val = new[] { 92, 57, 49, 68, 60, 43, 67, 84, 87, 72 };
42-
var wt = new[] { 23, 31, 29, 44, 53, 38, 63, 85, 89, 82 };
43-
44-
var capacity = 165;
45-
46-
Func<char, int> weightSelector = x => wt[Array.IndexOf(items, x)];
47-
Func<char, double> valueSelector = x => val[Array.IndexOf(items, x)];
48-
49-
var expected = new[] { 'A', 'B', 'C', 'D', 'F' };
50-
51-
//Act
52-
var solver = new DynamicProgrammingKnapsackSolver<char>();
53-
var actual = solver.Solve(items, capacity, weightSelector, valueSelector);
54-
55-
//Assert
56-
Assert.AreEqual(expected.OrderBy(x => x), actual.OrderBy(x => x));
57-
}
58-
59-
[Test]
60-
public static void FSU_P07_WithNonIntegralValues()
61-
{
62-
// Shows how to handle weights with 1 significant digit right of the decimal
63-
// Data from https://people.sc.fsu.edu/~jburkardt/datasets/knapsack_01/knapsack_01.html
64-
65-
//Arrange
66-
var val = new[] { 135, 139, 149, 150, 156, 163, 173, 184, 192, 201, 210, 214, 221, 229, 240 };
67-
var wt = new[] { 7.0, 7.3, 7.7, 8.0, 8.2, 8.7, 9.0, 9.4, 9.8, 10.6, 11.0, 11.3, 11.5, 11.8, 12.0 };
68-
var items = Enumerable.Range(1, val.Count()).ToArray();
69-
70-
var capacity = 75;
71-
72-
Func<int, int> weightSelector = x => (int)(wt[Array.IndexOf(items, x)] * 10);
73-
Func<int, double> valueSelector = x => val[Array.IndexOf(items, x)];
74-
75-
var expected = new[] { 1, 3, 5, 7, 8, 9, 14, 15 };
76-
77-
78-
//Act
79-
var solver = new DynamicProgrammingKnapsackSolver<int>();
80-
var actual = solver.Solve(items, capacity * 10, weightSelector, valueSelector);
81-
82-
//Assert
83-
Assert.AreEqual(expected.OrderBy(x => x), actual.OrderBy(x => x));
84-
}
85-
86-
87-
[Test]
88-
public static void TakesHalf([Random(0, 1000, 100, Distinct = true)]int length)
89-
{
90-
//Arrange
91-
var solver = new DynamicProgrammingKnapsackSolver<int>();
92-
var items = Enumerable.Repeat(42, 2 * length).ToArray();
93-
var expectedResult = Enumerable.Repeat(42, length);
94-
95-
//Act
96-
var result = solver.Solve(items, length, x => 1, y => 1);
97-
98-
//Assert
99-
Assert.AreEqual(expectedResult, result);
100-
}
101-
}
102-
}
1+
using System;
2+
using System.Linq;
3+
using Algorithms.Knapsack;
4+
using NUnit.Framework;
5+
6+
namespace Algorithms.Tests.Knapsack
7+
{
8+
public static class DynamicProgrammingKnapsackSolverTests
9+
{
10+
[Test]
11+
public static void SmallSampleOfChar()
12+
{
13+
//Arrange
14+
var items = new[] { 'A', 'B', 'C' };
15+
var val = new[] { 50, 100, 130 };
16+
var wt = new[] { 10, 20, 40 };
17+
18+
var capacity = 50;
19+
20+
Func<char, int> weightSelector = x => wt[Array.IndexOf(items, x)];
21+
Func<char, double> valueSelector = x => val[Array.IndexOf(items, x)];
22+
23+
var expected = new[] { 'A', 'C' };
24+
25+
26+
//Act
27+
var solver = new DynamicProgrammingKnapsackSolver<char>();
28+
var actual = solver.Solve(items, capacity, weightSelector, valueSelector);
29+
30+
//Assert
31+
Assert.AreEqual(expected.OrderBy(x => x), actual.OrderBy(x => x));
32+
}
33+
34+
[Test]
35+
public static void FSU_P01()
36+
{
37+
// Data from https://people.sc.fsu.edu/~jburkardt/datasets/knapsack_01/knapsack_01.html
38+
39+
//Arrange
40+
var items = new[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };
41+
var val = new[] { 92, 57, 49, 68, 60, 43, 67, 84, 87, 72 };
42+
var wt = new[] { 23, 31, 29, 44, 53, 38, 63, 85, 89, 82 };
43+
44+
var capacity = 165;
45+
46+
Func<char, int> weightSelector = x => wt[Array.IndexOf(items, x)];
47+
Func<char, double> valueSelector = x => val[Array.IndexOf(items, x)];
48+
49+
var expected = new[] { 'A', 'B', 'C', 'D', 'F' };
50+
51+
//Act
52+
var solver = new DynamicProgrammingKnapsackSolver<char>();
53+
var actual = solver.Solve(items, capacity, weightSelector, valueSelector);
54+
55+
//Assert
56+
Assert.AreEqual(expected.OrderBy(x => x), actual.OrderBy(x => x));
57+
}
58+
59+
[Test]
60+
public static void FSU_P07_WithNonIntegralValues()
61+
{
62+
// Shows how to handle weights with 1 significant digit right of the decimal
63+
// Data from https://people.sc.fsu.edu/~jburkardt/datasets/knapsack_01/knapsack_01.html
64+
65+
//Arrange
66+
var val = new[] { 135, 139, 149, 150, 156, 163, 173, 184, 192, 201, 210, 214, 221, 229, 240 };
67+
var wt = new[] { 7.0, 7.3, 7.7, 8.0, 8.2, 8.7, 9.0, 9.4, 9.8, 10.6, 11.0, 11.3, 11.5, 11.8, 12.0 };
68+
var items = Enumerable.Range(1, val.Count()).ToArray();
69+
70+
var capacity = 75;
71+
72+
Func<int, int> weightSelector = x => (int)(wt[Array.IndexOf(items, x)] * 10);
73+
Func<int, double> valueSelector = x => val[Array.IndexOf(items, x)];
74+
75+
var expected = new[] { 1, 3, 5, 7, 8, 9, 14, 15 };
76+
77+
78+
//Act
79+
var solver = new DynamicProgrammingKnapsackSolver<int>();
80+
var actual = solver.Solve(items, capacity * 10, weightSelector, valueSelector);
81+
82+
//Assert
83+
Assert.AreEqual(expected.OrderBy(x => x), actual.OrderBy(x => x));
84+
}
85+
86+
87+
[Test]
88+
public static void TakesHalf([Random(0, 1000, 100, Distinct = true)]int length)
89+
{
90+
//Arrange
91+
var solver = new DynamicProgrammingKnapsackSolver<int>();
92+
var items = Enumerable.Repeat(42, 2 * length).ToArray();
93+
var expectedResult = Enumerable.Repeat(42, length);
94+
95+
//Act
96+
var result = solver.Solve(items, length, x => 1, y => 1);
97+
98+
//Assert
99+
Assert.AreEqual(expectedResult, result);
100+
}
101+
}
102+
}

0 commit comments

Comments
 (0)