Skip to content

Commit c1f8f18

Browse files
committed
Unit test with Fixture added for TraceGenerator
1 parent 11b9ec0 commit c1f8f18

File tree

3 files changed

+190
-1
lines changed

3 files changed

+190
-1
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netcoreapp3.1</TargetFramework>
5+
6+
<IsPackable>false</IsPackable>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
11+
<PackageReference Include="xunit" Version="2.4.1" />
12+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
13+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
14+
<PrivateAssets>all</PrivateAssets>
15+
</PackageReference>
16+
<PackageReference Include="coverlet.collector" Version="3.1.2">
17+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
18+
<PrivateAssets>all</PrivateAssets>
19+
</PackageReference>
20+
</ItemGroup>
21+
22+
<ItemGroup>
23+
<ProjectReference Include="..\TraceGenerator\TraceGenerator.csproj" />
24+
</ItemGroup>
25+
26+
</Project>
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
using System;
2+
using System.IO;
3+
using Xunit;
4+
5+
namespace TraceGenerator.Tests
6+
{
7+
8+
public class TraceGeneratorFixture : IDisposable
9+
{
10+
public int RamSizeInMB { get; set; } = 1_000;
11+
public TraceGenerator TraceGenerator { get; private set; }
12+
13+
public TraceGeneratorFixture()
14+
{
15+
TraceGenerator = new TraceGenerator("medium");
16+
}
17+
18+
public void Dispose()
19+
{
20+
var filename = "instructions-*.trace";
21+
var dir = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);
22+
var files = dir.GetFiles(filename);
23+
24+
foreach (var file in files)
25+
{
26+
File.Delete(file.FullName);
27+
}
28+
}
29+
}
30+
31+
public class TraceGeneratorTests : IClassFixture<TraceGeneratorFixture>
32+
{
33+
readonly TraceGeneratorFixture fixture;
34+
35+
private readonly int ramSizeInMB = 1_000;
36+
private readonly int dataBlockSize = 32;
37+
38+
public TraceGeneratorTests(TraceGeneratorFixture fixture)
39+
{
40+
this.fixture = fixture;
41+
}
42+
43+
[Fact]
44+
public void Generating_Trace_File()
45+
{
46+
fixture.TraceGenerator.GenerateTraceFile(ramSizeInMB, dataBlockSize);
47+
var expectedNumberOfRamInstances = 1;
48+
var filename = "instructions-*.trace";
49+
var actualNumberOfRamInstances = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, filename).Length;
50+
51+
Assert.Equal(expectedNumberOfRamInstances, actualNumberOfRamInstances);
52+
}
53+
54+
[Fact]
55+
public void Generating_Trace_File_Twice()
56+
{
57+
fixture.TraceGenerator.GenerateTraceFile(ramSizeInMB, dataBlockSize);
58+
fixture.TraceGenerator.GenerateTraceFile(ramSizeInMB, dataBlockSize);
59+
var filename = "instructions-*.trace";
60+
var expectedNumberOfRamInstances = 1;
61+
var actualNumberOfRamInstances = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, filename).Length;
62+
63+
Assert.Equal(expectedNumberOfRamInstances, actualNumberOfRamInstances);
64+
}
65+
66+
[Fact]
67+
public void Generating_Trace_File_With_Wrong_Size()
68+
{
69+
Assert.Throws<Exception>(() => new TraceGenerator("tiny"));
70+
}
71+
72+
[Theory]
73+
[InlineData("small", 100)]
74+
[InlineData("medium", 1_000)]
75+
[InlineData("large", 10_000)]
76+
public void Checking_Trace_File_Line_Number(string size, int expectedNumberOfLines)
77+
{
78+
var trace = new TraceGenerator(size);
79+
trace.GenerateTraceFile(ramSizeInMB, dataBlockSize);
80+
81+
using var stream = File.OpenRead(trace.FileName);
82+
83+
var lineCount = 0;
84+
const char CR = '\r';
85+
const char LF = '\n';
86+
const char NULL = (char)0;
87+
var byteBuffer = new byte[1024 * 1024];
88+
const int bytesAtTheTime = 4;
89+
var detectedEOL = NULL;
90+
var currentChar = NULL;
91+
92+
int bytesRead;
93+
while ((bytesRead = stream.Read(byteBuffer, 0, byteBuffer.Length)) > 0)
94+
{
95+
var i = 0;
96+
for (; i <= bytesRead - bytesAtTheTime; i += bytesAtTheTime)
97+
{
98+
currentChar = (char)byteBuffer[i];
99+
100+
if (detectedEOL != NULL)
101+
{
102+
if (currentChar == detectedEOL)
103+
{ lineCount++; }
104+
105+
currentChar = (char)byteBuffer[i + 1];
106+
if (currentChar == detectedEOL)
107+
{ lineCount++; }
108+
109+
currentChar = (char)byteBuffer[i + 2];
110+
if (currentChar == detectedEOL)
111+
{ lineCount++; }
112+
113+
currentChar = (char)byteBuffer[i + 3];
114+
if (currentChar == detectedEOL)
115+
{ lineCount++; }
116+
}
117+
else
118+
{
119+
if (currentChar == LF || currentChar == CR)
120+
{
121+
detectedEOL = currentChar;
122+
lineCount++;
123+
}
124+
i -= bytesAtTheTime - 1;
125+
}
126+
}
127+
128+
for (; i < bytesRead; i++)
129+
{
130+
currentChar = (char)byteBuffer[i];
131+
132+
if (detectedEOL != NULL)
133+
{
134+
if (currentChar == detectedEOL)
135+
{ lineCount++; }
136+
}
137+
else
138+
{
139+
if (currentChar == LF || currentChar == CR)
140+
{
141+
detectedEOL = currentChar;
142+
lineCount++;
143+
}
144+
}
145+
}
146+
}
147+
148+
if (currentChar != LF && currentChar != CR && currentChar != NULL)
149+
{
150+
lineCount++;
151+
}
152+
153+
Assert.Equal(expectedNumberOfLines, lineCount);
154+
}
155+
}
156+
}
157+

