Write only prime residue results
This commit is contained in:
1 parent
68179b14d7
commit
6f692e93ef
2 files changed
+40
-10
No files matched your search
@@ -404,12 +404,18 @@ public class ProgramTests
|
|||||||
var outputField = typeof(Program).GetField("_outputBuilder", BindingFlags.NonPublic | BindingFlags.Static)!;
|
var outputField = typeof(Program).GetField("_outputBuilder", BindingFlags.NonPublic | BindingFlags.Static)!;
|
||||||
var writeIndexField = typeof(Program).GetField("_writeIndex", BindingFlags.NonPublic | BindingFlags.Static)!;
|
var writeIndexField = typeof(Program).GetField("_writeIndex", BindingFlags.NonPublic | BindingFlags.Static)!;
|
||||||
var compositeField = typeof(Program).GetField("_lastCompositeP", BindingFlags.NonPublic | BindingFlags.Static)!;
|
var compositeField = typeof(Program).GetField("_lastCompositeP", BindingFlags.NonPublic | BindingFlags.Static)!;
|
||||||
|
var primeCountField = typeof(Program).GetField("_primeCount", BindingFlags.NonPublic | BindingFlags.Static)!;
|
||||||
|
var primeFoundField = typeof(Program).GetField("_primeFoundAfterInit", BindingFlags.NonPublic | BindingFlags.Static)!;
|
||||||
|
var consoleCounterField = typeof(Program).GetField("_consoleCounter", BindingFlags.NonPublic | BindingFlags.Static)!;
|
||||||
var printResult = typeof(Program).GetMethod("PrintResult", BindingFlags.NonPublic | BindingFlags.Static)!;
|
var printResult = typeof(Program).GetMethod("PrintResult", BindingFlags.NonPublic | BindingFlags.Static)!;
|
||||||
|
|
||||||
var previousResidueMode = (bool)residueModeField.GetValue(null)!;
|
var previousResidueMode = (bool)residueModeField.GetValue(null)!;
|
||||||
var previousOutput = (StringBuilder?)outputField.GetValue(null);
|
var previousOutput = (StringBuilder?)outputField.GetValue(null);
|
||||||
var previousWriteIndex = (int)writeIndexField.GetValue(null)!;
|
var previousWriteIndex = (int)writeIndexField.GetValue(null)!;
|
||||||
var previousComposite = (bool)compositeField.GetValue(null)!;
|
var previousComposite = (bool)compositeField.GetValue(null)!;
|
||||||
|
var previousPrimeCount = (int)primeCountField.GetValue(null)!;
|
||||||
|
var previousPrimeFound = (bool)primeFoundField.GetValue(null)!;
|
||||||
|
var previousConsoleCounter = (int)consoleCounterField.GetValue(null)!;
|
||||||
|
|
||||||
var builder = StringBuilderPool.Rent();
|
var builder = StringBuilderPool.Rent();
|
||||||
|
|
||||||
@@ -420,11 +426,19 @@ public class ProgramTests
|
|||||||
compositeField.SetValue(null, true);
|
compositeField.SetValue(null, true);
|
||||||
outputField.SetValue(null, builder);
|
outputField.SetValue(null, builder);
|
||||||
writeIndexField.SetValue(null, 0);
|
writeIndexField.SetValue(null, 0);
|
||||||
|
primeCountField.SetValue(null, 0);
|
||||||
|
primeFoundField.SetValue(null, false);
|
||||||
|
consoleCounterField.SetValue(null, 0);
|
||||||
|
|
||||||
printResult.Invoke(null, new object[] { 9UL, false, false, false });
|
printResult.Invoke(null, new object[] { 9UL, false, false, false });
|
||||||
|
|
||||||
builder.Length.Should().Be(0);
|
builder.ToString().Should().BeEmpty();
|
||||||
((int)writeIndexField.GetValue(null)!).Should().Be(0);
|
((int)writeIndexField.GetValue(null)!).Should().Be(0);
|
||||||
|
|
||||||
|
printResult.Invoke(null, new object[] { 11UL, true, false, true });
|
||||||
|
|
||||||
|
builder.ToString().Should().Be("11,True,False,True" + Environment.NewLine);
|
||||||
|
((int)writeIndexField.GetValue(null)!).Should().Be(1);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -432,6 +446,9 @@ public class ProgramTests
|
|||||||
writeIndexField.SetValue(null, previousWriteIndex);
|
writeIndexField.SetValue(null, previousWriteIndex);
|
||||||
residueModeField.SetValue(null, previousResidueMode);
|
residueModeField.SetValue(null, previousResidueMode);
|
||||||
compositeField.SetValue(null, previousComposite);
|
compositeField.SetValue(null, previousComposite);
|
||||||
|
primeCountField.SetValue(null, previousPrimeCount);
|
||||||
|
primeFoundField.SetValue(null, previousPrimeFound);
|
||||||
|
consoleCounterField.SetValue(null, previousConsoleCounter);
|
||||||
builder.Clear();
|
builder.Clear();
|
||||||
StringBuilderPool.Return(builder);
|
StringBuilderPool.Return(builder);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -836,28 +836,25 @@ internal static class Program
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_useResidueMode && _lastCompositeP)
|
bool lastWasComposite = _lastCompositeP;
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool primeFlag = false, printToConsole = false;
|
bool primeFlag = false, printToConsole = false;
|
||||||
|
|
||||||
StringBuilder localBuilder = StringBuilderPool.Rent();
|
StringBuilder? localBuilder = passedAllTests ? StringBuilderPool.Rent() : null;
|
||||||
|
if (localBuilder is not null)
|
||||||
|
{
|
||||||
_ = localBuilder
|
_ = localBuilder
|
||||||
.Append(currentP).Append(',')
|
.Append(currentP).Append(',')
|
||||||
.Append(searchedMersenne).Append(',')
|
.Append(searchedMersenne).Append(',')
|
||||||
.Append(detailedCheck).Append(',')
|
.Append(detailedCheck).Append(',')
|
||||||
.Append(passedAllTests).Append('\n');
|
.Append(passedAllTests).Append('\n');
|
||||||
|
}
|
||||||
|
|
||||||
lock (Sync)
|
lock (Sync)
|
||||||
{
|
{
|
||||||
_ = _outputBuilder!.Append(localBuilder);
|
|
||||||
|
|
||||||
if (_consoleCounter >= ConsoleInterval)
|
if (_consoleCounter >= ConsoleInterval)
|
||||||
{
|
{
|
||||||
printToConsole = true;
|
printToConsole = true;
|
||||||
primeFlag = _primeFoundAfterInit;
|
primeFlag = passedAllTests && !lastWasComposite && _primeFoundAfterInit;
|
||||||
_consoleCounter = 0;
|
_consoleCounter = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -865,14 +862,21 @@ internal static class Program
|
|||||||
_consoleCounter++;
|
_consoleCounter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (localBuilder is not null)
|
||||||
|
{
|
||||||
|
_ = _outputBuilder!.Append(localBuilder);
|
||||||
|
|
||||||
_writeIndex++;
|
_writeIndex++;
|
||||||
if (_writeIndex >= _writeBatchSize)
|
if (_writeIndex >= _writeBatchSize)
|
||||||
{
|
{
|
||||||
FlushBuffer();
|
FlushBuffer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (printToConsole)
|
if (printToConsole)
|
||||||
|
{
|
||||||
|
if (localBuilder is not null)
|
||||||
{
|
{
|
||||||
if (primeFlag)
|
if (primeFlag)
|
||||||
{
|
{
|
||||||
@@ -884,9 +888,18 @@ internal static class Program
|
|||||||
|
|
||||||
Console.WriteLine(localBuilder.Remove(localBuilder.Length - 1, 1).ToString());
|
Console.WriteLine(localBuilder.Remove(localBuilder.Length - 1, 1).ToString());
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine($"{currentP},{searchedMersenne},{detailedCheck},{passedAllTests}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (localBuilder is not null)
|
||||||
|
{
|
||||||
|
localBuilder.Clear();
|
||||||
StringBuilderPool.Return(localBuilder);
|
StringBuilderPool.Return(localBuilder);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private static void FlushBuffer()
|
private static void FlushBuffer()
|
||||||
|
|||||||
Reference in new issue
Block a user