This commit is contained in:
chudov
2011-11-15 10:56:49 +00:00
parent 18af0c595d
commit 4520762a72
25 changed files with 1958 additions and 780 deletions

View File

@@ -15,7 +15,7 @@ namespace CUETools.TestHelpers
private int tempOffs;
private int nextError;
public NoiseAndErrorsGenerator(AudioPCMConfig pcm, long sampleCount, int seed, int offset, int errors)
public NoiseAndErrorsGenerator(AudioPCMConfig pcm, long sampleCount, int seed, int offset, int errors, int maxStrideErrors = 0)
{
if (offset < 0)
throw new ArgumentOutOfRangeException("offset", "offset cannot be negative");
@@ -35,8 +35,15 @@ namespace CUETools.TestHelpers
rnd.NextBytes(new byte[byteOff % temp.Length]);
this.errors = new int[errors];
this.rnd2 = new Random(seed);
for (int i = 0; i < errors; i++)
this.errors[i] = this.rnd2.Next(0, (int)sampleCount);
var strideErrors = new int[10 * 588];
for (int i = 0; i < errors; i++)
{
do
{
this.errors[i] = this.rnd2.Next(0, (int)sampleCount);
} while (maxStrideErrors > 0 && strideErrors[this.errors[i] % (10 * 588)] >= maxStrideErrors);
strideErrors[this.errors[i] % (10 * 588)]++;
}
this.rnd2 = new Random(seed);
Array.Sort(this.errors);
this.nextError = 0;

View File

@@ -10,9 +10,9 @@ namespace CUETools.TestHelpers
public class TestImageGenerator
{
public CDImageLayout toc;
public int seed, offset, start, end, errors;
public int seed, offset, start, end, errors, maxStrideErrors;
public TestImageGenerator(CDImageLayout toc, int seed, int offset, int errors, int start, int end)
public TestImageGenerator(CDImageLayout toc, int seed, int offset, int errors, int maxStrideErrors, int start, int end)
{
this.toc = toc;
this.seed = seed;
@@ -20,20 +20,21 @@ namespace CUETools.TestHelpers
this.start = start;
this.end = end;
this.errors = errors;
this.maxStrideErrors = maxStrideErrors;
}
public TestImageGenerator(string trackoffsets, int seed, int offset, int errors, int start, int end)
: this (new CDImageLayout(trackoffsets), seed, offset, errors, start, end)
public TestImageGenerator(string trackoffsets, int seed, int offset, int errors, int maxStrideErrors, int start, int end)
: this(new CDImageLayout(trackoffsets), seed, offset, errors, maxStrideErrors, start, end)
{
}
public TestImageGenerator(CDImageLayout toc, int seed, int offset, int errors)
: this(toc, seed, offset, errors, 0, (int)toc.AudioLength * 588)
public TestImageGenerator(CDImageLayout toc, int seed, int offset, int errors = 0, int maxStrideErrors = 0)
: this(toc, seed, offset, errors, maxStrideErrors, 0, (int)toc.AudioLength * 588)
{
}
public TestImageGenerator(string trackoffsets, int seed, int offset, int errors)
: this(new CDImageLayout(trackoffsets), seed, offset, errors)
public TestImageGenerator(string trackoffsets, int seed, int offset = 0, int errors = 0, int maxStrideErrors = 0)
: this(new CDImageLayout(trackoffsets), seed, offset, errors, maxStrideErrors)
{
}
@@ -45,13 +46,14 @@ namespace CUETools.TestHelpers
this.start = copy.start;
this.end = copy.end;
this.errors = copy.errors;
this.maxStrideErrors = copy.maxStrideErrors;
}
public void Write(IAudioDest dest)
{
if (start < 0 || start > end || end > toc.AudioLength * 588)
throw new ArgumentOutOfRangeException();
var src = new NoiseAndErrorsGenerator(AudioPCMConfig.RedBook, end - start, seed, offset + start, errors);
var src = new NoiseAndErrorsGenerator(AudioPCMConfig.RedBook, end - start, seed, offset + start, errors, maxStrideErrors);
var buff = new AudioBuffer(src, 588 * 10);
var rnd = new Random(seed);
//dest.Position = start;
@@ -82,13 +84,13 @@ namespace CUETools.TestHelpers
public static AccurateRipVerify CreateAccurateRipVerify(string trackoffsets, int seed, int offset, int start, int end)
{
var generator = new TestImageGenerator(trackoffsets, seed, offset, 0, start, end);
var generator = new TestImageGenerator(trackoffsets, seed, offset, 0, 0, start, end);
return generator.CreateAccurateRipVerify();
}
public static AccurateRipVerify CreateAccurateRipVerify(string trackoffsets, int seed, int offset)
{
var generator = new TestImageGenerator(trackoffsets, seed, offset, 0);
var generator = new TestImageGenerator(trackoffsets, seed, offset, 0, 0);
return generator.CreateAccurateRipVerify();
}
}