cache-simulator.sln

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TraceGenerator", "TraceGene
1313
EndProject
1414
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CacheSimulator", "CacheSimulator\CacheSimulator.csproj", "{66DEB549-830E-4E69-9B70-932910100071}"
1515
EndProject
16-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RamGenerator.Tests", "RamGenerator.Tests\RamGenerator.Tests.csproj", "{83BCA7BF-405F-4379-83F4-496531F89B95}"
16+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RamGenerator.Tests", "RamGenerator.Tests\RamGenerator.Tests.csproj", "{83BCA7BF-405F-4379-83F4-496531F89B95}"
17+
EndProject
18+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TraceGenerator.Tests", "TraceGenerator.Tests\TraceGenerator.Tests.csproj", "{7DD0C47E-4A65-4693-B9F9-54685B280236}"
1719
EndProject
1820
Global
1921
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -45,6 +47,10 @@ Global
4547
{83BCA7BF-405F-4379-83F4-496531F89B95}.Debug|Any CPU.Build.0 = Debug|Any CPU
4648
{83BCA7BF-405F-4379-83F4-496531F89B95}.Release|Any CPU.ActiveCfg = Release|Any CPU
4749
{83BCA7BF-405F-4379-83F4-496531F89B95}.Release|Any CPU.Build.0 = Release|Any CPU
50+
{7DD0C47E-4A65-4693-B9F9-54685B280236}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
51+
{7DD0C47E-4A65-4693-B9F9-54685B280236}.Debug|Any CPU.Build.0 = Debug|Any CPU
52+
{7DD0C47E-4A65-4693-B9F9-54685B280236}.Release|Any CPU.ActiveCfg = Release|Any CPU
53+
{7DD0C47E-4A65-4693-B9F9-54685B280236}.Release|Any CPU.Build.0 = Release|Any CPU
4854
EndGlobalSection
4955
GlobalSection(SolutionProperties) = preSolution
5056
HideSolutionNode = FALSE

0 commit comments

Comments
 (0)