|
2 registered members (TipmyPip, ukgamer),
4,144
guests, and 1
spider. |
|
Key:
Admin,
Global Mod,
Mod
|
|
|
Causal Cross-Horizon Ridge Forecast (cont.)
[Re: TipmyPip]
#489749
57 minutes ago
57 minutes ago
|
Joined: Sep 2017
Posts: 372
TipmyPip
OP
Senior Member
|
OP
Senior Member
Joined: Sep 2017
Posts: 372
|
// Case 23: old_shock; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case23()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 211, 0.012, 0.0003 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "old_shock: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "old_shock: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "old_shock: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "old_shock: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_shock: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "old_shock: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[59] = 2.;
TS2Expect(TS2Evaluate() == 0., "old_shock: implausible return rejected");
TS2Expect(TS2Quality == 0., "old_shock: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "old_shock: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_shock: quality restored");
}
// Case 24: sparse_up_events; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case24()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 17 == 0, 0.003, -0.0001);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sparse_up_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sparse_up_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sparse_up_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sparse_up_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_up_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sparse_up_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[96] = 2.;
TS2Expect(TS2Evaluate() == 0., "sparse_up_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "sparse_up_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sparse_up_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_up_events: quality restored");
}
// Case 25: sparse_down_events; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case25()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 17 == 0, -0.003, 0.0001);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sparse_down_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sparse_down_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sparse_down_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sparse_down_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_down_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sparse_down_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[133] = 2.;
TS2Expect(TS2Evaluate() == 0., "sparse_down_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "sparse_down_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sparse_down_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_down_events: quality restored");
}
// Case 26: clustered_up_events; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case26()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 29 < 4, 0.002, -0.00015);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "clustered_up_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "clustered_up_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "clustered_up_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "clustered_up_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_up_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "clustered_up_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[170] = 2.;
TS2Expect(TS2Evaluate() == 0., "clustered_up_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "clustered_up_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "clustered_up_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_up_events: quality restored");
}
// Case 27: clustered_down_events; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case27()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 29 < 4, -0.002, 0.00015);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "clustered_down_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "clustered_down_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "clustered_down_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "clustered_down_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_down_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "clustered_down_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[207] = 2.;
TS2Expect(TS2Evaluate() == 0., "clustered_down_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "clustered_down_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "clustered_down_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_down_events: quality restored");
}
// Case 28: capped_sawtooth; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case28()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.00012 * ((I % 19) - 9);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "capped_sawtooth: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "capped_sawtooth: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "capped_sawtooth: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "capped_sawtooth: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "capped_sawtooth: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "capped_sawtooth: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[244] = 2.;
TS2Expect(TS2Evaluate() == 0., "capped_sawtooth: implausible return rejected");
TS2Expect(TS2Quality == 0., "capped_sawtooth: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "capped_sawtooth: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "capped_sawtooth: quality restored");
}
// Case 29: triangular_wave; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case29()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.00015 * (abs((I % 24) - 12) - 6);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "triangular_wave: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "triangular_wave: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "triangular_wave: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "triangular_wave: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "triangular_wave: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "triangular_wave: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[25] = 2.;
TS2Expect(TS2Evaluate() == 0., "triangular_wave: implausible return rejected");
TS2Expect(TS2Quality == 0., "triangular_wave: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "triangular_wave: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "triangular_wave: quality restored");
}
// Case 30: convex_drift; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case30()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0001 + 0.001 * pow(I / 256., 2.);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "convex_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "convex_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "convex_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "convex_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "convex_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "convex_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[62] = 2.;
TS2Expect(TS2Evaluate() == 0., "convex_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "convex_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "convex_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "convex_drift: quality restored");
}
// Case 31: concave_drift; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case31()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0011 - 0.001 * pow(I / 256., 2.);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "concave_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "concave_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "concave_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "concave_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "concave_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "concave_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[99] = 2.;
TS2Expect(TS2Evaluate() == 0., "concave_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "concave_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "concave_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "concave_drift: quality restored");
}
// Case 32: sigmoid_transition; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case32()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * (2. / (1. + exp((I - 90.) / 12.)) - 1.);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sigmoid_transition: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sigmoid_transition: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sigmoid_transition: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sigmoid_transition: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sigmoid_transition: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sigmoid_transition: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[136] = 2.;
TS2Expect(TS2Evaluate() == 0., "sigmoid_transition: implausible return rejected");
TS2Expect(TS2Quality == 0., "sigmoid_transition: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sigmoid_transition: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sigmoid_transition: quality restored");
}
// Case 33: damped_oscillation; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case33()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.002 * exp(-0.012 * I) * cos(0.37 * I);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "damped_oscillation: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "damped_oscillation: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "damped_oscillation: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "damped_oscillation: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "damped_oscillation: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "damped_oscillation: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[173] = 2.;
TS2Expect(TS2Evaluate() == 0., "damped_oscillation: implausible return rejected");
TS2Expect(TS2Quality == 0., "damped_oscillation: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "damped_oscillation: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "damped_oscillation: quality restored");
}
// Case 34: growing_oscillation; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case34()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0001 * exp(0.008 * I) * cos(0.37 * I);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "growing_oscillation: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "growing_oscillation: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "growing_oscillation: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "growing_oscillation: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "growing_oscillation: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "growing_oscillation: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[210] = 2.;
TS2Expect(TS2Evaluate() == 0., "growing_oscillation: implausible return rejected");
TS2Expect(TS2Quality == 0., "growing_oscillation: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "growing_oscillation: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "growing_oscillation: quality restored");
}
// Case 35: phase_discontinuity; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case35()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(0.3 * I + ifelse(I < 40, 1.5, 0.));
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "phase_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "phase_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "phase_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "phase_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "phase_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "phase_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[247] = 2.;
TS2Expect(TS2Evaluate() == 0., "phase_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "phase_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "phase_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "phase_discontinuity: quality restored");
}
// Case 36: frequency_discontinuity; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case36()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(ifelse(I < 80, 0.17, 0.63) * I);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "frequency_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "frequency_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "frequency_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "frequency_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "frequency_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "frequency_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[28] = 2.;
TS2Expect(TS2Evaluate() == 0., "frequency_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "frequency_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "frequency_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "frequency_discontinuity: quality restored");
}
// Case 37: amplitude_discontinuity; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case37()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 80, 0.002, 0.0003) * sin(0.4 * I);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "amplitude_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "amplitude_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "amplitude_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "amplitude_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "amplitude_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[65] = 2.;
TS2Expect(TS2Evaluate() == 0., "amplitude_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "amplitude_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "amplitude_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_discontinuity: quality restored");
}
// Case 38: smooth_pulse; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case38()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.003 * exp(-pow((I - 32.) / 12., 2.)) - 0.0003;
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "smooth_pulse: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "smooth_pulse: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "smooth_pulse: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "smooth_pulse: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "smooth_pulse: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "smooth_pulse: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[102] = 2.;
TS2Expect(TS2Evaluate() == 0., "smooth_pulse: implausible return rejected");
TS2Expect(TS2Quality == 0., "smooth_pulse: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "smooth_pulse: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "smooth_pulse: quality restored");
}
// Case 39: double_pulse; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case39()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.002 * exp(-pow((I - 16.) / 6., 2.)) - 0.002 * exp(-pow((I - 60.) / 9., 2.));
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "double_pulse: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "double_pulse: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "double_pulse: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "double_pulse: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "double_pulse: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "double_pulse: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[139] = 2.;
TS2Expect(TS2Evaluate() == 0., "double_pulse: implausible return rejected");
TS2Expect(TS2Quality == 0., "double_pulse: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "double_pulse: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "double_pulse: quality restored");
}
// Case 40: cross_scale_conflict; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case40()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0008 * cos(0.04 * I) - 0.001 * cos(0.6 * I);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "cross_scale_conflict: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "cross_scale_conflict: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "cross_scale_conflict: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "cross_scale_conflict: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "cross_scale_conflict: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "cross_scale_conflict: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[176] = 2.;
TS2Expect(TS2Evaluate() == 0., "cross_scale_conflict: implausible return rejected");
TS2Expect(TS2Quality == 0., "cross_scale_conflict: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "cross_scale_conflict: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "cross_scale_conflict: quality restored");
}
// Case 41: near_flat_noise; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case41()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0000002 * sin(0.73 * I) + 0.0000001 * cos(0.29 * I);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "near_flat_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "near_flat_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "near_flat_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "near_flat_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "near_flat_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "near_flat_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[213] = 2.;
TS2Expect(TS2Evaluate() == 0., "near_flat_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "near_flat_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "near_flat_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "near_flat_noise: quality restored");
}
// Case 42: large_return_units; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case42()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.03 * sin(0.13 * I) + 0.01 * cos(0.7 * I);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "large_return_units: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "large_return_units: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "large_return_units: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "large_return_units: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "large_return_units: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "large_return_units: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[250] = 2.;
TS2Expect(TS2Evaluate() == 0., "large_return_units: implausible return rejected");
TS2Expect(TS2Quality == 0., "large_return_units: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "large_return_units: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "large_return_units: quality restored");
}
// Case 43: deterministic_roughness; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case43()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(12.9898 * I + 78.233 * sin(4.1414 * I));
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "deterministic_roughness: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "deterministic_roughness: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "deterministic_roughness: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "deterministic_roughness: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "deterministic_roughness: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "deterministic_roughness: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[31] = 2.;
TS2Expect(TS2Evaluate() == 0., "deterministic_roughness: implausible return rejected");
TS2Expect(TS2Quality == 0., "deterministic_roughness: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "deterministic_roughness: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "deterministic_roughness: quality restored");
}
// Case 44: weeklike_gaps; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case44()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 120 < 8, 0., 0.001 * cos(0.33 * I));
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "weeklike_gaps: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "weeklike_gaps: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "weeklike_gaps: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "weeklike_gaps: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "weeklike_gaps: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "weeklike_gaps: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[68] = 2.;
TS2Expect(TS2Evaluate() == 0., "weeklike_gaps: implausible return rejected");
TS2Expect(TS2Quality == 0., "weeklike_gaps: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "weeklike_gaps: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "weeklike_gaps: quality restored");
}
// Case 45: quiet_recent_window; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case45()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 24, 0., 0.001 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "quiet_recent_window: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "quiet_recent_window: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "quiet_recent_window: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "quiet_recent_window: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_recent_window: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "quiet_recent_window: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[105] = 2.;
TS2Expect(TS2Evaluate() == 0., "quiet_recent_window: implausible return rejected");
TS2Expect(TS2Quality == 0., "quiet_recent_window: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "quiet_recent_window: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_recent_window: quality restored");
}
// Case 46: quiet_old_window; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case46()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I > 180, 0., 0.001 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "quiet_old_window: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "quiet_old_window: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "quiet_old_window: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "quiet_old_window: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_old_window: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "quiet_old_window: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[142] = 2.;
TS2Expect(TS2Evaluate() == 0., "quiet_old_window: implausible return rejected");
TS2Expect(TS2Quality == 0., "quiet_old_window: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "quiet_old_window: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_old_window: quality restored");
}
// Case 47: unequal_tail_mass; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case47()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 13 == 0, -0.004, 0.00035 + 0.0001 * sin(I));
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "unequal_tail_mass: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "unequal_tail_mass: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "unequal_tail_mass: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "unequal_tail_mass: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "unequal_tail_mass: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "unequal_tail_mass: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[179] = 2.;
TS2Expect(TS2Evaluate() == 0., "unequal_tail_mass: implausible return rejected");
TS2Expect(TS2Quality == 0., "unequal_tail_mass: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "unequal_tail_mass: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "unequal_tail_mass: quality restored");
}
// Case 48: bounded_chaotic_phase; model 13 perturbation phase 1.781000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case48()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(I * I * 0.61803398875);
TS2Returns[I] += 0.00000003 * sin(1.781000 + I * 0.359000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "bounded_chaotic_phase: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "bounded_chaotic_phase: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "bounded_chaotic_phase: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "bounded_chaotic_phase: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "bounded_chaotic_phase: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "bounded_chaotic_phase: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[216] = 2.;
TS2Expect(TS2Evaluate() == 0., "bounded_chaotic_phase: implausible return rejected");
TS2Expect(TS2Quality == 0., "bounded_chaotic_phase: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "bounded_chaotic_phase: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "bounded_chaotic_phase: quality restored");
}
void TS2SelfTest()
{
int I;
TS2Checks = 0;
TS2Failures = 0;
file_write(TS2TestLog, "Synthetic property suite\n", 0);
for (I = 0; I < 256; I++)
TS2Returns[I] = 0.;
TS2Expect(TS2Evaluate() == 0., "flat path has no edge");
TS2Expect(TS2Quality == 0., "flat path clears quality");
TS2KnownResponse();
TS2Case1();
TS2Case2();
TS2Case3();
TS2Case4();
TS2Case5();
TS2Case6();
TS2Case7();
TS2Case8();
TS2Case9();
TS2Case10();
TS2Case11();
TS2Case12();
TS2Case13();
TS2Case14();
TS2Case15();
TS2Case16();
TS2Case17();
TS2Case18();
TS2Case19();
TS2Case20();
TS2Case21();
TS2Case22();
TS2Case23();
TS2Case24();
TS2Case25();
TS2Case26();
TS2Case27();
TS2Case28();
TS2Case29();
TS2Case30();
TS2Case31();
TS2Case32();
TS2Case33();
TS2Case34();
TS2Case35();
TS2Case36();
TS2Case37();
TS2Case38();
TS2Case39();
TS2Case40();
TS2Case41();
TS2Case42();
TS2Case43();
TS2Case44();
TS2Case45();
TS2Case46();
TS2Case47();
TS2Case48();
TSRepairTests();
file_append(TS2TestLog, strf("RESULT: %d checks; %d failures\n", TS2Checks, TS2Failures));
}
// Embedded execution and risk controls; no custom runtime include is required.
function run()
{
int Index;
var Current, Previous, Edge, Sigma, OrderLots, UnitRisk, Budget;
BarPeriod = 60;
LookBack = 260;
StartDate = 20240101;
EndDate = 20241231;
Capital = 10000.;
Hedge = 0;
MaxLong = 1;
MaxShort = 1;
#ifdef TS2_SELFTEST
if (is(INITRUN))
{
TS2SelfTest();
quit("TS2 synthetic tests complete; no historical or live orders");
}
return;
#endif
if (!asset("EUR/USD"))
return;
algo(TS2Algo);
if (is(EXITRUN) || is(LOOKBACK))
return;
for (Index = 0; Index < TS2_N; Index++)
{
Current = priceClose(Index + 1);
Previous = priceClose(Index + 2);
if (!TSIsFinite(Current) || !TSIsFinite(Previous) || !(Current > 0.) || !(Previous > 0.))
{
exitLong();
exitShort();
return;
}
TS2Returns[Index] = log(Current / Previous);
}
Edge = TS2Evaluate();
plot("model edge", Edge, NEW, BLUE);
plot("model quality", TS2Quality, 0, RED);
if (Edge < 0.10 || TS2Quality < 0.15)
exitLong();
if (Edge > -0.10 || TS2Quality < 0.15)
exitShort();
if (abs(Edge) < 0.25 || TS2Quality < 0.30)
return;
if (NumOpenLong + NumOpenShort > 0)
return;
if (PIP <= 0. || PIPCost <= 0. || LotAmount <= 0. || MarginCost <= 0.)
return;
if (Balance <= 0. || Equity < 0.85 * Balance)
return;
Sigma = 0.;
for (Index = 0; Index < 48; Index++)
Sigma += TS2Returns[Index] * TS2Returns[Index] / 48.;
Sigma = sqrt(Sigma) * priceClose(1);
Stop = max(20. * PIP, 3. * Sigma);
TakeProfit = 2. * Stop;
LifeTime = TS2Holding;
UnitRisk = TSUnitStopRisk(priceClose(0));
if (UnitRisk <= 0.)
return;
Budget = 0.0025 * min(Balance, Equity);
OrderLots = min(Budget / UnitRisk, 2000. / LotAmount);
OrderLots = min(OrderLots, max(0., Equity - MarginVal) * 0.5 / MarginCost);
if (OrderLots < 1.)
return;
Lots = floor(OrderLots);
Risk = 0.;
Margin = 0.;
if (Edge > 0.)
enterLong();
else
enterShort();
}
|
|
|
Optimal Transport Distribution Shift
[Re: TipmyPip]
#489750
54 minutes ago
54 minutes ago
|
Joined: Sep 2017
Posts: 372
TipmyPip
OP
Senior Member
|
OP
Senior Member
Joined: Sep 2017
Posts: 372
|
This strategy compares return distributions across aggregation scales using one-dimensional monotone transport. It does not estimate a robust regression slope through quantile points. Its hypothesis is that a broad, directionally consistent translation of the recent return distribution relative to older, more aggregated distributions may identify an ongoing directional regime. A distribution that merely becomes wider or changes shape should receive less confidence than one whose probability mass shifts coherently in one direction. Three equal-sized empirical supports are constructed. The recent support contains the newest 32 individual returns. The intermediate support contains 32 averages of three consecutive returns from indices 32 through 127. The reference support contains 32 averages of four consecutive returns from indices 128 through 255. Each support is sorted independently. Every sorted observation has mass 1/32. Matching equal ranks is the monotone optimal coupling for the absolute-distance transport cost in one dimension. No iterative transport solver or external numerical library is required. For sorted rank j, define move[j] = recent[j] - reference[j]. The first transport distance is W1 = mean(abs(move[j])), while signed displacement is shift = mean(move[j]). Shape deformation is shape = mean(abs(move[j]-shift)). The intermediate signed shift is measured against the same reference support. The model also counts the fractions of ranks moving upward and downward, obtaining consistency = abs(up_fraction - down_fraction). Reference dispersion is the standard deviation of the reference support, not a sample estimate of a contemporaneous tradable spread. The heuristic quality is consistency*abs(shift)/(W1 + shape), with numerical floors where necessary. This expression penalizes cancellation and deformation. The recent and intermediate signed shifts must agree, and quality must exceed the model's internal threshold before execution is considered. A standardized displacement z = shift/(reference_spread + shape) becomes edge = z/sqrt(1+z^2). Positive displacement supports a long, negative displacement supports a short, and the maximum holding duration is eight hourly bars. Shared entry and exit gates remain an additional layer rather than replacing this transport logic. A key limitation is that averaging three or four returns changes distribution width even under an unchanged process. Therefore this implementation studies displacement across explicitly different aggregation scales; it does not pretend that all three supports are draws from identical marginal distributions. Sorting also discards temporal order within each support, so an isolated rearrangement can leave the transport measure unchanged. Tail shocks can move several summary quantities at once. Synthetic symmetry and rejection checks help validate implementation behavior, but they cannot determine whether coherent transport displacement forecasts continuation after spread, commission, and slippage. That empirical question requires separate market-data evaluation.
// TS14_TransportShift: Optimal transport distribution displacement.
// Standalone model implementation with embedded safety and engine code.
// Market scope: EUR/USD completed-hour return aggregation horizons.
// These are not actual bond maturities or a futures calendar spread.
// Model diagnostic: Wasserstein displacement divided by reference spread.
// Quality heuristic: Directional mass agreement and translation relative to deformation.
// Limitation: Averaging changes distribution width; interpretation is displacement across aggregation scales, not identical marginals.
// No claim of profitability, calibration, or independent strategy returns.
// Inputs: 256 newest-first log returns; all must be finite and within [-1,1].
// Output: bounded signed edge; positive buys, negative sells, zero abstains.
// Quality is a heuristic filter, never a calibrated success probability.
// The synthetic suite below is included in the total file line count.
// Regenerate with build_sources.py; compare hashes before deployment.
#include <default.c>
string TS2Algo = "TS14";
string TS2TestLog = "Log/TS14_TransportShift_test.txt";
int TS2Holding = 8;
// R1/R3: IEEE-754 finite validation without lite-C unordered comparisons.
// Supported Zorro Windows targets use 64-bit var and little-endian 32-bit int.
int TSIsFinite(var Value)
{
int Words[2];
memcpy(Words, &Value, sizeof(Value));
return (Words[1] & 0x7ff00000) != 0x7ff00000;
}
// Forex commission per lot; negative quotes are percent, not cash rebates.
// Return -1 on invalid metadata rather than accepting an unknown risk amount.
var TSFeePerLot(var FeeQuote, var UnitsPerLot, var PipSize, var PipValue, var RefPrice)
{
var FeeValue;
if (!TSIsFinite(FeeQuote) || !TSIsFinite(UnitsPerLot) || !TSIsFinite(PipSize) ||
!TSIsFinite(PipValue) || !TSIsFinite(RefPrice))
return -1.;
if (!(UnitsPerLot > 0.) || !(PipSize > 0.) || !(PipValue > 0.) || !(RefPrice > 0.))
return -1.;
if (FeeQuote >= 0.)
FeeValue = FeeQuote * UnitsPerLot / 10000.;
else
FeeValue = (-FeeQuote / 100.) * (PipValue / PipSize) * RefPrice;
if (!TSIsFinite(FeeValue) || FeeValue < 0.)
return -1.;
return FeeValue;
}
var TSUnitStopRisk(var RefPrice)
{
var FeeValue, FeePrice, StopRisk;
if (!TSIsFinite(RefPrice) || !(RefPrice > 0.) || !TSIsFinite(Stop) || !(Stop > 0.) ||
!TSIsFinite(Spread) || !TSIsFinite(Balance) || !TSIsFinite(Equity) ||
!TSIsFinite(MarginCost) || !TSIsFinite(MarginVal))
return -1.;
if (!(Balance > 0.) || !(Equity > 0.) || !(MarginCost > 0.))
return -1.;
// Conservative percentage-fee price through the stop, absent gaps/slippage.
FeePrice = RefPrice + abs(Spread) + Stop;
FeeValue = TSFeePerLot(Commission, LotAmount, PIP, PIPCost, FeePrice);
if (FeeValue < 0.)
return -1.;
StopRisk = (Stop + abs(Spread)) / PIP * PIPCost + FeeValue;
if (!TSIsFinite(StopRisk) || !(StopRisk > 0.))
return -1.;
return StopRisk;
}
// Embedded input, state, and test contracts; identical safety is not novel alpha.
#define TS2_N 256
var TS2Returns[256];
var TS2Quality;
var TS2Statistic;
var TS2Raw;
int TS2Checks;
int TS2Failures;
var TS2Model();
var TS2Bound(var Value)
{
if (!TSIsFinite(Value))
return 0.;
return max(-1., min(1., Value));
}
var TS2Evaluate()
{
int Index;
var Energy;
TS2Quality = 0.;
TS2Statistic = 0.;
TS2Raw = 0.;
Energy = 0.;
for (Index = 0; Index < TS2_N; Index++)
{
if (!TSIsFinite(TS2Returns[Index]))
return 0.;
if (abs(TS2Returns[Index]) > 1.)
return 0.;
Energy += TS2Returns[Index] * TS2Returns[Index];
}
if (Energy < 1.e-24)
return 0.;
TS2Raw = TS2Model();
if (!TSIsFinite(TS2Raw) || abs(TS2Raw) > 1.e12 ||
!TSIsFinite(TS2Quality) || !TSIsFinite(TS2Statistic))
{
TS2Quality = 0.;
TS2Statistic = 0.;
TS2Raw = 0.;
return 0.;
}
TS2Quality = max(0., min(1., TS2Quality));
return TS2Bound(TS2Raw);
}
void TS2Expect(int Passed, string Label)
{
TS2Checks++;
if (!Passed)
{
TS2Failures++;
file_append(TS2TestLog, strf("FAIL: %s\n", Label));
}
}
// BEGIN ANALYTICAL MODEL
// One-dimensional monotone optimal transport compares entire distributions.
// This is distribution translation, not a quantile-slope curve fit.
var TS2Model()
{
var Recent[32], Reference[32], Middle[32], Movement[32];
var Key, Wasserstein, SignedShift, Deformation, Center, Dispersion;
var Intermediate, LongShift, Consistency, PositiveMass, NegativeMass;
var Common, Distance, Scale, Signal;
int Index, Position, Block;
for (Index = 0; Index < 32; Index++)
{
Recent[Index] = TS2Returns[Index];
Middle[Index] = 0.;
Reference[Index] = 0.;
for (Block = 0; Block < 3; Block++)
Middle[Index] += TS2Returns[32 + 3 * Index + Block] / 3.;
for (Block = 0; Block < 4; Block++)
Reference[Index] += TS2Returns[128 + 4 * Index + Block] / 4.;
}
// Equal-probability supports; insertion sort has deterministic tie handling.
for (Index = 1; Index < 32; Index++)
{
Key = Recent[Index];
Position = Index - 1;
while (Position >= 0)
{
if (Recent[Position] <= Key)
break;
Recent[Position + 1] = Recent[Position];
Position--;
}
Recent[Position + 1] = Key;
Key = Middle[Index];
Position = Index - 1;
while (Position >= 0)
{
if (Middle[Position] <= Key)
break;
Middle[Position + 1] = Middle[Position];
Position--;
}
Middle[Position + 1] = Key;
Key = Reference[Index];
Position = Index - 1;
while (Position >= 0)
{
if (Reference[Position] <= Key)
break;
Reference[Position + 1] = Reference[Position];
Position--;
}
Reference[Position + 1] = Key;
}
Wasserstein = 0.; SignedShift = 0.; Intermediate = 0.;
PositiveMass = 0.; NegativeMass = 0.; Center = 0.;
for (Index = 0; Index < 32; Index++)
{
Movement[Index] = Recent[Index] - Reference[Index];
Wasserstein += abs(Movement[Index]) / 32.;
SignedShift += Movement[Index] / 32.;
Intermediate += (Middle[Index] - Reference[Index]) / 32.;
Center += Reference[Index] / 32.;
if (Movement[Index] > 0.)
PositiveMass += 1. / 32.;
if (Movement[Index] < 0.)
NegativeMass += 1. / 32.;
}
Dispersion = 0.; Deformation = 0.;
for (Index = 0; Index < 32; Index++)
{
Dispersion += pow(Reference[Index] - Center, 2.) / 32.;
Deformation += abs(Movement[Index] - SignedShift) / 32.;
}
Scale = sqrt(Dispersion);
Consistency = abs(PositiveMass - NegativeMass);
TS2Statistic = Wasserstein / max(1.e-16, Scale);
TS2Quality = Consistency * abs(SignedShift) / max(1.e-16, Wasserstein + Deformation);
if (SignedShift * Intermediate <= 0. || TS2Quality < 0.35)
return 0.;
Signal = SignedShift / max(1.e-16, Scale + Deformation);
return Signal / sqrt(1. + Signal * Signal);
}
// END ANALYTICAL MODEL
// Separate repair regression log; the original suite counts stay intact.
int TSRepairChecks = 0;
int TSRepairFailures = 0;
string TSRepairLog = "Log/TS14_TransportShift_repair.txt";
void TSRepairCheck(int Passed, string Label)
{
TSRepairChecks++;
if (!Passed)
{
TSRepairFailures++;
file_append(TSRepairLog, strf("FAIL: %s\n", Label));
}
}
var TSRepairBad(int Kind)
{
int Bits[2];
var Value;
Bits[0] = 0;
Bits[1] = 0x7ff80000;
if (Kind == 1) Bits[1] = 0x7ff00000;
if (Kind == 2) Bits[1] = 0xfff00000;
memcpy(&Value, Bits, sizeof(Value));
return Value;
}
void TSRepairTests()
{
int I, Kind, Position;
var FeeValue, UnitLoss, Budget;
TSRepairChecks = 0; TSRepairFailures = 0;
file_write(TSRepairLog, "Repairs R1-R5: native-safe regression suite\n", 0);
TSRepairCheck(sizeof(FeeValue) == 8, "64-bit var representation");
TSRepairCheck(TSIsFinite(0.), "finite zero");
TSRepairCheck(TSIsFinite(1.), "finite positive");
TSRepairCheck(TSIsFinite(-1.), "finite negative");
for (Kind = 0; Kind < 3; Kind++)
TSRepairCheck(!TSIsFinite(TSRepairBad(Kind)), "reject NaN and both infinities");
TSRepairCheck(abs(TSFeePerLot(0.7, 1000., 0.0001, 0.1, 1.1) - 0.07) < 1.e-6,
"cash commission convention");
TSRepairCheck(TSFeePerLot(0., 1000., 0.0001, 0.1, 1.1) == 0., "zero commission");
FeeValue = TSFeePerLot(-0.02, 1000., 0.0001, 0.1, 1.1);
TSRepairCheck(abs(FeeValue - 0.22) < 1.e-6, "percentage commission convention");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0., 0.1, 1.1) < 0., "invalid pip size");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0.0001, 0., 1.1) < 0., "invalid pip value");
TSRepairCheck(TSFeePerLot(0.7, 0., 0.0001, 0.1, 1.1) < 0., "invalid lot amount");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0.0001, 0.1, -1.) < 0., "invalid fee price");
TSRepairCheck(TSFeePerLot(TSRepairBad(0), 1000., 0.0001, 0.1, 1.1) < 0., "NaN fee quote");
TSRepairCheck(TSFeePerLot(-0.02, 1000., 0.0001, 0.1, TSRepairBad(1)) < 0., "infinite fee price");
TSRepairCheck(TSFeePerLot(-0.02, 1000., TSRepairBad(0), 0.1, 1.1) < 0., "NaN pip metadata");
UnitLoss = (20. * 0.0001 + 0.0001) / 0.0001 * 0.1 + FeeValue;
Budget = 850. * 0.0025;
TSRepairCheck(floor(Budget / UnitLoss) == 0., "percentage fee respects lot-rounding budget");
for (Kind = 0; Kind < 3; Kind++)
{
for (Position = 0; Position < 2; Position++)
{
for (I = 0; I < 256; I++) TS2Returns[I] = 0.0005 + 0.0001 * sin(0.3 * I);
TS2Returns[Position] = TSRepairBad(Kind);
TSRepairCheck(TS2Evaluate() == 0, "non-finite consumed input rejected");
TSRepairCheck(TS2Quality == 0., "invalid return clears quality");
}
}
file_append(TSRepairLog, strf("RESULT: %d checks; %d failures\n", TSRepairChecks, TSRepairFailures));
}
// Synthetic property tests: executed only with -d TS2_SELFTEST.
// Tests do not execute trades, query market data, or establish profitability.
// Known-response anchor: not just a generic bounded-output assertion.
void TS2KnownResponse()
{
int I;
var Edge, Negative;
for (I = 0; I < 256; I++)
TS2Returns[I] = 0.0005;
Edge = TS2Evaluate();
TS2Expect(Edge == 0., "known straight path: model-specific response");
for (I = 0; I < 256; I++)
TS2Returns[I] = -0.0005;
Negative = TS2Evaluate();
TS2Expect(abs(Edge + Negative) < 1.e-7, "known straight path: symmetric response");
}
void TS2KnownTranslation()
{
int I;
var Edge;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001;
if (I < 128)
TS2Returns[I] = 0.002;
if (I < 32)
TS2Returns[I] = 0.003;
}
Edge = TS2Evaluate();
TS2Expect(Edge > 0.99, "translated point masses: positive transport edge");
TS2Expect(TS2Quality > 0.99, "translated point masses: full transport coherence");
}
// Case 1: slow_sine; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case1()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0008 * sin(0.07 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "slow_sine: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "slow_sine: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "slow_sine: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "slow_sine: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "slow_sine: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "slow_sine: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[14] = 2.;
TS2Expect(TS2Evaluate() == 0., "slow_sine: implausible return rejected");
TS2Expect(TS2Quality == 0., "slow_sine: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "slow_sine: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "slow_sine: quality restored");
}
// Case 2: fast_sine; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case2()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0012 * sin(1.1 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "fast_sine: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "fast_sine: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "fast_sine: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "fast_sine: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "fast_sine: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "fast_sine: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[51] = 2.;
TS2Expect(TS2Evaluate() == 0., "fast_sine: implausible return rejected");
TS2Expect(TS2Quality == 0., "fast_sine: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "fast_sine: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "fast_sine: quality restored");
}
// Case 3: two_scale_beating; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case3()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0009 * sin(0.18 * I) + 0.0007 * sin(0.21 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "two_scale_beating: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "two_scale_beating: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "two_scale_beating: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "two_scale_beating: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "two_scale_beating: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "two_scale_beating: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[88] = 2.;
TS2Expect(TS2Evaluate() == 0., "two_scale_beating: implausible return rejected");
TS2Expect(TS2Quality == 0., "two_scale_beating: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "two_scale_beating: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "two_scale_beating: quality restored");
}
// Case 4: amplitude_burst; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case4()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0004 * sin(0.31 * I) * (1. + 3. * exp(-pow((I - 28.) / 8., 2.)));
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "amplitude_burst: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "amplitude_burst: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "amplitude_burst: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "amplitude_burst: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_burst: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "amplitude_burst: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[125] = 2.;
TS2Expect(TS2Evaluate() == 0., "amplitude_burst: implausible return rejected");
TS2Expect(TS2Quality == 0., "amplitude_burst: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "amplitude_burst: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_burst: quality restored");
}
// Case 5: chirp_acceleration; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case5()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(0.0018 * I * I + 0.05 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "chirp_acceleration: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "chirp_acceleration: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "chirp_acceleration: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "chirp_acceleration: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_acceleration: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "chirp_acceleration: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[162] = 2.;
TS2Expect(TS2Evaluate() == 0., "chirp_acceleration: implausible return rejected");
TS2Expect(TS2Quality == 0., "chirp_acceleration: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "chirp_acceleration: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_acceleration: quality restored");
}
// Case 6: chirp_deceleration; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case6()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(7. * sqrt(I + 1.));
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "chirp_deceleration: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "chirp_deceleration: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "chirp_deceleration: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "chirp_deceleration: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_deceleration: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "chirp_deceleration: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[199] = 2.;
TS2Expect(TS2Evaluate() == 0., "chirp_deceleration: implausible return rejected");
TS2Expect(TS2Quality == 0., "chirp_deceleration: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "chirp_deceleration: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_deceleration: quality restored");
}
// Case 7: positive_drift_noise; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case7()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0003 + 0.0009 * sin(0.77 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "positive_drift_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "positive_drift_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "positive_drift_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "positive_drift_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "positive_drift_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "positive_drift_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[236] = 2.;
TS2Expect(TS2Evaluate() == 0., "positive_drift_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "positive_drift_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "positive_drift_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "positive_drift_noise: quality restored");
}
// Case 8: negative_drift_noise; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case8()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = -0.0003 + 0.0009 * sin(0.77 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "negative_drift_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "negative_drift_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "negative_drift_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "negative_drift_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "negative_drift_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "negative_drift_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[17] = 2.;
TS2Expect(TS2Evaluate() == 0., "negative_drift_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "negative_drift_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "negative_drift_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "negative_drift_noise: quality restored");
}
// Case 9: mixed_frequency_drift; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case9()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0002 + 0.0006 * sin(0.23 * I) + 0.0004 * cos(1.37 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "mixed_frequency_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "mixed_frequency_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "mixed_frequency_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "mixed_frequency_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "mixed_frequency_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "mixed_frequency_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[54] = 2.;
TS2Expect(TS2Evaluate() == 0., "mixed_frequency_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "mixed_frequency_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "mixed_frequency_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "mixed_frequency_drift: quality restored");
}
// Case 10: alternating_sign; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case10()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 2 == 0, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "alternating_sign: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "alternating_sign: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "alternating_sign: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "alternating_sign: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "alternating_sign: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "alternating_sign: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[91] = 2.;
TS2Expect(TS2Evaluate() == 0., "alternating_sign: implausible return rejected");
TS2Expect(TS2Quality == 0., "alternating_sign: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "alternating_sign: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "alternating_sign: quality restored");
}
// Case 11: three_bar_blocks; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case11()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 6 < 3, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "three_bar_blocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "three_bar_blocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "three_bar_blocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "three_bar_blocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "three_bar_blocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "three_bar_blocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[128] = 2.;
TS2Expect(TS2Evaluate() == 0., "three_bar_blocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "three_bar_blocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "three_bar_blocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "three_bar_blocks: quality restored");
}
// Case 12: five_bar_blocks; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case12()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 10 < 5, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "five_bar_blocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "five_bar_blocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "five_bar_blocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "five_bar_blocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "five_bar_blocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "five_bar_blocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[165] = 2.;
TS2Expect(TS2Evaluate() == 0., "five_bar_blocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "five_bar_blocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "five_bar_blocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "five_bar_blocks: quality restored");
}
// Case 13: one_sided_steps; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case13()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 24, 0.001, 0.0001) + 0.0001 * sin(I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "one_sided_steps: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "one_sided_steps: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "one_sided_steps: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "one_sided_steps: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "one_sided_steps: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "one_sided_steps: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[202] = 2.;
TS2Expect(TS2Evaluate() == 0., "one_sided_steps: implausible return rejected");
TS2Expect(TS2Quality == 0., "one_sided_steps: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "one_sided_steps: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "one_sided_steps: quality restored");
}
// Case 14: late_reversal; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case14()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 12, -0.0008, 0.0005) + 0.0002 * cos(0.7 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "late_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "late_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "late_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "late_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "late_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "late_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[239] = 2.;
TS2Expect(TS2Evaluate() == 0., "late_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "late_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "late_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "late_reversal: quality restored");
}
// Case 15: middle_reversal; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case15()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 64, 0.0006, -0.0004) + 0.0002 * sin(0.43 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "middle_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "middle_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "middle_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "middle_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "middle_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "middle_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[20] = 2.;
TS2Expect(TS2Evaluate() == 0., "middle_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "middle_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "middle_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "middle_reversal: quality restored");
}
// Case 16: old_reversal; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case16()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 160, 0.0004, -0.0007) + 0.0001 * cos(0.91 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "old_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "old_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "old_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "old_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "old_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[57] = 2.;
TS2Expect(TS2Evaluate() == 0., "old_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "old_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "old_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_reversal: quality restored");
}
// Case 17: volatility_expansion; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case17()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = (0.0002 + 0.001 * exp(-0.015 * I)) * sin(0.81 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "volatility_expansion: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "volatility_expansion: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "volatility_expansion: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "volatility_expansion: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_expansion: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "volatility_expansion: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[94] = 2.;
TS2Expect(TS2Evaluate() == 0., "volatility_expansion: implausible return rejected");
TS2Expect(TS2Quality == 0., "volatility_expansion: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "volatility_expansion: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_expansion: quality restored");
}
// Case 18: volatility_contraction; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case18()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = (0.0002 + 0.000004 * I) * sin(0.81 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "volatility_contraction: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "volatility_contraction: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "volatility_contraction: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "volatility_contraction: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_contraction: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "volatility_contraction: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[131] = 2.;
TS2Expect(TS2Evaluate() == 0., "volatility_contraction: implausible return rejected");
TS2Expect(TS2Quality == 0., "volatility_contraction: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "volatility_contraction: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_contraction: quality restored");
}
// Case 19: isolated_recent_up; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case19()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 3, 0.008, 0.0002 * sin(0.61 * I));
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "isolated_recent_up: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "isolated_recent_up: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "isolated_recent_up: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "isolated_recent_up: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_up: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "isolated_recent_up: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[168] = 2.;
TS2Expect(TS2Evaluate() == 0., "isolated_recent_up: implausible return rejected");
TS2Expect(TS2Quality == 0., "isolated_recent_up: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "isolated_recent_up: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_up: quality restored");
}
// Case 20: isolated_recent_down; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case20()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 3, -0.008, 0.0002 * sin(0.61 * I));
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "isolated_recent_down: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "isolated_recent_down: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "isolated_recent_down: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "isolated_recent_down: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_down: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "isolated_recent_down: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[205] = 2.;
TS2Expect(TS2Evaluate() == 0., "isolated_recent_down: implausible return rejected");
TS2Expect(TS2Quality == 0., "isolated_recent_down: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "isolated_recent_down: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_down: quality restored");
}
// Case 21: paired_opposite_shocks; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case21()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 7, 0.006, ifelse(I == 11, -0.006, 0.0001 * cos(I)));
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "paired_opposite_shocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "paired_opposite_shocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "paired_opposite_shocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "paired_opposite_shocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_opposite_shocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "paired_opposite_shocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[242] = 2.;
TS2Expect(TS2Evaluate() == 0., "paired_opposite_shocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "paired_opposite_shocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "paired_opposite_shocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_opposite_shocks: quality restored");
}
// Case 22: paired_same_shocks; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case22()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 7 || I == 11, 0.006, 0.0001 * cos(I));
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "paired_same_shocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "paired_same_shocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "paired_same_shocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "paired_same_shocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_same_shocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "paired_same_shocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[23] = 2.;
TS2Expect(TS2Evaluate() == 0., "paired_same_shocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "paired_same_shocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "paired_same_shocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_same_shocks: quality restored");
}
|
|
|
Optimal Transport Distribution Shift (cont.)
[Re: TipmyPip]
#489751
54 minutes ago
54 minutes ago
|
Joined: Sep 2017
Posts: 372
TipmyPip
OP
Senior Member
|
OP
Senior Member
Joined: Sep 2017
Posts: 372
|
// Case 23: old_shock; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case23()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 211, 0.012, 0.0003 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "old_shock: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "old_shock: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "old_shock: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "old_shock: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_shock: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "old_shock: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[60] = 2.;
TS2Expect(TS2Evaluate() == 0., "old_shock: implausible return rejected");
TS2Expect(TS2Quality == 0., "old_shock: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "old_shock: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_shock: quality restored");
}
// Case 24: sparse_up_events; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case24()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 17 == 0, 0.003, -0.0001);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sparse_up_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sparse_up_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sparse_up_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sparse_up_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_up_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sparse_up_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[97] = 2.;
TS2Expect(TS2Evaluate() == 0., "sparse_up_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "sparse_up_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sparse_up_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_up_events: quality restored");
}
// Case 25: sparse_down_events; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case25()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 17 == 0, -0.003, 0.0001);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sparse_down_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sparse_down_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sparse_down_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sparse_down_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_down_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sparse_down_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[134] = 2.;
TS2Expect(TS2Evaluate() == 0., "sparse_down_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "sparse_down_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sparse_down_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_down_events: quality restored");
}
// Case 26: clustered_up_events; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case26()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 29 < 4, 0.002, -0.00015);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "clustered_up_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "clustered_up_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "clustered_up_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "clustered_up_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_up_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "clustered_up_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[171] = 2.;
TS2Expect(TS2Evaluate() == 0., "clustered_up_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "clustered_up_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "clustered_up_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_up_events: quality restored");
}
// Case 27: clustered_down_events; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case27()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 29 < 4, -0.002, 0.00015);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "clustered_down_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "clustered_down_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "clustered_down_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "clustered_down_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_down_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "clustered_down_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[208] = 2.;
TS2Expect(TS2Evaluate() == 0., "clustered_down_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "clustered_down_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "clustered_down_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_down_events: quality restored");
}
// Case 28: capped_sawtooth; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case28()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.00012 * ((I % 19) - 9);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "capped_sawtooth: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "capped_sawtooth: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "capped_sawtooth: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "capped_sawtooth: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "capped_sawtooth: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "capped_sawtooth: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[245] = 2.;
TS2Expect(TS2Evaluate() == 0., "capped_sawtooth: implausible return rejected");
TS2Expect(TS2Quality == 0., "capped_sawtooth: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "capped_sawtooth: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "capped_sawtooth: quality restored");
}
// Case 29: triangular_wave; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case29()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.00015 * (abs((I % 24) - 12) - 6);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "triangular_wave: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "triangular_wave: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "triangular_wave: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "triangular_wave: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "triangular_wave: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "triangular_wave: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[26] = 2.;
TS2Expect(TS2Evaluate() == 0., "triangular_wave: implausible return rejected");
TS2Expect(TS2Quality == 0., "triangular_wave: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "triangular_wave: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "triangular_wave: quality restored");
}
// Case 30: convex_drift; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case30()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0001 + 0.001 * pow(I / 256., 2.);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "convex_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "convex_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "convex_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "convex_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "convex_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "convex_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[63] = 2.;
TS2Expect(TS2Evaluate() == 0., "convex_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "convex_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "convex_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "convex_drift: quality restored");
}
// Case 31: concave_drift; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case31()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0011 - 0.001 * pow(I / 256., 2.);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "concave_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "concave_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "concave_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "concave_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "concave_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "concave_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[100] = 2.;
TS2Expect(TS2Evaluate() == 0., "concave_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "concave_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "concave_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "concave_drift: quality restored");
}
// Case 32: sigmoid_transition; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case32()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * (2. / (1. + exp((I - 90.) / 12.)) - 1.);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sigmoid_transition: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sigmoid_transition: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sigmoid_transition: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sigmoid_transition: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sigmoid_transition: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sigmoid_transition: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[137] = 2.;
TS2Expect(TS2Evaluate() == 0., "sigmoid_transition: implausible return rejected");
TS2Expect(TS2Quality == 0., "sigmoid_transition: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sigmoid_transition: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sigmoid_transition: quality restored");
}
// Case 33: damped_oscillation; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case33()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.002 * exp(-0.012 * I) * cos(0.37 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "damped_oscillation: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "damped_oscillation: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "damped_oscillation: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "damped_oscillation: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "damped_oscillation: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "damped_oscillation: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[174] = 2.;
TS2Expect(TS2Evaluate() == 0., "damped_oscillation: implausible return rejected");
TS2Expect(TS2Quality == 0., "damped_oscillation: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "damped_oscillation: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "damped_oscillation: quality restored");
}
// Case 34: growing_oscillation; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case34()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0001 * exp(0.008 * I) * cos(0.37 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "growing_oscillation: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "growing_oscillation: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "growing_oscillation: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "growing_oscillation: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "growing_oscillation: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "growing_oscillation: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[211] = 2.;
TS2Expect(TS2Evaluate() == 0., "growing_oscillation: implausible return rejected");
TS2Expect(TS2Quality == 0., "growing_oscillation: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "growing_oscillation: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "growing_oscillation: quality restored");
}
// Case 35: phase_discontinuity; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case35()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(0.3 * I + ifelse(I < 40, 1.5, 0.));
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "phase_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "phase_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "phase_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "phase_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "phase_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "phase_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[248] = 2.;
TS2Expect(TS2Evaluate() == 0., "phase_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "phase_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "phase_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "phase_discontinuity: quality restored");
}
// Case 36: frequency_discontinuity; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case36()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(ifelse(I < 80, 0.17, 0.63) * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "frequency_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "frequency_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "frequency_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "frequency_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "frequency_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "frequency_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[29] = 2.;
TS2Expect(TS2Evaluate() == 0., "frequency_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "frequency_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "frequency_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "frequency_discontinuity: quality restored");
}
// Case 37: amplitude_discontinuity; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case37()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 80, 0.002, 0.0003) * sin(0.4 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "amplitude_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "amplitude_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "amplitude_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "amplitude_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "amplitude_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[66] = 2.;
TS2Expect(TS2Evaluate() == 0., "amplitude_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "amplitude_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "amplitude_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_discontinuity: quality restored");
}
// Case 38: smooth_pulse; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case38()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.003 * exp(-pow((I - 32.) / 12., 2.)) - 0.0003;
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "smooth_pulse: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "smooth_pulse: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "smooth_pulse: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "smooth_pulse: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "smooth_pulse: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "smooth_pulse: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[103] = 2.;
TS2Expect(TS2Evaluate() == 0., "smooth_pulse: implausible return rejected");
TS2Expect(TS2Quality == 0., "smooth_pulse: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "smooth_pulse: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "smooth_pulse: quality restored");
}
// Case 39: double_pulse; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case39()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.002 * exp(-pow((I - 16.) / 6., 2.)) - 0.002 * exp(-pow((I - 60.) / 9., 2.));
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "double_pulse: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "double_pulse: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "double_pulse: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "double_pulse: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "double_pulse: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "double_pulse: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[140] = 2.;
TS2Expect(TS2Evaluate() == 0., "double_pulse: implausible return rejected");
TS2Expect(TS2Quality == 0., "double_pulse: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "double_pulse: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "double_pulse: quality restored");
}
// Case 40: cross_scale_conflict; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case40()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0008 * cos(0.04 * I) - 0.001 * cos(0.6 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "cross_scale_conflict: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "cross_scale_conflict: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "cross_scale_conflict: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "cross_scale_conflict: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "cross_scale_conflict: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "cross_scale_conflict: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[177] = 2.;
TS2Expect(TS2Evaluate() == 0., "cross_scale_conflict: implausible return rejected");
TS2Expect(TS2Quality == 0., "cross_scale_conflict: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "cross_scale_conflict: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "cross_scale_conflict: quality restored");
}
// Case 41: near_flat_noise; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case41()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0000002 * sin(0.73 * I) + 0.0000001 * cos(0.29 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "near_flat_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "near_flat_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "near_flat_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "near_flat_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "near_flat_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "near_flat_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[214] = 2.;
TS2Expect(TS2Evaluate() == 0., "near_flat_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "near_flat_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "near_flat_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "near_flat_noise: quality restored");
}
// Case 42: large_return_units; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case42()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.03 * sin(0.13 * I) + 0.01 * cos(0.7 * I);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "large_return_units: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "large_return_units: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "large_return_units: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "large_return_units: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "large_return_units: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "large_return_units: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[251] = 2.;
TS2Expect(TS2Evaluate() == 0., "large_return_units: implausible return rejected");
TS2Expect(TS2Quality == 0., "large_return_units: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "large_return_units: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "large_return_units: quality restored");
}
// Case 43: deterministic_roughness; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case43()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(12.9898 * I + 78.233 * sin(4.1414 * I));
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "deterministic_roughness: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "deterministic_roughness: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "deterministic_roughness: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "deterministic_roughness: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "deterministic_roughness: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "deterministic_roughness: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[32] = 2.;
TS2Expect(TS2Evaluate() == 0., "deterministic_roughness: implausible return rejected");
TS2Expect(TS2Quality == 0., "deterministic_roughness: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "deterministic_roughness: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "deterministic_roughness: quality restored");
}
// Case 44: weeklike_gaps; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case44()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 120 < 8, 0., 0.001 * cos(0.33 * I));
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "weeklike_gaps: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "weeklike_gaps: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "weeklike_gaps: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "weeklike_gaps: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "weeklike_gaps: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "weeklike_gaps: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[69] = 2.;
TS2Expect(TS2Evaluate() == 0., "weeklike_gaps: implausible return rejected");
TS2Expect(TS2Quality == 0., "weeklike_gaps: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "weeklike_gaps: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "weeklike_gaps: quality restored");
}
// Case 45: quiet_recent_window; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case45()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 24, 0., 0.001 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "quiet_recent_window: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "quiet_recent_window: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "quiet_recent_window: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "quiet_recent_window: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_recent_window: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "quiet_recent_window: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[106] = 2.;
TS2Expect(TS2Evaluate() == 0., "quiet_recent_window: implausible return rejected");
TS2Expect(TS2Quality == 0., "quiet_recent_window: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "quiet_recent_window: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_recent_window: quality restored");
}
// Case 46: quiet_old_window; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case46()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I > 180, 0., 0.001 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "quiet_old_window: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "quiet_old_window: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "quiet_old_window: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "quiet_old_window: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_old_window: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "quiet_old_window: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[143] = 2.;
TS2Expect(TS2Evaluate() == 0., "quiet_old_window: implausible return rejected");
TS2Expect(TS2Quality == 0., "quiet_old_window: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "quiet_old_window: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_old_window: quality restored");
}
// Case 47: unequal_tail_mass; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case47()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 13 == 0, -0.004, 0.00035 + 0.0001 * sin(I));
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "unequal_tail_mass: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "unequal_tail_mass: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "unequal_tail_mass: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "unequal_tail_mass: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "unequal_tail_mass: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "unequal_tail_mass: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[180] = 2.;
TS2Expect(TS2Evaluate() == 0., "unequal_tail_mass: implausible return rejected");
TS2Expect(TS2Quality == 0., "unequal_tail_mass: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "unequal_tail_mass: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "unequal_tail_mass: quality restored");
}
// Case 48: bounded_chaotic_phase; model 14 perturbation phase 1.918000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case48()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(I * I * 0.61803398875);
TS2Returns[I] += 0.00000003 * sin(1.918000 + I * 0.372000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "bounded_chaotic_phase: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "bounded_chaotic_phase: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "bounded_chaotic_phase: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "bounded_chaotic_phase: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "bounded_chaotic_phase: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "bounded_chaotic_phase: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[217] = 2.;
TS2Expect(TS2Evaluate() == 0., "bounded_chaotic_phase: implausible return rejected");
TS2Expect(TS2Quality == 0., "bounded_chaotic_phase: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "bounded_chaotic_phase: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "bounded_chaotic_phase: quality restored");
}
void TS2SelfTest()
{
int I;
TS2Checks = 0;
TS2Failures = 0;
file_write(TS2TestLog, "Synthetic property suite\n", 0);
for (I = 0; I < 256; I++)
TS2Returns[I] = 0.;
TS2Expect(TS2Evaluate() == 0., "flat path has no edge");
TS2Expect(TS2Quality == 0., "flat path clears quality");
TS2KnownResponse();
TS2KnownTranslation();
TS2Case1();
TS2Case2();
TS2Case3();
TS2Case4();
TS2Case5();
TS2Case6();
TS2Case7();
TS2Case8();
TS2Case9();
TS2Case10();
TS2Case11();
TS2Case12();
TS2Case13();
TS2Case14();
TS2Case15();
TS2Case16();
TS2Case17();
TS2Case18();
TS2Case19();
TS2Case20();
TS2Case21();
TS2Case22();
TS2Case23();
TS2Case24();
TS2Case25();
TS2Case26();
TS2Case27();
TS2Case28();
TS2Case29();
TS2Case30();
TS2Case31();
TS2Case32();
TS2Case33();
TS2Case34();
TS2Case35();
TS2Case36();
TS2Case37();
TS2Case38();
TS2Case39();
TS2Case40();
TS2Case41();
TS2Case42();
TS2Case43();
TS2Case44();
TS2Case45();
TS2Case46();
TS2Case47();
TS2Case48();
TSRepairTests();
file_append(TS2TestLog, strf("RESULT: %d checks; %d failures\n", TS2Checks, TS2Failures));
}
// Embedded execution and risk controls; no custom runtime include is required.
function run()
{
int Index;
var Current, Previous, Edge, Sigma, OrderLots, UnitRisk, Budget;
BarPeriod = 60;
LookBack = 260;
StartDate = 20240101;
EndDate = 20241231;
Capital = 10000.;
Hedge = 0;
MaxLong = 1;
MaxShort = 1;
#ifdef TS2_SELFTEST
if (is(INITRUN))
{
TS2SelfTest();
quit("TS2 synthetic tests complete; no historical or live orders");
}
return;
#endif
if (!asset("EUR/USD"))
return;
algo(TS2Algo);
if (is(EXITRUN) || is(LOOKBACK))
return;
for (Index = 0; Index < TS2_N; Index++)
{
Current = priceClose(Index + 1);
Previous = priceClose(Index + 2);
if (!TSIsFinite(Current) || !TSIsFinite(Previous) || !(Current > 0.) || !(Previous > 0.))
{
exitLong();
exitShort();
return;
}
TS2Returns[Index] = log(Current / Previous);
}
Edge = TS2Evaluate();
plot("model edge", Edge, NEW, BLUE);
plot("model quality", TS2Quality, 0, RED);
if (Edge < 0.10 || TS2Quality < 0.15)
exitLong();
if (Edge > -0.10 || TS2Quality < 0.15)
exitShort();
if (abs(Edge) < 0.25 || TS2Quality < 0.30)
return;
if (NumOpenLong + NumOpenShort > 0)
return;
if (PIP <= 0. || PIPCost <= 0. || LotAmount <= 0. || MarginCost <= 0.)
return;
if (Balance <= 0. || Equity < 0.85 * Balance)
return;
Sigma = 0.;
for (Index = 0; Index < 48; Index++)
Sigma += TS2Returns[Index] * TS2Returns[Index] / 48.;
Sigma = sqrt(Sigma) * priceClose(1);
Stop = max(20. * PIP, 3. * Sigma);
TakeProfit = 2. * Stop;
LifeTime = TS2Holding;
UnitRisk = TSUnitStopRisk(priceClose(0));
if (UnitRisk <= 0.)
return;
Budget = 0.0025 * min(Balance, Equity);
OrderLots = min(Budget / UnitRisk, 2000. / LotAmount);
OrderLots = min(OrderLots, max(0., Equity - MarginVal) * 0.5 / MarginCost);
if (OrderLots < 1.)
return;
Lots = floor(OrderLots);
Risk = 0.;
Margin = 0.;
if (Edge > 0.)
enterLong();
else
enterShort();
}
|
|
|
Dual Visibility Graph Topology
[Re: TipmyPip]
#489752
53 minutes ago
53 minutes ago
|
Joined: Sep 2017
Posts: 372
TipmyPip
OP
Senior Member
|
OP
Senior Member
Joined: Sep 2017
Posts: 372
|
This strategy converts the recent cumulative return path into two different visibility graphs and studies their boundary topology across nested windows. It is neither a covariance model nor a frequency decomposition. The market hypothesis is geometric: the newest section of a path can have different exposure to earlier observations above and below the path, and persistent directional exposure across scales may indicate continuation. Graph connectivity, rather than a conventional indicator threshold, is the primary analytical representation. The model builds a chronological cumulative path from recent completed returns and inspects suffix windows of lengths 24, 48, and 96. Every observation is a vertex. For two vertices a and b, it constructs the straight chord joining their path values. In the upper visibility graph an edge exists only when every intermediate path point lies strictly below that chord. In the lower graph every intermediate point must lie strictly above it. Adjacent vertices are visible in both graphs because there are no intervening points. Strict inequalities use a small tolerance proportional to return RMS so numerical ties do not create unstable long-range edges. For each graph, the implementation counts the degree of every vertex. It then compares the mean degree of the newest four vertices with the mean degree of the remaining vertices. The local boundary contrast is boundary = (recent_upper - recent_lower)/(recent_upper + recent_lower). The bulk contrast is defined in the same way for older vertices, with denominators floored for numerical safety. Their difference is contrast = boundary - bulk. Contrasts from the three window lengths receive weights 1, 1/2, and 1/3, followed by normalization by the sum of those weights. The resulting signed graph score is not enough by itself. The average of the most recent twelve returns must point in the same direction. Quality is based on the magnitude of the multiscale connectivity contrasts, and the edge clips twice the weighted graph score to the interval from minus one to one. The shared execution thresholds can reject weak graph evidence. An eligible position has a maximum holding duration of ten hourly bars, but loss of positive exposure or low quality can trigger an earlier exit. Natural visibility is sensitive to sampling frequency, path ties, and extreme observations. A geometric boundary feature can be descriptive without predicting future prices. The nested graphs are strongly dependent because they share vertices, so cross-window agreement is not three independent confirmations. Computational cost is also higher than a simple moving average because every candidate edge may inspect multiple intermediate vertices. The synthetic suite includes smooth curves, abrupt reversals, nearly flat sequences, and clustered events to expose numerical instability. It provides no proof that topological exposure survives realistic transaction costs. Compared with the previous ten models, the distinguishing object is dual line-of-sight connectivity rather than a latent factor, equilibrium level, jump statistic, or forecast variance curve.
// TS15_VisibilityTopology: Dual visibility graph topology.
// Standalone model implementation with embedded safety and engine code.
// Market scope: EUR/USD completed-hour return aggregation horizons.
// These are not actual bond maturities or a futures calendar spread.
// Model diagnostic: boundary-versus-bulk visibility asymmetry.
// Quality heuristic: Absolute connectivity contrast across nested windows.
// Limitation: Strict line-of-sight rules are sensitive near ties. A scale-relative tolerance suppresses roundoff edges.
// No claim of profitability, calibration, or independent strategy returns.
// Inputs: 256 newest-first log returns; all must be finite and within [-1,1].
// Output: bounded signed edge; positive buys, negative sells, zero abstains.
// Quality is a heuristic filter, never a calibrated success probability.
// The synthetic suite below is included in the total file line count.
// Regenerate with build_sources.py; compare hashes before deployment.
#include <default.c>
string TS2Algo = "TS15";
string TS2TestLog = "Log/TS15_VisibilityTopology_test.txt";
int TS2Holding = 10;
// R1/R3: IEEE-754 finite validation without lite-C unordered comparisons.
// Supported Zorro Windows targets use 64-bit var and little-endian 32-bit int.
int TSIsFinite(var Value)
{
int Words[2];
memcpy(Words, &Value, sizeof(Value));
return (Words[1] & 0x7ff00000) != 0x7ff00000;
}
// Forex commission per lot; negative quotes are percent, not cash rebates.
// Return -1 on invalid metadata rather than accepting an unknown risk amount.
var TSFeePerLot(var FeeQuote, var UnitsPerLot, var PipSize, var PipValue, var RefPrice)
{
var FeeValue;
if (!TSIsFinite(FeeQuote) || !TSIsFinite(UnitsPerLot) || !TSIsFinite(PipSize) ||
!TSIsFinite(PipValue) || !TSIsFinite(RefPrice))
return -1.;
if (!(UnitsPerLot > 0.) || !(PipSize > 0.) || !(PipValue > 0.) || !(RefPrice > 0.))
return -1.;
if (FeeQuote >= 0.)
FeeValue = FeeQuote * UnitsPerLot / 10000.;
else
FeeValue = (-FeeQuote / 100.) * (PipValue / PipSize) * RefPrice;
if (!TSIsFinite(FeeValue) || FeeValue < 0.)
return -1.;
return FeeValue;
}
var TSUnitStopRisk(var RefPrice)
{
var FeeValue, FeePrice, StopRisk;
if (!TSIsFinite(RefPrice) || !(RefPrice > 0.) || !TSIsFinite(Stop) || !(Stop > 0.) ||
!TSIsFinite(Spread) || !TSIsFinite(Balance) || !TSIsFinite(Equity) ||
!TSIsFinite(MarginCost) || !TSIsFinite(MarginVal))
return -1.;
if (!(Balance > 0.) || !(Equity > 0.) || !(MarginCost > 0.))
return -1.;
// Conservative percentage-fee price through the stop, absent gaps/slippage.
FeePrice = RefPrice + abs(Spread) + Stop;
FeeValue = TSFeePerLot(Commission, LotAmount, PIP, PIPCost, FeePrice);
if (FeeValue < 0.)
return -1.;
StopRisk = (Stop + abs(Spread)) / PIP * PIPCost + FeeValue;
if (!TSIsFinite(StopRisk) || !(StopRisk > 0.))
return -1.;
return StopRisk;
}
// Embedded input, state, and test contracts; identical safety is not novel alpha.
#define TS2_N 256
var TS2Returns[256];
var TS2Quality;
var TS2Statistic;
var TS2Raw;
int TS2Checks;
int TS2Failures;
var TS2Model();
var TS2Bound(var Value)
{
if (!TSIsFinite(Value))
return 0.;
return max(-1., min(1., Value));
}
var TS2Evaluate()
{
int Index;
var Energy;
TS2Quality = 0.;
TS2Statistic = 0.;
TS2Raw = 0.;
Energy = 0.;
for (Index = 0; Index < TS2_N; Index++)
{
if (!TSIsFinite(TS2Returns[Index]))
return 0.;
if (abs(TS2Returns[Index]) > 1.)
return 0.;
Energy += TS2Returns[Index] * TS2Returns[Index];
}
if (Energy < 1.e-24)
return 0.;
TS2Raw = TS2Model();
if (!TSIsFinite(TS2Raw) || abs(TS2Raw) > 1.e12 ||
!TSIsFinite(TS2Quality) || !TSIsFinite(TS2Statistic))
{
TS2Quality = 0.;
TS2Statistic = 0.;
TS2Raw = 0.;
return 0.;
}
TS2Quality = max(0., min(1., TS2Quality));
return TS2Bound(TS2Raw);
}
void TS2Expect(int Passed, string Label)
{
TS2Checks++;
if (!Passed)
{
TS2Failures++;
file_append(TS2TestLog, strf("FAIL: %s\n", Label));
}
}
// BEGIN ANALYTICAL MODEL
// Upper and lower natural-visibility graphs are rebuilt on nested time windows.
// The asymmetry of boundary connectivity measures price-path exposure.
var TS2Model()
{
var Path[96], UpperDegree[96], LowerDegree[96];
var Total, Positive, Negative, Chord, Height, Tolerance;
var RecentUpper, RecentLower, HistoricalUpper, HistoricalLower;
var Boundary, Bulk, Score, WeightSum, Agreement, Drift, RMS;
int Lengths[3] = {24, 48, 96};
int Window, Size, Left, Right, Between, VisibleUp, VisibleDown, Index;
Path[0] = 0.;
for (Index = 1; Index < 96; Index++)
Path[Index] = Path[Index - 1] + TS2Returns[95 - Index];
RMS = 0.;
for (Index = 0; Index < 96; Index++)
RMS += TS2Returns[Index] * TS2Returns[Index] / 96.;
Tolerance = sqrt(RMS) * 1.e-9;
Score = 0.; WeightSum = 0.; Agreement = 0.;
for (Window = 0; Window < 3; Window++)
{
Size = Lengths[Window];
for (Index = 0; Index < Size; Index++)
{
UpperDegree[Index] = 0.;
LowerDegree[Index] = 0.;
}
for (Left = 96 - Size; Left < 95; Left++)
{
for (Right = Left + 1; Right < 96; Right++)
{
VisibleUp = 1;
VisibleDown = 1;
for (Between = Left + 1; Between < Right; Between++)
{
Chord = Path[Left] + (Path[Right] - Path[Left]) * (Between - Left) / (Right - Left);
Height = Path[Between] - Chord;
if (Height >= -Tolerance)
VisibleUp = 0;
if (Height <= Tolerance)
VisibleDown = 0;
if (!VisibleUp && !VisibleDown)
break;
}
if (VisibleUp)
{
UpperDegree[Left - 96 + Size]++;
UpperDegree[Right - 96 + Size]++;
}
if (VisibleDown)
{
LowerDegree[Left - 96 + Size]++;
LowerDegree[Right - 96 + Size]++;
}
}
}
RecentUpper = 0.; RecentLower = 0.;
HistoricalUpper = 0.; HistoricalLower = 0.;
for (Index = 0; Index < Size; Index++)
{
if (Index >= Size - 4)
{
RecentUpper += UpperDegree[Index] / 4.;
RecentLower += LowerDegree[Index] / 4.;
}
else
{
HistoricalUpper += UpperDegree[Index] / (Size - 4.);
HistoricalLower += LowerDegree[Index] / (Size - 4.);
}
}
Boundary = (RecentUpper - RecentLower) / max(1., RecentUpper + RecentLower);
Bulk = (HistoricalUpper - HistoricalLower) / max(1., HistoricalUpper + HistoricalLower);
Total = Boundary - Bulk;
Score += Total / (Window + 1.);
WeightSum += 1. / (Window + 1.);
Agreement += abs(Total) / 3.;
}
Drift = 0.;
for (Index = 0; Index < 12; Index++)
Drift += TS2Returns[Index] / 12.;
Score /= WeightSum;
TS2Statistic = Score;
TS2Quality = min(1., Agreement * 2.);
// Boundary exposure is used only when the recent signed path confirms it.
if (Drift * Score <= 0.)
return 0.;
return TS2Bound(Score * 2.);
}
// END ANALYTICAL MODEL
// Separate repair regression log; the original suite counts stay intact.
int TSRepairChecks = 0;
int TSRepairFailures = 0;
string TSRepairLog = "Log/TS15_VisibilityTopology_repair.txt";
void TSRepairCheck(int Passed, string Label)
{
TSRepairChecks++;
if (!Passed)
{
TSRepairFailures++;
file_append(TSRepairLog, strf("FAIL: %s\n", Label));
}
}
var TSRepairBad(int Kind)
{
int Bits[2];
var Value;
Bits[0] = 0;
Bits[1] = 0x7ff80000;
if (Kind == 1) Bits[1] = 0x7ff00000;
if (Kind == 2) Bits[1] = 0xfff00000;
memcpy(&Value, Bits, sizeof(Value));
return Value;
}
void TSRepairTests()
{
int I, Kind, Position;
var FeeValue, UnitLoss, Budget;
TSRepairChecks = 0; TSRepairFailures = 0;
file_write(TSRepairLog, "Repairs R1-R5: native-safe regression suite\n", 0);
TSRepairCheck(sizeof(FeeValue) == 8, "64-bit var representation");
TSRepairCheck(TSIsFinite(0.), "finite zero");
TSRepairCheck(TSIsFinite(1.), "finite positive");
TSRepairCheck(TSIsFinite(-1.), "finite negative");
for (Kind = 0; Kind < 3; Kind++)
TSRepairCheck(!TSIsFinite(TSRepairBad(Kind)), "reject NaN and both infinities");
TSRepairCheck(abs(TSFeePerLot(0.7, 1000., 0.0001, 0.1, 1.1) - 0.07) < 1.e-6,
"cash commission convention");
TSRepairCheck(TSFeePerLot(0., 1000., 0.0001, 0.1, 1.1) == 0., "zero commission");
FeeValue = TSFeePerLot(-0.02, 1000., 0.0001, 0.1, 1.1);
TSRepairCheck(abs(FeeValue - 0.22) < 1.e-6, "percentage commission convention");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0., 0.1, 1.1) < 0., "invalid pip size");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0.0001, 0., 1.1) < 0., "invalid pip value");
TSRepairCheck(TSFeePerLot(0.7, 0., 0.0001, 0.1, 1.1) < 0., "invalid lot amount");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0.0001, 0.1, -1.) < 0., "invalid fee price");
TSRepairCheck(TSFeePerLot(TSRepairBad(0), 1000., 0.0001, 0.1, 1.1) < 0., "NaN fee quote");
TSRepairCheck(TSFeePerLot(-0.02, 1000., 0.0001, 0.1, TSRepairBad(1)) < 0., "infinite fee price");
TSRepairCheck(TSFeePerLot(-0.02, 1000., TSRepairBad(0), 0.1, 1.1) < 0., "NaN pip metadata");
UnitLoss = (20. * 0.0001 + 0.0001) / 0.0001 * 0.1 + FeeValue;
Budget = 850. * 0.0025;
TSRepairCheck(floor(Budget / UnitLoss) == 0., "percentage fee respects lot-rounding budget");
for (Kind = 0; Kind < 3; Kind++)
{
for (Position = 0; Position < 2; Position++)
{
for (I = 0; I < 256; I++) TS2Returns[I] = 0.0005 + 0.0001 * sin(0.3 * I);
TS2Returns[Position] = TSRepairBad(Kind);
TSRepairCheck(TS2Evaluate() == 0, "non-finite consumed input rejected");
TSRepairCheck(TS2Quality == 0., "invalid return clears quality");
}
}
file_append(TSRepairLog, strf("RESULT: %d checks; %d failures\n", TSRepairChecks, TSRepairFailures));
}
// Synthetic property tests: executed only with -d TS2_SELFTEST.
// Tests do not execute trades, query market data, or establish profitability.
// Known-response anchor: not just a generic bounded-output assertion.
void TS2KnownResponse()
{
int I;
var Edge, Negative;
for (I = 0; I < 256; I++)
TS2Returns[I] = 0.0005;
Edge = TS2Evaluate();
TS2Expect(Edge == 0., "known straight path: model-specific response");
for (I = 0; I < 256; I++)
TS2Returns[I] = -0.0005;
Negative = TS2Evaluate();
TS2Expect(abs(Edge + Negative) < 1.e-7, "known straight path: symmetric response");
}
// Case 1: slow_sine; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case1()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0008 * sin(0.07 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "slow_sine: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "slow_sine: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "slow_sine: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "slow_sine: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "slow_sine: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "slow_sine: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[15] = 2.;
TS2Expect(TS2Evaluate() == 0., "slow_sine: implausible return rejected");
TS2Expect(TS2Quality == 0., "slow_sine: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "slow_sine: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "slow_sine: quality restored");
}
// Case 2: fast_sine; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case2()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0012 * sin(1.1 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "fast_sine: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "fast_sine: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "fast_sine: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "fast_sine: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "fast_sine: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "fast_sine: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[52] = 2.;
TS2Expect(TS2Evaluate() == 0., "fast_sine: implausible return rejected");
TS2Expect(TS2Quality == 0., "fast_sine: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "fast_sine: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "fast_sine: quality restored");
}
// Case 3: two_scale_beating; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case3()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0009 * sin(0.18 * I) + 0.0007 * sin(0.21 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "two_scale_beating: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "two_scale_beating: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "two_scale_beating: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "two_scale_beating: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "two_scale_beating: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "two_scale_beating: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[89] = 2.;
TS2Expect(TS2Evaluate() == 0., "two_scale_beating: implausible return rejected");
TS2Expect(TS2Quality == 0., "two_scale_beating: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "two_scale_beating: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "two_scale_beating: quality restored");
}
// Case 4: amplitude_burst; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case4()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0004 * sin(0.31 * I) * (1. + 3. * exp(-pow((I - 28.) / 8., 2.)));
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "amplitude_burst: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "amplitude_burst: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "amplitude_burst: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "amplitude_burst: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_burst: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "amplitude_burst: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[126] = 2.;
TS2Expect(TS2Evaluate() == 0., "amplitude_burst: implausible return rejected");
TS2Expect(TS2Quality == 0., "amplitude_burst: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "amplitude_burst: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_burst: quality restored");
}
// Case 5: chirp_acceleration; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case5()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(0.0018 * I * I + 0.05 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "chirp_acceleration: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "chirp_acceleration: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "chirp_acceleration: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "chirp_acceleration: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_acceleration: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "chirp_acceleration: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[163] = 2.;
TS2Expect(TS2Evaluate() == 0., "chirp_acceleration: implausible return rejected");
TS2Expect(TS2Quality == 0., "chirp_acceleration: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "chirp_acceleration: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_acceleration: quality restored");
}
// Case 6: chirp_deceleration; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case6()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(7. * sqrt(I + 1.));
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "chirp_deceleration: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "chirp_deceleration: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "chirp_deceleration: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "chirp_deceleration: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_deceleration: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "chirp_deceleration: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[200] = 2.;
TS2Expect(TS2Evaluate() == 0., "chirp_deceleration: implausible return rejected");
TS2Expect(TS2Quality == 0., "chirp_deceleration: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "chirp_deceleration: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_deceleration: quality restored");
}
// Case 7: positive_drift_noise; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case7()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0003 + 0.0009 * sin(0.77 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "positive_drift_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "positive_drift_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "positive_drift_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "positive_drift_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "positive_drift_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "positive_drift_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[237] = 2.;
TS2Expect(TS2Evaluate() == 0., "positive_drift_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "positive_drift_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "positive_drift_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "positive_drift_noise: quality restored");
}
// Case 8: negative_drift_noise; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case8()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = -0.0003 + 0.0009 * sin(0.77 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "negative_drift_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "negative_drift_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "negative_drift_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "negative_drift_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "negative_drift_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "negative_drift_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[18] = 2.;
TS2Expect(TS2Evaluate() == 0., "negative_drift_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "negative_drift_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "negative_drift_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "negative_drift_noise: quality restored");
}
// Case 9: mixed_frequency_drift; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case9()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0002 + 0.0006 * sin(0.23 * I) + 0.0004 * cos(1.37 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "mixed_frequency_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "mixed_frequency_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "mixed_frequency_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "mixed_frequency_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "mixed_frequency_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "mixed_frequency_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[55] = 2.;
TS2Expect(TS2Evaluate() == 0., "mixed_frequency_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "mixed_frequency_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "mixed_frequency_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "mixed_frequency_drift: quality restored");
}
// Case 10: alternating_sign; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case10()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 2 == 0, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "alternating_sign: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "alternating_sign: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "alternating_sign: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "alternating_sign: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "alternating_sign: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "alternating_sign: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[92] = 2.;
TS2Expect(TS2Evaluate() == 0., "alternating_sign: implausible return rejected");
TS2Expect(TS2Quality == 0., "alternating_sign: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "alternating_sign: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "alternating_sign: quality restored");
}
// Case 11: three_bar_blocks; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case11()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 6 < 3, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "three_bar_blocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "three_bar_blocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "three_bar_blocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "three_bar_blocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "three_bar_blocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "three_bar_blocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[129] = 2.;
TS2Expect(TS2Evaluate() == 0., "three_bar_blocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "three_bar_blocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "three_bar_blocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "three_bar_blocks: quality restored");
}
// Case 12: five_bar_blocks; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case12()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 10 < 5, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "five_bar_blocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "five_bar_blocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "five_bar_blocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "five_bar_blocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "five_bar_blocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "five_bar_blocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[166] = 2.;
TS2Expect(TS2Evaluate() == 0., "five_bar_blocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "five_bar_blocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "five_bar_blocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "five_bar_blocks: quality restored");
}
// Case 13: one_sided_steps; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case13()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 24, 0.001, 0.0001) + 0.0001 * sin(I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "one_sided_steps: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "one_sided_steps: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "one_sided_steps: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "one_sided_steps: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "one_sided_steps: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "one_sided_steps: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[203] = 2.;
TS2Expect(TS2Evaluate() == 0., "one_sided_steps: implausible return rejected");
TS2Expect(TS2Quality == 0., "one_sided_steps: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "one_sided_steps: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "one_sided_steps: quality restored");
}
// Case 14: late_reversal; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case14()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 12, -0.0008, 0.0005) + 0.0002 * cos(0.7 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "late_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "late_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "late_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "late_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "late_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "late_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[240] = 2.;
TS2Expect(TS2Evaluate() == 0., "late_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "late_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "late_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "late_reversal: quality restored");
}
// Case 15: middle_reversal; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case15()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 64, 0.0006, -0.0004) + 0.0002 * sin(0.43 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "middle_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "middle_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "middle_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "middle_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "middle_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "middle_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[21] = 2.;
TS2Expect(TS2Evaluate() == 0., "middle_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "middle_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "middle_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "middle_reversal: quality restored");
}
// Case 16: old_reversal; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case16()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 160, 0.0004, -0.0007) + 0.0001 * cos(0.91 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "old_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "old_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "old_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "old_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "old_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[58] = 2.;
TS2Expect(TS2Evaluate() == 0., "old_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "old_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "old_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_reversal: quality restored");
}
// Case 17: volatility_expansion; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case17()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = (0.0002 + 0.001 * exp(-0.015 * I)) * sin(0.81 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "volatility_expansion: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "volatility_expansion: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "volatility_expansion: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "volatility_expansion: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_expansion: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "volatility_expansion: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[95] = 2.;
TS2Expect(TS2Evaluate() == 0., "volatility_expansion: implausible return rejected");
TS2Expect(TS2Quality == 0., "volatility_expansion: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "volatility_expansion: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_expansion: quality restored");
}
// Case 18: volatility_contraction; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case18()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = (0.0002 + 0.000004 * I) * sin(0.81 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "volatility_contraction: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "volatility_contraction: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "volatility_contraction: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "volatility_contraction: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_contraction: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "volatility_contraction: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[132] = 2.;
TS2Expect(TS2Evaluate() == 0., "volatility_contraction: implausible return rejected");
TS2Expect(TS2Quality == 0., "volatility_contraction: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "volatility_contraction: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_contraction: quality restored");
}
// Case 19: isolated_recent_up; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case19()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 3, 0.008, 0.0002 * sin(0.61 * I));
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "isolated_recent_up: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "isolated_recent_up: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "isolated_recent_up: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "isolated_recent_up: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_up: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "isolated_recent_up: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[169] = 2.;
TS2Expect(TS2Evaluate() == 0., "isolated_recent_up: implausible return rejected");
TS2Expect(TS2Quality == 0., "isolated_recent_up: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "isolated_recent_up: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_up: quality restored");
}
// Case 20: isolated_recent_down; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case20()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 3, -0.008, 0.0002 * sin(0.61 * I));
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "isolated_recent_down: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "isolated_recent_down: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "isolated_recent_down: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "isolated_recent_down: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_down: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "isolated_recent_down: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[206] = 2.;
TS2Expect(TS2Evaluate() == 0., "isolated_recent_down: implausible return rejected");
TS2Expect(TS2Quality == 0., "isolated_recent_down: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "isolated_recent_down: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_down: quality restored");
}
// Case 21: paired_opposite_shocks; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case21()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 7, 0.006, ifelse(I == 11, -0.006, 0.0001 * cos(I)));
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "paired_opposite_shocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "paired_opposite_shocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "paired_opposite_shocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "paired_opposite_shocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_opposite_shocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "paired_opposite_shocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[243] = 2.;
TS2Expect(TS2Evaluate() == 0., "paired_opposite_shocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "paired_opposite_shocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "paired_opposite_shocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_opposite_shocks: quality restored");
}
// Case 22: paired_same_shocks; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case22()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 7 || I == 11, 0.006, 0.0001 * cos(I));
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "paired_same_shocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "paired_same_shocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "paired_same_shocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "paired_same_shocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_same_shocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "paired_same_shocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[24] = 2.;
TS2Expect(TS2Evaluate() == 0., "paired_same_shocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "paired_same_shocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "paired_same_shocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_same_shocks: quality restored");
}
|
|
|
Dual Visibility Graph Topology (cont.)
[Re: TipmyPip]
#489753
53 minutes ago
53 minutes ago
|
Joined: Sep 2017
Posts: 372
TipmyPip
OP
Senior Member
|
OP
Senior Member
Joined: Sep 2017
Posts: 372
|
// Case 23: old_shock; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case23()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 211, 0.012, 0.0003 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "old_shock: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "old_shock: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "old_shock: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "old_shock: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_shock: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "old_shock: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[61] = 2.;
TS2Expect(TS2Evaluate() == 0., "old_shock: implausible return rejected");
TS2Expect(TS2Quality == 0., "old_shock: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "old_shock: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_shock: quality restored");
}
// Case 24: sparse_up_events; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case24()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 17 == 0, 0.003, -0.0001);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sparse_up_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sparse_up_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sparse_up_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sparse_up_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_up_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sparse_up_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[98] = 2.;
TS2Expect(TS2Evaluate() == 0., "sparse_up_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "sparse_up_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sparse_up_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_up_events: quality restored");
}
// Case 25: sparse_down_events; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case25()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 17 == 0, -0.003, 0.0001);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sparse_down_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sparse_down_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sparse_down_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sparse_down_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_down_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sparse_down_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[135] = 2.;
TS2Expect(TS2Evaluate() == 0., "sparse_down_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "sparse_down_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sparse_down_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_down_events: quality restored");
}
// Case 26: clustered_up_events; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case26()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 29 < 4, 0.002, -0.00015);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "clustered_up_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "clustered_up_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "clustered_up_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "clustered_up_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_up_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "clustered_up_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[172] = 2.;
TS2Expect(TS2Evaluate() == 0., "clustered_up_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "clustered_up_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "clustered_up_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_up_events: quality restored");
}
// Case 27: clustered_down_events; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case27()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 29 < 4, -0.002, 0.00015);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "clustered_down_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "clustered_down_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "clustered_down_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "clustered_down_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_down_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "clustered_down_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[209] = 2.;
TS2Expect(TS2Evaluate() == 0., "clustered_down_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "clustered_down_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "clustered_down_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_down_events: quality restored");
}
// Case 28: capped_sawtooth; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case28()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.00012 * ((I % 19) - 9);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "capped_sawtooth: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "capped_sawtooth: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "capped_sawtooth: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "capped_sawtooth: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "capped_sawtooth: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "capped_sawtooth: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[246] = 2.;
TS2Expect(TS2Evaluate() == 0., "capped_sawtooth: implausible return rejected");
TS2Expect(TS2Quality == 0., "capped_sawtooth: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "capped_sawtooth: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "capped_sawtooth: quality restored");
}
// Case 29: triangular_wave; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case29()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.00015 * (abs((I % 24) - 12) - 6);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "triangular_wave: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "triangular_wave: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "triangular_wave: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "triangular_wave: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "triangular_wave: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "triangular_wave: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[27] = 2.;
TS2Expect(TS2Evaluate() == 0., "triangular_wave: implausible return rejected");
TS2Expect(TS2Quality == 0., "triangular_wave: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "triangular_wave: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "triangular_wave: quality restored");
}
// Case 30: convex_drift; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case30()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0001 + 0.001 * pow(I / 256., 2.);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "convex_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "convex_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "convex_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "convex_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "convex_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "convex_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[64] = 2.;
TS2Expect(TS2Evaluate() == 0., "convex_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "convex_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "convex_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "convex_drift: quality restored");
}
// Case 31: concave_drift; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case31()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0011 - 0.001 * pow(I / 256., 2.);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "concave_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "concave_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "concave_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "concave_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "concave_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "concave_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[101] = 2.;
TS2Expect(TS2Evaluate() == 0., "concave_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "concave_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "concave_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "concave_drift: quality restored");
}
// Case 32: sigmoid_transition; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case32()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * (2. / (1. + exp((I - 90.) / 12.)) - 1.);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sigmoid_transition: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sigmoid_transition: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sigmoid_transition: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sigmoid_transition: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sigmoid_transition: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sigmoid_transition: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[138] = 2.;
TS2Expect(TS2Evaluate() == 0., "sigmoid_transition: implausible return rejected");
TS2Expect(TS2Quality == 0., "sigmoid_transition: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sigmoid_transition: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sigmoid_transition: quality restored");
}
// Case 33: damped_oscillation; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case33()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.002 * exp(-0.012 * I) * cos(0.37 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "damped_oscillation: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "damped_oscillation: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "damped_oscillation: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "damped_oscillation: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "damped_oscillation: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "damped_oscillation: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[175] = 2.;
TS2Expect(TS2Evaluate() == 0., "damped_oscillation: implausible return rejected");
TS2Expect(TS2Quality == 0., "damped_oscillation: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "damped_oscillation: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "damped_oscillation: quality restored");
}
// Case 34: growing_oscillation; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case34()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0001 * exp(0.008 * I) * cos(0.37 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "growing_oscillation: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "growing_oscillation: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "growing_oscillation: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "growing_oscillation: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "growing_oscillation: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "growing_oscillation: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[212] = 2.;
TS2Expect(TS2Evaluate() == 0., "growing_oscillation: implausible return rejected");
TS2Expect(TS2Quality == 0., "growing_oscillation: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "growing_oscillation: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "growing_oscillation: quality restored");
}
// Case 35: phase_discontinuity; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case35()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(0.3 * I + ifelse(I < 40, 1.5, 0.));
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "phase_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "phase_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "phase_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "phase_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "phase_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "phase_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[249] = 2.;
TS2Expect(TS2Evaluate() == 0., "phase_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "phase_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "phase_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "phase_discontinuity: quality restored");
}
// Case 36: frequency_discontinuity; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case36()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(ifelse(I < 80, 0.17, 0.63) * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "frequency_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "frequency_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "frequency_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "frequency_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "frequency_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "frequency_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[30] = 2.;
TS2Expect(TS2Evaluate() == 0., "frequency_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "frequency_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "frequency_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "frequency_discontinuity: quality restored");
}
// Case 37: amplitude_discontinuity; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case37()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 80, 0.002, 0.0003) * sin(0.4 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "amplitude_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "amplitude_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "amplitude_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "amplitude_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "amplitude_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[67] = 2.;
TS2Expect(TS2Evaluate() == 0., "amplitude_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "amplitude_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "amplitude_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_discontinuity: quality restored");
}
// Case 38: smooth_pulse; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case38()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.003 * exp(-pow((I - 32.) / 12., 2.)) - 0.0003;
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "smooth_pulse: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "smooth_pulse: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "smooth_pulse: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "smooth_pulse: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "smooth_pulse: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "smooth_pulse: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[104] = 2.;
TS2Expect(TS2Evaluate() == 0., "smooth_pulse: implausible return rejected");
TS2Expect(TS2Quality == 0., "smooth_pulse: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "smooth_pulse: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "smooth_pulse: quality restored");
}
// Case 39: double_pulse; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case39()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.002 * exp(-pow((I - 16.) / 6., 2.)) - 0.002 * exp(-pow((I - 60.) / 9., 2.));
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "double_pulse: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "double_pulse: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "double_pulse: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "double_pulse: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "double_pulse: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "double_pulse: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[141] = 2.;
TS2Expect(TS2Evaluate() == 0., "double_pulse: implausible return rejected");
TS2Expect(TS2Quality == 0., "double_pulse: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "double_pulse: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "double_pulse: quality restored");
}
// Case 40: cross_scale_conflict; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case40()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0008 * cos(0.04 * I) - 0.001 * cos(0.6 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "cross_scale_conflict: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "cross_scale_conflict: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "cross_scale_conflict: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "cross_scale_conflict: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "cross_scale_conflict: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "cross_scale_conflict: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[178] = 2.;
TS2Expect(TS2Evaluate() == 0., "cross_scale_conflict: implausible return rejected");
TS2Expect(TS2Quality == 0., "cross_scale_conflict: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "cross_scale_conflict: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "cross_scale_conflict: quality restored");
}
// Case 41: near_flat_noise; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case41()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0000002 * sin(0.73 * I) + 0.0000001 * cos(0.29 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "near_flat_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "near_flat_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "near_flat_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "near_flat_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "near_flat_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "near_flat_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[215] = 2.;
TS2Expect(TS2Evaluate() == 0., "near_flat_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "near_flat_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "near_flat_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "near_flat_noise: quality restored");
}
// Case 42: large_return_units; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case42()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.03 * sin(0.13 * I) + 0.01 * cos(0.7 * I);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "large_return_units: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "large_return_units: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "large_return_units: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "large_return_units: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "large_return_units: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "large_return_units: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[252] = 2.;
TS2Expect(TS2Evaluate() == 0., "large_return_units: implausible return rejected");
TS2Expect(TS2Quality == 0., "large_return_units: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "large_return_units: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "large_return_units: quality restored");
}
// Case 43: deterministic_roughness; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case43()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(12.9898 * I + 78.233 * sin(4.1414 * I));
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "deterministic_roughness: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "deterministic_roughness: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "deterministic_roughness: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "deterministic_roughness: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "deterministic_roughness: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "deterministic_roughness: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[33] = 2.;
TS2Expect(TS2Evaluate() == 0., "deterministic_roughness: implausible return rejected");
TS2Expect(TS2Quality == 0., "deterministic_roughness: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "deterministic_roughness: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "deterministic_roughness: quality restored");
}
// Case 44: weeklike_gaps; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case44()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 120 < 8, 0., 0.001 * cos(0.33 * I));
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "weeklike_gaps: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "weeklike_gaps: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "weeklike_gaps: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "weeklike_gaps: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "weeklike_gaps: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "weeklike_gaps: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[70] = 2.;
TS2Expect(TS2Evaluate() == 0., "weeklike_gaps: implausible return rejected");
TS2Expect(TS2Quality == 0., "weeklike_gaps: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "weeklike_gaps: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "weeklike_gaps: quality restored");
}
// Case 45: quiet_recent_window; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case45()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 24, 0., 0.001 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "quiet_recent_window: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "quiet_recent_window: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "quiet_recent_window: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "quiet_recent_window: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_recent_window: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "quiet_recent_window: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[107] = 2.;
TS2Expect(TS2Evaluate() == 0., "quiet_recent_window: implausible return rejected");
TS2Expect(TS2Quality == 0., "quiet_recent_window: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "quiet_recent_window: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_recent_window: quality restored");
}
// Case 46: quiet_old_window; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case46()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I > 180, 0., 0.001 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "quiet_old_window: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "quiet_old_window: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "quiet_old_window: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "quiet_old_window: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_old_window: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "quiet_old_window: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[144] = 2.;
TS2Expect(TS2Evaluate() == 0., "quiet_old_window: implausible return rejected");
TS2Expect(TS2Quality == 0., "quiet_old_window: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "quiet_old_window: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_old_window: quality restored");
}
// Case 47: unequal_tail_mass; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case47()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 13 == 0, -0.004, 0.00035 + 0.0001 * sin(I));
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "unequal_tail_mass: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "unequal_tail_mass: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "unequal_tail_mass: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "unequal_tail_mass: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "unequal_tail_mass: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "unequal_tail_mass: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[181] = 2.;
TS2Expect(TS2Evaluate() == 0., "unequal_tail_mass: implausible return rejected");
TS2Expect(TS2Quality == 0., "unequal_tail_mass: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "unequal_tail_mass: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "unequal_tail_mass: quality restored");
}
// Case 48: bounded_chaotic_phase; model 15 perturbation phase 2.055000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case48()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(I * I * 0.61803398875);
TS2Returns[I] += 0.00000003 * sin(2.055000 + I * 0.385000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "bounded_chaotic_phase: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "bounded_chaotic_phase: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "bounded_chaotic_phase: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "bounded_chaotic_phase: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "bounded_chaotic_phase: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "bounded_chaotic_phase: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[218] = 2.;
TS2Expect(TS2Evaluate() == 0., "bounded_chaotic_phase: implausible return rejected");
TS2Expect(TS2Quality == 0., "bounded_chaotic_phase: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "bounded_chaotic_phase: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "bounded_chaotic_phase: quality restored");
}
void TS2SelfTest()
{
int I;
TS2Checks = 0;
TS2Failures = 0;
file_write(TS2TestLog, "Synthetic property suite\n", 0);
for (I = 0; I < 256; I++)
TS2Returns[I] = 0.;
TS2Expect(TS2Evaluate() == 0., "flat path has no edge");
TS2Expect(TS2Quality == 0., "flat path clears quality");
TS2KnownResponse();
TS2Case1();
TS2Case2();
TS2Case3();
TS2Case4();
TS2Case5();
TS2Case6();
TS2Case7();
TS2Case8();
TS2Case9();
TS2Case10();
TS2Case11();
TS2Case12();
TS2Case13();
TS2Case14();
TS2Case15();
TS2Case16();
TS2Case17();
TS2Case18();
TS2Case19();
TS2Case20();
TS2Case21();
TS2Case22();
TS2Case23();
TS2Case24();
TS2Case25();
TS2Case26();
TS2Case27();
TS2Case28();
TS2Case29();
TS2Case30();
TS2Case31();
TS2Case32();
TS2Case33();
TS2Case34();
TS2Case35();
TS2Case36();
TS2Case37();
TS2Case38();
TS2Case39();
TS2Case40();
TS2Case41();
TS2Case42();
TS2Case43();
TS2Case44();
TS2Case45();
TS2Case46();
TS2Case47();
TS2Case48();
TSRepairTests();
file_append(TS2TestLog, strf("RESULT: %d checks; %d failures\n", TS2Checks, TS2Failures));
}
// Embedded execution and risk controls; no custom runtime include is required.
function run()
{
int Index;
var Current, Previous, Edge, Sigma, OrderLots, UnitRisk, Budget;
BarPeriod = 60;
LookBack = 260;
StartDate = 20240101;
EndDate = 20241231;
Capital = 10000.;
Hedge = 0;
MaxLong = 1;
MaxShort = 1;
#ifdef TS2_SELFTEST
if (is(INITRUN))
{
TS2SelfTest();
quit("TS2 synthetic tests complete; no historical or live orders");
}
return;
#endif
if (!asset("EUR/USD"))
return;
algo(TS2Algo);
if (is(EXITRUN) || is(LOOKBACK))
return;
for (Index = 0; Index < TS2_N; Index++)
{
Current = priceClose(Index + 1);
Previous = priceClose(Index + 2);
if (!TSIsFinite(Current) || !TSIsFinite(Previous) || !(Current > 0.) || !(Previous > 0.))
{
exitLong();
exitShort();
return;
}
TS2Returns[Index] = log(Current / Previous);
}
Edge = TS2Evaluate();
plot("model edge", Edge, NEW, BLUE);
plot("model quality", TS2Quality, 0, RED);
if (Edge < 0.10 || TS2Quality < 0.15)
exitLong();
if (Edge > -0.10 || TS2Quality < 0.15)
exitShort();
if (abs(Edge) < 0.25 || TS2Quality < 0.30)
return;
if (NumOpenLong + NumOpenShort > 0)
return;
if (PIP <= 0. || PIPCost <= 0. || LotAmount <= 0. || MarginCost <= 0.)
return;
if (Balance <= 0. || Equity < 0.85 * Balance)
return;
Sigma = 0.;
for (Index = 0; Index < 48; Index++)
Sigma += TS2Returns[Index] * TS2Returns[Index] / 48.;
Sigma = sqrt(Sigma) * priceClose(1);
Stop = max(20. * PIP, 3. * Sigma);
TakeProfit = 2. * Stop;
LifeTime = TS2Holding;
UnitRisk = TSUnitStopRisk(priceClose(0));
if (UnitRisk <= 0.)
return;
Budget = 0.0025 * min(Balance, Equity);
OrderLots = min(Budget / UnitRisk, 2000. / LotAmount);
OrderLots = min(OrderLots, max(0., Equity - MarginVal) * 0.5 / MarginCost);
if (OrderLots < 1.)
return;
Lots = floor(OrderLots);
Risk = 0.;
Margin = 0.;
if (Edge > 0.)
enterLong();
else
enterShort();
}
|
|
|
Competing First-Passage Survival
[Re: TipmyPip]
#489754
52 minutes ago
52 minutes ago
|
Joined: Sep 2017
Posts: 372
TipmyPip
OP
Senior Member
|
OP
Senior Member
Joined: Sep 2017
Posts: 372
|
This strategy treats historical directional excursions as competing event-time outcomes. Instead of forecasting a return directly, it estimates whether an upward or downward cumulative-return barrier tends to be reached first at several holding horizons. Episodes that reach neither barrier remain censored. This is materially different from placing a reversal trade after a bipower jump statistic, and it does not use a hidden Markov state or an equilibrium half-life estimate. The historical volatility scale is obtained from completed returns at indices 16 through 255. At each horizon h in 4, 8, and 16, the barrier magnitude is barrier[h] = 0.8*sqrt(mean_square_return*h). Historical episodes are constructed in chronological order within each episode, using nonoverlapping blocks for that horizon. Every completed episode ends before the newest sixteen returns. A path is followed until its cumulative signed return first reaches the positive barrier, first reaches the negative barrier, or runs out of its allotted horizon. Only the earliest crossing is counted. For event time t, the model records the number still at risk immediately before the event and the counts of upward and downward first hits. The discrete hazards are hu[t] = up_events[t]/at_risk[t] and hd[t] = down_events[t]/at_risk[t]. Survival evolves as S[t] = S[t-1]*(1-hu[t]-hd[t]), starting with S[0] = 1. Upward cumulative incidence is Cu = sum(S[t-1]*hu[t]), and downward cumulative incidence is Cd = sum(S[t-1]*hd[t]). This preserves the competition between the two barriers rather than estimating each side as if the other side could not occur. The horizon-specific direction is (Cu-Cd)*(1-censored_fraction). Three such directions are averaged. Quality combines total event coverage with agreement between the signed average and the magnitudes of its component estimates. The newest four-return and sixteen-return sums must both agree with the historical event preference. Thus historical upward dominance cannot open a long when current short-horizon direction is negative. The final edge is bounded, the shared order gates still apply, and maximum holding duration is sixteen hourly bars. Close-to-close barrier measurement cannot observe intrabar first passage. If price crosses both barriers inside one hourly bar, this representation does not know the true order. Historical RMS scaling, episode selection, censoring treatment, and the small number of long-horizon episodes all introduce uncertainty. Censored paths are not classified as wins or losses, but censoring can still be informative rather than random. The synthetic property suite checks arithmetic behavior and directional reflection, not the adequacy of those assumptions. Any market-data evaluation should inspect event counts, incidence calibration, costs, and sensitivity to intrabar resolution before considering live execution.
// TS16_BarrierSurvival: Competing first-passage survival.
// Standalone model implementation with embedded safety and engine code.
// Market scope: EUR/USD completed-hour return aggregation horizons.
// These are not actual bond maturities or a futures calendar spread.
// Model diagnostic: estimated cumulative incidence of either barrier.
// Quality heuristic: Event coverage and directional agreement across horizons.
// Limitation: Barriers use historical scale. Close-only first passage misses intrabar crossings and carries censoring assumptions.
// No claim of profitability, calibration, or independent strategy returns.
// Inputs: 256 newest-first log returns; all must be finite and within [-1,1].
// Output: bounded signed edge; positive buys, negative sells, zero abstains.
// Quality is a heuristic filter, never a calibrated success probability.
// The synthetic suite below is included in the total file line count.
// Regenerate with build_sources.py; compare hashes before deployment.
#include <default.c>
string TS2Algo = "TS16";
string TS2TestLog = "Log/TS16_BarrierSurvival_test.txt";
int TS2Holding = 16;
// R1/R3: IEEE-754 finite validation without lite-C unordered comparisons.
// Supported Zorro Windows targets use 64-bit var and little-endian 32-bit int.
int TSIsFinite(var Value)
{
int Words[2];
memcpy(Words, &Value, sizeof(Value));
return (Words[1] & 0x7ff00000) != 0x7ff00000;
}
// Forex commission per lot; negative quotes are percent, not cash rebates.
// Return -1 on invalid metadata rather than accepting an unknown risk amount.
var TSFeePerLot(var FeeQuote, var UnitsPerLot, var PipSize, var PipValue, var RefPrice)
{
var FeeValue;
if (!TSIsFinite(FeeQuote) || !TSIsFinite(UnitsPerLot) || !TSIsFinite(PipSize) ||
!TSIsFinite(PipValue) || !TSIsFinite(RefPrice))
return -1.;
if (!(UnitsPerLot > 0.) || !(PipSize > 0.) || !(PipValue > 0.) || !(RefPrice > 0.))
return -1.;
if (FeeQuote >= 0.)
FeeValue = FeeQuote * UnitsPerLot / 10000.;
else
FeeValue = (-FeeQuote / 100.) * (PipValue / PipSize) * RefPrice;
if (!TSIsFinite(FeeValue) || FeeValue < 0.)
return -1.;
return FeeValue;
}
var TSUnitStopRisk(var RefPrice)
{
var FeeValue, FeePrice, StopRisk;
if (!TSIsFinite(RefPrice) || !(RefPrice > 0.) || !TSIsFinite(Stop) || !(Stop > 0.) ||
!TSIsFinite(Spread) || !TSIsFinite(Balance) || !TSIsFinite(Equity) ||
!TSIsFinite(MarginCost) || !TSIsFinite(MarginVal))
return -1.;
if (!(Balance > 0.) || !(Equity > 0.) || !(MarginCost > 0.))
return -1.;
// Conservative percentage-fee price through the stop, absent gaps/slippage.
FeePrice = RefPrice + abs(Spread) + Stop;
FeeValue = TSFeePerLot(Commission, LotAmount, PIP, PIPCost, FeePrice);
if (FeeValue < 0.)
return -1.;
StopRisk = (Stop + abs(Spread)) / PIP * PIPCost + FeeValue;
if (!TSIsFinite(StopRisk) || !(StopRisk > 0.))
return -1.;
return StopRisk;
}
// Embedded input, state, and test contracts; identical safety is not novel alpha.
#define TS2_N 256
var TS2Returns[256];
var TS2Quality;
var TS2Statistic;
var TS2Raw;
int TS2Checks;
int TS2Failures;
var TS2Model();
var TS2Bound(var Value)
{
if (!TSIsFinite(Value))
return 0.;
return max(-1., min(1., Value));
}
var TS2Evaluate()
{
int Index;
var Energy;
TS2Quality = 0.;
TS2Statistic = 0.;
TS2Raw = 0.;
Energy = 0.;
for (Index = 0; Index < TS2_N; Index++)
{
if (!TSIsFinite(TS2Returns[Index]))
return 0.;
if (abs(TS2Returns[Index]) > 1.)
return 0.;
Energy += TS2Returns[Index] * TS2Returns[Index];
}
if (Energy < 1.e-24)
return 0.;
TS2Raw = TS2Model();
if (!TSIsFinite(TS2Raw) || abs(TS2Raw) > 1.e12 ||
!TSIsFinite(TS2Quality) || !TSIsFinite(TS2Statistic))
{
TS2Quality = 0.;
TS2Statistic = 0.;
TS2Raw = 0.;
return 0.;
}
TS2Quality = max(0., min(1., TS2Quality));
return TS2Bound(TS2Raw);
}
void TS2Expect(int Passed, string Label)
{
TS2Checks++;
if (!Passed)
{
TS2Failures++;
file_append(TS2TestLog, strf("FAIL: %s\n", Label));
}
}
// BEGIN ANALYTICAL MODEL
// Event-time barrier experiments estimate competing risks without an HMM.
// Nonoverlapping historical episodes keep all event outcomes before index 0.
var TS2Model()
{
var Survival[17], UpHazard[17], DownHazard[17], AtRisk[17];
var UpEvents[17], DownEvents[17], Threshold, Accumulation, Energy;
var UpMass, DownMass, RestrictedTime, Censored, Direction;
var ShortDirection, LongDirection, Probability, Signal, Consistency;
int Durations[3] = {4, 8, 16};
int Scale, Start, Time, Horizon, Hit, Episodes, Index, Remaining;
Energy = 0.;
for (Index = 16; Index < 256; Index++)
Energy += TS2Returns[Index] * TS2Returns[Index] / 240.;
if (Energy < 1.e-24)
return 0.;
Direction = 0.; Consistency = 0.; Probability = 0.;
for (Scale = 0; Scale < 3; Scale++)
{
Horizon = Durations[Scale];
Threshold = sqrt(Energy * Horizon) * 0.8;
for (Time = 0; Time <= 16; Time++)
{
AtRisk[Time] = 0.; UpEvents[Time] = 0.; DownEvents[Time] = 0.;
Survival[Time] = 1.; UpHazard[Time] = 0.; DownHazard[Time] = 0.;
}
Episodes = 0;
Censored = 0.;
for (Start = 255; Start >= Horizon + 16; Start -= Horizon)
{
Accumulation = 0.;
Hit = 0;
Episodes++;
for (Time = 1; Time <= Horizon; Time++)
{
AtRisk[Time]++;
Accumulation += TS2Returns[Start - Time + 1];
if (Accumulation >= Threshold)
{
UpEvents[Time]++;
Hit = 1;
break;
}
if (Accumulation <= -Threshold)
{
DownEvents[Time]++;
Hit = -1;
break;
}
}
if (!Hit)
Censored++;
}
UpMass = 0.; DownMass = 0.; RestrictedTime = 0.;
for (Time = 1; Time <= Horizon; Time++)
{
if (AtRisk[Time] > 0.)
{
UpHazard[Time] = UpEvents[Time] / AtRisk[Time];
DownHazard[Time] = DownEvents[Time] / AtRisk[Time];
}
UpMass += Survival[Time - 1] * UpHazard[Time];
DownMass += Survival[Time - 1] * DownHazard[Time];
Survival[Time] = Survival[Time - 1] * (1. - UpHazard[Time] - DownHazard[Time]);
RestrictedTime += Survival[Time - 1];
}
Signal = (UpMass - DownMass) * (1. - Censored / max(1, Episodes));
Direction += Signal / 3.;
Consistency += abs(Signal) / 3.;
Probability += (UpMass + DownMass) / 3.;
}
ShortDirection = 0.; LongDirection = 0.;
for (Index = 0; Index < 16; Index++)
{
LongDirection += TS2Returns[Index];
if (Index < 4)
ShortDirection += TS2Returns[Index];
}
TS2Statistic = Probability;
TS2Quality = Probability * abs(Direction) / max(1.e-16, Consistency);
if (Direction * ShortDirection <= 0. || Direction * LongDirection <= 0.)
return 0.;
return TS2Bound(Direction);
}
// END ANALYTICAL MODEL
// Separate repair regression log; the original suite counts stay intact.
int TSRepairChecks = 0;
int TSRepairFailures = 0;
string TSRepairLog = "Log/TS16_BarrierSurvival_repair.txt";
void TSRepairCheck(int Passed, string Label)
{
TSRepairChecks++;
if (!Passed)
{
TSRepairFailures++;
file_append(TSRepairLog, strf("FAIL: %s\n", Label));
}
}
var TSRepairBad(int Kind)
{
int Bits[2];
var Value;
Bits[0] = 0;
Bits[1] = 0x7ff80000;
if (Kind == 1) Bits[1] = 0x7ff00000;
if (Kind == 2) Bits[1] = 0xfff00000;
memcpy(&Value, Bits, sizeof(Value));
return Value;
}
void TSRepairTests()
{
int I, Kind, Position;
var FeeValue, UnitLoss, Budget;
TSRepairChecks = 0; TSRepairFailures = 0;
file_write(TSRepairLog, "Repairs R1-R5: native-safe regression suite\n", 0);
TSRepairCheck(sizeof(FeeValue) == 8, "64-bit var representation");
TSRepairCheck(TSIsFinite(0.), "finite zero");
TSRepairCheck(TSIsFinite(1.), "finite positive");
TSRepairCheck(TSIsFinite(-1.), "finite negative");
for (Kind = 0; Kind < 3; Kind++)
TSRepairCheck(!TSIsFinite(TSRepairBad(Kind)), "reject NaN and both infinities");
TSRepairCheck(abs(TSFeePerLot(0.7, 1000., 0.0001, 0.1, 1.1) - 0.07) < 1.e-6,
"cash commission convention");
TSRepairCheck(TSFeePerLot(0., 1000., 0.0001, 0.1, 1.1) == 0., "zero commission");
FeeValue = TSFeePerLot(-0.02, 1000., 0.0001, 0.1, 1.1);
TSRepairCheck(abs(FeeValue - 0.22) < 1.e-6, "percentage commission convention");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0., 0.1, 1.1) < 0., "invalid pip size");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0.0001, 0., 1.1) < 0., "invalid pip value");
TSRepairCheck(TSFeePerLot(0.7, 0., 0.0001, 0.1, 1.1) < 0., "invalid lot amount");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0.0001, 0.1, -1.) < 0., "invalid fee price");
TSRepairCheck(TSFeePerLot(TSRepairBad(0), 1000., 0.0001, 0.1, 1.1) < 0., "NaN fee quote");
TSRepairCheck(TSFeePerLot(-0.02, 1000., 0.0001, 0.1, TSRepairBad(1)) < 0., "infinite fee price");
TSRepairCheck(TSFeePerLot(-0.02, 1000., TSRepairBad(0), 0.1, 1.1) < 0., "NaN pip metadata");
UnitLoss = (20. * 0.0001 + 0.0001) / 0.0001 * 0.1 + FeeValue;
Budget = 850. * 0.0025;
TSRepairCheck(floor(Budget / UnitLoss) == 0., "percentage fee respects lot-rounding budget");
for (Kind = 0; Kind < 3; Kind++)
{
for (Position = 0; Position < 2; Position++)
{
for (I = 0; I < 256; I++) TS2Returns[I] = 0.0005 + 0.0001 * sin(0.3 * I);
TS2Returns[Position] = TSRepairBad(Kind);
TSRepairCheck(TS2Evaluate() == 0, "non-finite consumed input rejected");
TSRepairCheck(TS2Quality == 0., "invalid return clears quality");
}
}
file_append(TSRepairLog, strf("RESULT: %d checks; %d failures\n", TSRepairChecks, TSRepairFailures));
}
// Synthetic property tests: executed only with -d TS2_SELFTEST.
// Tests do not execute trades, query market data, or establish profitability.
// Known-response anchor: not just a generic bounded-output assertion.
void TS2KnownResponse()
{
int I;
var Edge, Negative;
for (I = 0; I < 256; I++)
TS2Returns[I] = 0.0005;
Edge = TS2Evaluate();
TS2Expect(Edge > 0.99, "known straight path: model-specific response");
for (I = 0; I < 256; I++)
TS2Returns[I] = -0.0005;
Negative = TS2Evaluate();
TS2Expect(abs(Edge + Negative) < 1.e-7, "known straight path: symmetric response");
}
// Case 1: slow_sine; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case1()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0008 * sin(0.07 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "slow_sine: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "slow_sine: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "slow_sine: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "slow_sine: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "slow_sine: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "slow_sine: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[16] = 2.;
TS2Expect(TS2Evaluate() == 0., "slow_sine: implausible return rejected");
TS2Expect(TS2Quality == 0., "slow_sine: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "slow_sine: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "slow_sine: quality restored");
}
// Case 2: fast_sine; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case2()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0012 * sin(1.1 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "fast_sine: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "fast_sine: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "fast_sine: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "fast_sine: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "fast_sine: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "fast_sine: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[53] = 2.;
TS2Expect(TS2Evaluate() == 0., "fast_sine: implausible return rejected");
TS2Expect(TS2Quality == 0., "fast_sine: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "fast_sine: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "fast_sine: quality restored");
}
// Case 3: two_scale_beating; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case3()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0009 * sin(0.18 * I) + 0.0007 * sin(0.21 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "two_scale_beating: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "two_scale_beating: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "two_scale_beating: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "two_scale_beating: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "two_scale_beating: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "two_scale_beating: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[90] = 2.;
TS2Expect(TS2Evaluate() == 0., "two_scale_beating: implausible return rejected");
TS2Expect(TS2Quality == 0., "two_scale_beating: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "two_scale_beating: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "two_scale_beating: quality restored");
}
// Case 4: amplitude_burst; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case4()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0004 * sin(0.31 * I) * (1. + 3. * exp(-pow((I - 28.) / 8., 2.)));
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "amplitude_burst: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "amplitude_burst: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "amplitude_burst: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "amplitude_burst: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_burst: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "amplitude_burst: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[127] = 2.;
TS2Expect(TS2Evaluate() == 0., "amplitude_burst: implausible return rejected");
TS2Expect(TS2Quality == 0., "amplitude_burst: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "amplitude_burst: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_burst: quality restored");
}
// Case 5: chirp_acceleration; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case5()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(0.0018 * I * I + 0.05 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "chirp_acceleration: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "chirp_acceleration: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "chirp_acceleration: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "chirp_acceleration: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_acceleration: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "chirp_acceleration: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[164] = 2.;
TS2Expect(TS2Evaluate() == 0., "chirp_acceleration: implausible return rejected");
TS2Expect(TS2Quality == 0., "chirp_acceleration: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "chirp_acceleration: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_acceleration: quality restored");
}
// Case 6: chirp_deceleration; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case6()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(7. * sqrt(I + 1.));
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "chirp_deceleration: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "chirp_deceleration: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "chirp_deceleration: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "chirp_deceleration: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_deceleration: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "chirp_deceleration: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[201] = 2.;
TS2Expect(TS2Evaluate() == 0., "chirp_deceleration: implausible return rejected");
TS2Expect(TS2Quality == 0., "chirp_deceleration: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "chirp_deceleration: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_deceleration: quality restored");
}
// Case 7: positive_drift_noise; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case7()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0003 + 0.0009 * sin(0.77 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "positive_drift_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "positive_drift_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "positive_drift_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "positive_drift_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "positive_drift_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "positive_drift_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[238] = 2.;
TS2Expect(TS2Evaluate() == 0., "positive_drift_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "positive_drift_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "positive_drift_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "positive_drift_noise: quality restored");
}
// Case 8: negative_drift_noise; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case8()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = -0.0003 + 0.0009 * sin(0.77 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "negative_drift_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "negative_drift_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "negative_drift_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "negative_drift_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "negative_drift_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "negative_drift_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[19] = 2.;
TS2Expect(TS2Evaluate() == 0., "negative_drift_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "negative_drift_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "negative_drift_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "negative_drift_noise: quality restored");
}
// Case 9: mixed_frequency_drift; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case9()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0002 + 0.0006 * sin(0.23 * I) + 0.0004 * cos(1.37 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "mixed_frequency_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "mixed_frequency_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "mixed_frequency_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "mixed_frequency_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "mixed_frequency_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "mixed_frequency_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[56] = 2.;
TS2Expect(TS2Evaluate() == 0., "mixed_frequency_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "mixed_frequency_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "mixed_frequency_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "mixed_frequency_drift: quality restored");
}
// Case 10: alternating_sign; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case10()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 2 == 0, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "alternating_sign: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "alternating_sign: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "alternating_sign: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "alternating_sign: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "alternating_sign: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "alternating_sign: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[93] = 2.;
TS2Expect(TS2Evaluate() == 0., "alternating_sign: implausible return rejected");
TS2Expect(TS2Quality == 0., "alternating_sign: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "alternating_sign: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "alternating_sign: quality restored");
}
// Case 11: three_bar_blocks; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case11()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 6 < 3, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "three_bar_blocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "three_bar_blocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "three_bar_blocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "three_bar_blocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "three_bar_blocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "three_bar_blocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[130] = 2.;
TS2Expect(TS2Evaluate() == 0., "three_bar_blocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "three_bar_blocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "three_bar_blocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "three_bar_blocks: quality restored");
}
// Case 12: five_bar_blocks; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case12()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 10 < 5, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "five_bar_blocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "five_bar_blocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "five_bar_blocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "five_bar_blocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "five_bar_blocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "five_bar_blocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[167] = 2.;
TS2Expect(TS2Evaluate() == 0., "five_bar_blocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "five_bar_blocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "five_bar_blocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "five_bar_blocks: quality restored");
}
// Case 13: one_sided_steps; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case13()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 24, 0.001, 0.0001) + 0.0001 * sin(I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "one_sided_steps: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "one_sided_steps: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "one_sided_steps: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "one_sided_steps: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "one_sided_steps: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "one_sided_steps: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[204] = 2.;
TS2Expect(TS2Evaluate() == 0., "one_sided_steps: implausible return rejected");
TS2Expect(TS2Quality == 0., "one_sided_steps: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "one_sided_steps: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "one_sided_steps: quality restored");
}
// Case 14: late_reversal; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case14()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 12, -0.0008, 0.0005) + 0.0002 * cos(0.7 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "late_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "late_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "late_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "late_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "late_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "late_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[241] = 2.;
TS2Expect(TS2Evaluate() == 0., "late_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "late_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "late_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "late_reversal: quality restored");
}
// Case 15: middle_reversal; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case15()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 64, 0.0006, -0.0004) + 0.0002 * sin(0.43 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "middle_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "middle_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "middle_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "middle_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "middle_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "middle_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[22] = 2.;
TS2Expect(TS2Evaluate() == 0., "middle_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "middle_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "middle_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "middle_reversal: quality restored");
}
// Case 16: old_reversal; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case16()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 160, 0.0004, -0.0007) + 0.0001 * cos(0.91 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "old_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "old_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "old_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "old_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "old_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[59] = 2.;
TS2Expect(TS2Evaluate() == 0., "old_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "old_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "old_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_reversal: quality restored");
}
// Case 17: volatility_expansion; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case17()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = (0.0002 + 0.001 * exp(-0.015 * I)) * sin(0.81 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "volatility_expansion: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "volatility_expansion: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "volatility_expansion: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "volatility_expansion: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_expansion: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "volatility_expansion: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[96] = 2.;
TS2Expect(TS2Evaluate() == 0., "volatility_expansion: implausible return rejected");
TS2Expect(TS2Quality == 0., "volatility_expansion: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "volatility_expansion: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_expansion: quality restored");
}
// Case 18: volatility_contraction; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case18()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = (0.0002 + 0.000004 * I) * sin(0.81 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "volatility_contraction: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "volatility_contraction: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "volatility_contraction: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "volatility_contraction: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_contraction: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "volatility_contraction: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[133] = 2.;
TS2Expect(TS2Evaluate() == 0., "volatility_contraction: implausible return rejected");
TS2Expect(TS2Quality == 0., "volatility_contraction: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "volatility_contraction: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_contraction: quality restored");
}
// Case 19: isolated_recent_up; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case19()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 3, 0.008, 0.0002 * sin(0.61 * I));
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "isolated_recent_up: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "isolated_recent_up: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "isolated_recent_up: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "isolated_recent_up: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_up: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "isolated_recent_up: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[170] = 2.;
TS2Expect(TS2Evaluate() == 0., "isolated_recent_up: implausible return rejected");
TS2Expect(TS2Quality == 0., "isolated_recent_up: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "isolated_recent_up: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_up: quality restored");
}
// Case 20: isolated_recent_down; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case20()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 3, -0.008, 0.0002 * sin(0.61 * I));
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "isolated_recent_down: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "isolated_recent_down: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "isolated_recent_down: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "isolated_recent_down: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_down: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "isolated_recent_down: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[207] = 2.;
TS2Expect(TS2Evaluate() == 0., "isolated_recent_down: implausible return rejected");
TS2Expect(TS2Quality == 0., "isolated_recent_down: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "isolated_recent_down: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_down: quality restored");
}
// Case 21: paired_opposite_shocks; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case21()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 7, 0.006, ifelse(I == 11, -0.006, 0.0001 * cos(I)));
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "paired_opposite_shocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "paired_opposite_shocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "paired_opposite_shocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "paired_opposite_shocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_opposite_shocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "paired_opposite_shocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[244] = 2.;
TS2Expect(TS2Evaluate() == 0., "paired_opposite_shocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "paired_opposite_shocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "paired_opposite_shocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_opposite_shocks: quality restored");
}
// Case 22: paired_same_shocks; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case22()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 7 || I == 11, 0.006, 0.0001 * cos(I));
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "paired_same_shocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "paired_same_shocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "paired_same_shocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "paired_same_shocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_same_shocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "paired_same_shocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[25] = 2.;
TS2Expect(TS2Evaluate() == 0., "paired_same_shocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "paired_same_shocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "paired_same_shocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_same_shocks: quality restored");
}
|
|
|
Competing First-Passage Survival (cont.)
[Re: TipmyPip]
#489755
52 minutes ago
52 minutes ago
|
Joined: Sep 2017
Posts: 372
TipmyPip
OP
Senior Member
|
OP
Senior Member
Joined: Sep 2017
Posts: 372
|
// Case 23: old_shock; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case23()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 211, 0.012, 0.0003 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "old_shock: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "old_shock: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "old_shock: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "old_shock: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_shock: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "old_shock: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[62] = 2.;
TS2Expect(TS2Evaluate() == 0., "old_shock: implausible return rejected");
TS2Expect(TS2Quality == 0., "old_shock: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "old_shock: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_shock: quality restored");
}
// Case 24: sparse_up_events; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case24()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 17 == 0, 0.003, -0.0001);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sparse_up_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sparse_up_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sparse_up_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sparse_up_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_up_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sparse_up_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[99] = 2.;
TS2Expect(TS2Evaluate() == 0., "sparse_up_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "sparse_up_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sparse_up_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_up_events: quality restored");
}
// Case 25: sparse_down_events; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case25()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 17 == 0, -0.003, 0.0001);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sparse_down_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sparse_down_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sparse_down_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sparse_down_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_down_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sparse_down_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[136] = 2.;
TS2Expect(TS2Evaluate() == 0., "sparse_down_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "sparse_down_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sparse_down_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_down_events: quality restored");
}
// Case 26: clustered_up_events; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case26()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 29 < 4, 0.002, -0.00015);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "clustered_up_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "clustered_up_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "clustered_up_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "clustered_up_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_up_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "clustered_up_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[173] = 2.;
TS2Expect(TS2Evaluate() == 0., "clustered_up_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "clustered_up_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "clustered_up_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_up_events: quality restored");
}
// Case 27: clustered_down_events; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case27()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 29 < 4, -0.002, 0.00015);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "clustered_down_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "clustered_down_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "clustered_down_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "clustered_down_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_down_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "clustered_down_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[210] = 2.;
TS2Expect(TS2Evaluate() == 0., "clustered_down_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "clustered_down_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "clustered_down_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_down_events: quality restored");
}
// Case 28: capped_sawtooth; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case28()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.00012 * ((I % 19) - 9);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "capped_sawtooth: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "capped_sawtooth: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "capped_sawtooth: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "capped_sawtooth: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "capped_sawtooth: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "capped_sawtooth: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[247] = 2.;
TS2Expect(TS2Evaluate() == 0., "capped_sawtooth: implausible return rejected");
TS2Expect(TS2Quality == 0., "capped_sawtooth: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "capped_sawtooth: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "capped_sawtooth: quality restored");
}
// Case 29: triangular_wave; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case29()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.00015 * (abs((I % 24) - 12) - 6);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "triangular_wave: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "triangular_wave: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "triangular_wave: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "triangular_wave: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "triangular_wave: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "triangular_wave: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[28] = 2.;
TS2Expect(TS2Evaluate() == 0., "triangular_wave: implausible return rejected");
TS2Expect(TS2Quality == 0., "triangular_wave: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "triangular_wave: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "triangular_wave: quality restored");
}
// Case 30: convex_drift; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case30()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0001 + 0.001 * pow(I / 256., 2.);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "convex_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "convex_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "convex_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "convex_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "convex_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "convex_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[65] = 2.;
TS2Expect(TS2Evaluate() == 0., "convex_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "convex_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "convex_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "convex_drift: quality restored");
}
// Case 31: concave_drift; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case31()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0011 - 0.001 * pow(I / 256., 2.);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "concave_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "concave_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "concave_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "concave_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "concave_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "concave_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[102] = 2.;
TS2Expect(TS2Evaluate() == 0., "concave_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "concave_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "concave_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "concave_drift: quality restored");
}
// Case 32: sigmoid_transition; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case32()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * (2. / (1. + exp((I - 90.) / 12.)) - 1.);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sigmoid_transition: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sigmoid_transition: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sigmoid_transition: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sigmoid_transition: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sigmoid_transition: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sigmoid_transition: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[139] = 2.;
TS2Expect(TS2Evaluate() == 0., "sigmoid_transition: implausible return rejected");
TS2Expect(TS2Quality == 0., "sigmoid_transition: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sigmoid_transition: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sigmoid_transition: quality restored");
}
// Case 33: damped_oscillation; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case33()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.002 * exp(-0.012 * I) * cos(0.37 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "damped_oscillation: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "damped_oscillation: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "damped_oscillation: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "damped_oscillation: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "damped_oscillation: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "damped_oscillation: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[176] = 2.;
TS2Expect(TS2Evaluate() == 0., "damped_oscillation: implausible return rejected");
TS2Expect(TS2Quality == 0., "damped_oscillation: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "damped_oscillation: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "damped_oscillation: quality restored");
}
// Case 34: growing_oscillation; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case34()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0001 * exp(0.008 * I) * cos(0.37 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "growing_oscillation: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "growing_oscillation: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "growing_oscillation: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "growing_oscillation: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "growing_oscillation: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "growing_oscillation: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[213] = 2.;
TS2Expect(TS2Evaluate() == 0., "growing_oscillation: implausible return rejected");
TS2Expect(TS2Quality == 0., "growing_oscillation: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "growing_oscillation: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "growing_oscillation: quality restored");
}
// Case 35: phase_discontinuity; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case35()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(0.3 * I + ifelse(I < 40, 1.5, 0.));
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "phase_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "phase_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "phase_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "phase_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "phase_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "phase_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[250] = 2.;
TS2Expect(TS2Evaluate() == 0., "phase_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "phase_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "phase_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "phase_discontinuity: quality restored");
}
// Case 36: frequency_discontinuity; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case36()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(ifelse(I < 80, 0.17, 0.63) * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "frequency_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "frequency_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "frequency_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "frequency_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "frequency_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "frequency_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[31] = 2.;
TS2Expect(TS2Evaluate() == 0., "frequency_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "frequency_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "frequency_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "frequency_discontinuity: quality restored");
}
// Case 37: amplitude_discontinuity; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case37()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 80, 0.002, 0.0003) * sin(0.4 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "amplitude_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "amplitude_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "amplitude_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "amplitude_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "amplitude_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[68] = 2.;
TS2Expect(TS2Evaluate() == 0., "amplitude_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "amplitude_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "amplitude_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_discontinuity: quality restored");
}
// Case 38: smooth_pulse; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case38()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.003 * exp(-pow((I - 32.) / 12., 2.)) - 0.0003;
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "smooth_pulse: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "smooth_pulse: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "smooth_pulse: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "smooth_pulse: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "smooth_pulse: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "smooth_pulse: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[105] = 2.;
TS2Expect(TS2Evaluate() == 0., "smooth_pulse: implausible return rejected");
TS2Expect(TS2Quality == 0., "smooth_pulse: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "smooth_pulse: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "smooth_pulse: quality restored");
}
// Case 39: double_pulse; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case39()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.002 * exp(-pow((I - 16.) / 6., 2.)) - 0.002 * exp(-pow((I - 60.) / 9., 2.));
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "double_pulse: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "double_pulse: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "double_pulse: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "double_pulse: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "double_pulse: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "double_pulse: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[142] = 2.;
TS2Expect(TS2Evaluate() == 0., "double_pulse: implausible return rejected");
TS2Expect(TS2Quality == 0., "double_pulse: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "double_pulse: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "double_pulse: quality restored");
}
// Case 40: cross_scale_conflict; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case40()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0008 * cos(0.04 * I) - 0.001 * cos(0.6 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "cross_scale_conflict: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "cross_scale_conflict: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "cross_scale_conflict: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "cross_scale_conflict: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "cross_scale_conflict: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "cross_scale_conflict: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[179] = 2.;
TS2Expect(TS2Evaluate() == 0., "cross_scale_conflict: implausible return rejected");
TS2Expect(TS2Quality == 0., "cross_scale_conflict: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "cross_scale_conflict: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "cross_scale_conflict: quality restored");
}
// Case 41: near_flat_noise; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case41()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0000002 * sin(0.73 * I) + 0.0000001 * cos(0.29 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "near_flat_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "near_flat_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "near_flat_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "near_flat_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "near_flat_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "near_flat_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[216] = 2.;
TS2Expect(TS2Evaluate() == 0., "near_flat_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "near_flat_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "near_flat_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "near_flat_noise: quality restored");
}
// Case 42: large_return_units; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case42()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.03 * sin(0.13 * I) + 0.01 * cos(0.7 * I);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "large_return_units: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "large_return_units: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "large_return_units: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "large_return_units: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "large_return_units: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "large_return_units: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[253] = 2.;
TS2Expect(TS2Evaluate() == 0., "large_return_units: implausible return rejected");
TS2Expect(TS2Quality == 0., "large_return_units: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "large_return_units: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "large_return_units: quality restored");
}
// Case 43: deterministic_roughness; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case43()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(12.9898 * I + 78.233 * sin(4.1414 * I));
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "deterministic_roughness: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "deterministic_roughness: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "deterministic_roughness: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "deterministic_roughness: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "deterministic_roughness: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "deterministic_roughness: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[34] = 2.;
TS2Expect(TS2Evaluate() == 0., "deterministic_roughness: implausible return rejected");
TS2Expect(TS2Quality == 0., "deterministic_roughness: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "deterministic_roughness: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "deterministic_roughness: quality restored");
}
// Case 44: weeklike_gaps; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case44()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 120 < 8, 0., 0.001 * cos(0.33 * I));
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "weeklike_gaps: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "weeklike_gaps: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "weeklike_gaps: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "weeklike_gaps: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "weeklike_gaps: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "weeklike_gaps: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[71] = 2.;
TS2Expect(TS2Evaluate() == 0., "weeklike_gaps: implausible return rejected");
TS2Expect(TS2Quality == 0., "weeklike_gaps: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "weeklike_gaps: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "weeklike_gaps: quality restored");
}
// Case 45: quiet_recent_window; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case45()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 24, 0., 0.001 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "quiet_recent_window: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "quiet_recent_window: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "quiet_recent_window: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "quiet_recent_window: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_recent_window: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "quiet_recent_window: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[108] = 2.;
TS2Expect(TS2Evaluate() == 0., "quiet_recent_window: implausible return rejected");
TS2Expect(TS2Quality == 0., "quiet_recent_window: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "quiet_recent_window: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_recent_window: quality restored");
}
// Case 46: quiet_old_window; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case46()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I > 180, 0., 0.001 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "quiet_old_window: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "quiet_old_window: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "quiet_old_window: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "quiet_old_window: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_old_window: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "quiet_old_window: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[145] = 2.;
TS2Expect(TS2Evaluate() == 0., "quiet_old_window: implausible return rejected");
TS2Expect(TS2Quality == 0., "quiet_old_window: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "quiet_old_window: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_old_window: quality restored");
}
// Case 47: unequal_tail_mass; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case47()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 13 == 0, -0.004, 0.00035 + 0.0001 * sin(I));
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "unequal_tail_mass: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "unequal_tail_mass: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "unequal_tail_mass: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "unequal_tail_mass: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "unequal_tail_mass: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "unequal_tail_mass: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[182] = 2.;
TS2Expect(TS2Evaluate() == 0., "unequal_tail_mass: implausible return rejected");
TS2Expect(TS2Quality == 0., "unequal_tail_mass: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "unequal_tail_mass: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "unequal_tail_mass: quality restored");
}
// Case 48: bounded_chaotic_phase; model 16 perturbation phase 2.192000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case48()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(I * I * 0.61803398875);
TS2Returns[I] += 0.00000003 * sin(2.192000 + I * 0.398000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "bounded_chaotic_phase: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "bounded_chaotic_phase: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "bounded_chaotic_phase: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "bounded_chaotic_phase: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "bounded_chaotic_phase: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "bounded_chaotic_phase: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[219] = 2.;
TS2Expect(TS2Evaluate() == 0., "bounded_chaotic_phase: implausible return rejected");
TS2Expect(TS2Quality == 0., "bounded_chaotic_phase: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "bounded_chaotic_phase: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "bounded_chaotic_phase: quality restored");
}
void TS2SelfTest()
{
int I;
TS2Checks = 0;
TS2Failures = 0;
file_write(TS2TestLog, "Synthetic property suite\n", 0);
for (I = 0; I < 256; I++)
TS2Returns[I] = 0.;
TS2Expect(TS2Evaluate() == 0., "flat path has no edge");
TS2Expect(TS2Quality == 0., "flat path clears quality");
TS2KnownResponse();
TS2Case1();
TS2Case2();
TS2Case3();
TS2Case4();
TS2Case5();
TS2Case6();
TS2Case7();
TS2Case8();
TS2Case9();
TS2Case10();
TS2Case11();
TS2Case12();
TS2Case13();
TS2Case14();
TS2Case15();
TS2Case16();
TS2Case17();
TS2Case18();
TS2Case19();
TS2Case20();
TS2Case21();
TS2Case22();
TS2Case23();
TS2Case24();
TS2Case25();
TS2Case26();
TS2Case27();
TS2Case28();
TS2Case29();
TS2Case30();
TS2Case31();
TS2Case32();
TS2Case33();
TS2Case34();
TS2Case35();
TS2Case36();
TS2Case37();
TS2Case38();
TS2Case39();
TS2Case40();
TS2Case41();
TS2Case42();
TS2Case43();
TS2Case44();
TS2Case45();
TS2Case46();
TS2Case47();
TS2Case48();
TSRepairTests();
file_append(TS2TestLog, strf("RESULT: %d checks; %d failures\n", TS2Checks, TS2Failures));
}
// Embedded execution and risk controls; no custom runtime include is required.
function run()
{
int Index;
var Current, Previous, Edge, Sigma, OrderLots, UnitRisk, Budget;
BarPeriod = 60;
LookBack = 260;
StartDate = 20240101;
EndDate = 20241231;
Capital = 10000.;
Hedge = 0;
MaxLong = 1;
MaxShort = 1;
#ifdef TS2_SELFTEST
if (is(INITRUN))
{
TS2SelfTest();
quit("TS2 synthetic tests complete; no historical or live orders");
}
return;
#endif
if (!asset("EUR/USD"))
return;
algo(TS2Algo);
if (is(EXITRUN) || is(LOOKBACK))
return;
for (Index = 0; Index < TS2_N; Index++)
{
Current = priceClose(Index + 1);
Previous = priceClose(Index + 2);
if (!TSIsFinite(Current) || !TSIsFinite(Previous) || !(Current > 0.) || !(Previous > 0.))
{
exitLong();
exitShort();
return;
}
TS2Returns[Index] = log(Current / Previous);
}
Edge = TS2Evaluate();
plot("model edge", Edge, NEW, BLUE);
plot("model quality", TS2Quality, 0, RED);
if (Edge < 0.10 || TS2Quality < 0.15)
exitLong();
if (Edge > -0.10 || TS2Quality < 0.15)
exitShort();
if (abs(Edge) < 0.25 || TS2Quality < 0.30)
return;
if (NumOpenLong + NumOpenShort > 0)
return;
if (PIP <= 0. || PIPCost <= 0. || LotAmount <= 0. || MarginCost <= 0.)
return;
if (Balance <= 0. || Equity < 0.85 * Balance)
return;
Sigma = 0.;
for (Index = 0; Index < 48; Index++)
Sigma += TS2Returns[Index] * TS2Returns[Index] / 48.;
Sigma = sqrt(Sigma) * priceClose(1);
Stop = max(20. * PIP, 3. * Sigma);
TakeProfit = 2. * Stop;
LifeTime = TS2Holding;
UnitRisk = TSUnitStopRisk(priceClose(0));
if (UnitRisk <= 0.)
return;
Budget = 0.0025 * min(Balance, Equity);
OrderLots = min(Budget / UnitRisk, 2000. / LotAmount);
OrderLots = min(OrderLots, max(0., Equity - MarginVal) * 0.5 / MarginCost);
if (OrderLots < 1.)
return;
Lots = floor(OrderLots);
Risk = 0.;
Margin = 0.;
if (Edge > 0.)
enterLong();
else
enterShort();
}
|
|
|
Multiscale Signed Event Excitation
[Re: TipmyPip]
#489756
51 minutes ago
51 minutes ago
|
Joined: Sep 2017
Posts: 372
TipmyPip
OP
Senior Member
|
OP
Senior Member
Joined: Sep 2017
Posts: 372
|
This strategy studies the arrival and persistence of directional return events. It is inspired by self-exciting event processes, but it does not claim to be a maximum-likelihood Hawkes estimator. The analytical hypothesis is that unusually positive or negative returns may arrive in clusters, and the balance of their decaying excitation can provide a directional signal across several memory scales. This differs from modeling every return as a Gaussian emission from a hidden regime. An event threshold is set to 0.65*RMS using the older 224 returns. An upward event occurs when a return is above that positive threshold, and a downward event occurs when it is below the corresponding negative threshold. Other observations contribute no event. Baseline upward and downward rates are their empirical frequencies in that older region. Three kernels with decay factors 0.55, 0.82, and 0.94 represent short, medium, and longer event memory. These are explicitly different memory scales within one event model, not the only source of difference between the ten strategies. For each kernel, historical same-direction and opposite-direction event pairs are counted over lags 1 through 16, weighted by decay^lag. Their contrast yields a nonnegative excitation proxy, capped at 0.8. In shorthand, branch = clip((same_pairs-cross_pairs)/weighted_prior_events, 0, 0.8). Kernel amplitude is branch*(1-decay). Recent upward and downward event tails are computed from the newest 32 observations. The projected conditional rates at future step h combine a baseline contribution with a decayed tail contribution: rate_up[h] = base_up*(1-branch) + amplitude*tail_up*decay^h, with an analogous downward expression. Rates are averaged over the next eight steps. Each kernel produces contrast = (integrated_up-integrated_down)/(integrated_up+integrated_down). The strategy averages the three signed contrasts, and quality combines total projected activity with their directional agreement. A high event imbalance in an almost inactive setting is therefore not automatically strong evidence. The output is clipped to a bounded signed edge, and all common execution thresholds apply. Maximum holding duration is six hourly bars; event-balance decay or quality loss can exit the position sooner. The excitation proxy uses moments and co-occurrence counts, not likelihood optimization. Its cap does not certify the stationarity conditions of a fully specified multivariate Hawkes process. Common shocks, volatility shifts, threshold selection, and directional drift can all create apparent clustering. A baseline imbalance can generate a signal even when estimated self-excitation is zero, so interpretation must separate background rate from tail excitation. Synthetic cases cover sparse events, clustered signs, alternating signs, and isolated shocks. These tests do not demonstrate profitable event prediction, and projected rates should not be described as calibrated real-world event probabilities without additional validation.
// TS17_EventExcitation: Multiscale signed event excitation.
// Standalone model implementation with embedded safety and engine code.
// Market scope: EUR/USD completed-hour return aggregation horizons.
// These are not actual bond maturities or a futures calendar spread.
// Model diagnostic: integrated directional event activity.
// Quality heuristic: Activity times agreement across exponential kernels.
// Limitation: Moment-based excitation is Hawkes-inspired, not a maximum-likelihood Hawkes fit or a stationarity guarantee.
// No claim of profitability, calibration, or independent strategy returns.
// Inputs: 256 newest-first log returns; all must be finite and within [-1,1].
// Output: bounded signed edge; positive buys, negative sells, zero abstains.
// Quality is a heuristic filter, never a calibrated success probability.
// The synthetic suite below is included in the total file line count.
// Regenerate with build_sources.py; compare hashes before deployment.
#include <default.c>
string TS2Algo = "TS17";
string TS2TestLog = "Log/TS17_EventExcitation_test.txt";
int TS2Holding = 6;
// R1/R3: IEEE-754 finite validation without lite-C unordered comparisons.
// Supported Zorro Windows targets use 64-bit var and little-endian 32-bit int.
int TSIsFinite(var Value)
{
int Words[2];
memcpy(Words, &Value, sizeof(Value));
return (Words[1] & 0x7ff00000) != 0x7ff00000;
}
// Forex commission per lot; negative quotes are percent, not cash rebates.
// Return -1 on invalid metadata rather than accepting an unknown risk amount.
var TSFeePerLot(var FeeQuote, var UnitsPerLot, var PipSize, var PipValue, var RefPrice)
{
var FeeValue;
if (!TSIsFinite(FeeQuote) || !TSIsFinite(UnitsPerLot) || !TSIsFinite(PipSize) ||
!TSIsFinite(PipValue) || !TSIsFinite(RefPrice))
return -1.;
if (!(UnitsPerLot > 0.) || !(PipSize > 0.) || !(PipValue > 0.) || !(RefPrice > 0.))
return -1.;
if (FeeQuote >= 0.)
FeeValue = FeeQuote * UnitsPerLot / 10000.;
else
FeeValue = (-FeeQuote / 100.) * (PipValue / PipSize) * RefPrice;
if (!TSIsFinite(FeeValue) || FeeValue < 0.)
return -1.;
return FeeValue;
}
var TSUnitStopRisk(var RefPrice)
{
var FeeValue, FeePrice, StopRisk;
if (!TSIsFinite(RefPrice) || !(RefPrice > 0.) || !TSIsFinite(Stop) || !(Stop > 0.) ||
!TSIsFinite(Spread) || !TSIsFinite(Balance) || !TSIsFinite(Equity) ||
!TSIsFinite(MarginCost) || !TSIsFinite(MarginVal))
return -1.;
if (!(Balance > 0.) || !(Equity > 0.) || !(MarginCost > 0.))
return -1.;
// Conservative percentage-fee price through the stop, absent gaps/slippage.
FeePrice = RefPrice + abs(Spread) + Stop;
FeeValue = TSFeePerLot(Commission, LotAmount, PIP, PIPCost, FeePrice);
if (FeeValue < 0.)
return -1.;
StopRisk = (Stop + abs(Spread)) / PIP * PIPCost + FeeValue;
if (!TSIsFinite(StopRisk) || !(StopRisk > 0.))
return -1.;
return StopRisk;
}
// Embedded input, state, and test contracts; identical safety is not novel alpha.
#define TS2_N 256
var TS2Returns[256];
var TS2Quality;
var TS2Statistic;
var TS2Raw;
int TS2Checks;
int TS2Failures;
var TS2Model();
var TS2Bound(var Value)
{
if (!TSIsFinite(Value))
return 0.;
return max(-1., min(1., Value));
}
var TS2Evaluate()
{
int Index;
var Energy;
TS2Quality = 0.;
TS2Statistic = 0.;
TS2Raw = 0.;
Energy = 0.;
for (Index = 0; Index < TS2_N; Index++)
{
if (!TSIsFinite(TS2Returns[Index]))
return 0.;
if (abs(TS2Returns[Index]) > 1.)
return 0.;
Energy += TS2Returns[Index] * TS2Returns[Index];
}
if (Energy < 1.e-24)
return 0.;
TS2Raw = TS2Model();
if (!TSIsFinite(TS2Raw) || abs(TS2Raw) > 1.e12 ||
!TSIsFinite(TS2Quality) || !TSIsFinite(TS2Statistic))
{
TS2Quality = 0.;
TS2Statistic = 0.;
TS2Raw = 0.;
return 0.;
}
TS2Quality = max(0., min(1., TS2Quality));
return TS2Bound(TS2Raw);
}
void TS2Expect(int Passed, string Label)
{
TS2Checks++;
if (!Passed)
{
TS2Failures++;
file_append(TS2TestLog, strf("FAIL: %s\n", Label));
}
}
// BEGIN ANALYTICAL MODEL
// Conditional event rates use observed signed exceedances, not latent states.
// Estimate excitation from lagged event co-occurrence, then integrate decay.
var TS2Model()
{
var Up[256];
var Down[256];
var Decays[3] = {0.55, 0.82, 0.94};
var Energy, Threshold, BaseUp, BaseDown, Cross, Self, Pairs;
var ExcitationUp, ExcitationDown, IntensityUp, IntensityDown;
var TailUp, TailDown, Kernel, Rate, Branching, Contrast, TotalRate;
var IntegratedUp, IntegratedDown, Direction, Strength, Agreement;
int Index, Lag, Scale, Horizon;
Energy = 0.;
for (Index = 32; Index < 256; Index++)
Energy += TS2Returns[Index] * TS2Returns[Index] / 224.;
Threshold = sqrt(Energy) * 0.65;
if (Threshold < 1.e-16)
return 0.;
BaseUp = 0.; BaseDown = 0.;
for (Index = 0; Index < 256; Index++)
{
Up[Index] = 0.; Down[Index] = 0.;
if (TS2Returns[Index] > Threshold)
Up[Index] = 1.;
if (TS2Returns[Index] < -Threshold)
Down[Index] = 1.;
if (Index >= 32)
{
BaseUp += Up[Index] / 224.;
BaseDown += Down[Index] / 224.;
}
}
Direction = 0.; Strength = 0.; Agreement = 0.;
for (Scale = 0; Scale < 3; Scale++)
{
Self = 0.; Cross = 0.; Pairs = 0.;
for (Index = 32; Index < 224; Index++)
{
Kernel = 1.;
for (Lag = 1; Lag <= 16; Lag++)
{
Kernel *= Decays[Scale];
Self += Kernel * (Up[Index] * Up[Index + Lag] + Down[Index] * Down[Index + Lag]);
Cross += Kernel * (Up[Index] * Down[Index + Lag] + Down[Index] * Up[Index + Lag]);
Pairs += Kernel * (Up[Index + Lag] + Down[Index + Lag]);
}
}
Branching = max(0., min(0.8, (Self - Cross) / max(1., Pairs)));
ExcitationUp = Branching * (1. - Decays[Scale]);
ExcitationDown = ExcitationUp;
TailUp = 0.; TailDown = 0.; Kernel = 1.;
for (Lag = 0; Lag < 32; Lag++)
{
TailUp += Kernel * Up[Lag];
TailDown += Kernel * Down[Lag];
Kernel *= Decays[Scale];
}
IntegratedUp = 0.; IntegratedDown = 0.;
for (Horizon = 1; Horizon <= 8; Horizon++)
{
Rate = pow(Decays[Scale], Horizon);
IntensityUp = BaseUp * (1. - Branching) + ExcitationUp * TailUp * Rate;
IntensityDown = BaseDown * (1. - Branching) + ExcitationDown * TailDown * Rate;
IntegratedUp += IntensityUp / 8.;
IntegratedDown += IntensityDown / 8.;
}
TotalRate = IntegratedUp + IntegratedDown;
Contrast = (IntegratedUp - IntegratedDown) / max(1.e-16, TotalRate);
Direction += Contrast / 3.;
Strength += min(1., TotalRate) / 3.;
Agreement += abs(Contrast) / 3.;
}
TS2Statistic = Strength;
TS2Quality = Strength * abs(Direction) / max(1.e-16, Agreement);
return TS2Bound(Direction);
}
// END ANALYTICAL MODEL
// Separate repair regression log; the original suite counts stay intact.
int TSRepairChecks = 0;
int TSRepairFailures = 0;
string TSRepairLog = "Log/TS17_EventExcitation_repair.txt";
void TSRepairCheck(int Passed, string Label)
{
TSRepairChecks++;
if (!Passed)
{
TSRepairFailures++;
file_append(TSRepairLog, strf("FAIL: %s\n", Label));
}
}
var TSRepairBad(int Kind)
{
int Bits[2];
var Value;
Bits[0] = 0;
Bits[1] = 0x7ff80000;
if (Kind == 1) Bits[1] = 0x7ff00000;
if (Kind == 2) Bits[1] = 0xfff00000;
memcpy(&Value, Bits, sizeof(Value));
return Value;
}
void TSRepairTests()
{
int I, Kind, Position;
var FeeValue, UnitLoss, Budget;
TSRepairChecks = 0; TSRepairFailures = 0;
file_write(TSRepairLog, "Repairs R1-R5: native-safe regression suite\n", 0);
TSRepairCheck(sizeof(FeeValue) == 8, "64-bit var representation");
TSRepairCheck(TSIsFinite(0.), "finite zero");
TSRepairCheck(TSIsFinite(1.), "finite positive");
TSRepairCheck(TSIsFinite(-1.), "finite negative");
for (Kind = 0; Kind < 3; Kind++)
TSRepairCheck(!TSIsFinite(TSRepairBad(Kind)), "reject NaN and both infinities");
TSRepairCheck(abs(TSFeePerLot(0.7, 1000., 0.0001, 0.1, 1.1) - 0.07) < 1.e-6,
"cash commission convention");
TSRepairCheck(TSFeePerLot(0., 1000., 0.0001, 0.1, 1.1) == 0., "zero commission");
FeeValue = TSFeePerLot(-0.02, 1000., 0.0001, 0.1, 1.1);
TSRepairCheck(abs(FeeValue - 0.22) < 1.e-6, "percentage commission convention");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0., 0.1, 1.1) < 0., "invalid pip size");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0.0001, 0., 1.1) < 0., "invalid pip value");
TSRepairCheck(TSFeePerLot(0.7, 0., 0.0001, 0.1, 1.1) < 0., "invalid lot amount");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0.0001, 0.1, -1.) < 0., "invalid fee price");
TSRepairCheck(TSFeePerLot(TSRepairBad(0), 1000., 0.0001, 0.1, 1.1) < 0., "NaN fee quote");
TSRepairCheck(TSFeePerLot(-0.02, 1000., 0.0001, 0.1, TSRepairBad(1)) < 0., "infinite fee price");
TSRepairCheck(TSFeePerLot(-0.02, 1000., TSRepairBad(0), 0.1, 1.1) < 0., "NaN pip metadata");
UnitLoss = (20. * 0.0001 + 0.0001) / 0.0001 * 0.1 + FeeValue;
Budget = 850. * 0.0025;
TSRepairCheck(floor(Budget / UnitLoss) == 0., "percentage fee respects lot-rounding budget");
for (Kind = 0; Kind < 3; Kind++)
{
for (Position = 0; Position < 2; Position++)
{
for (I = 0; I < 256; I++) TS2Returns[I] = 0.0005 + 0.0001 * sin(0.3 * I);
TS2Returns[Position] = TSRepairBad(Kind);
TSRepairCheck(TS2Evaluate() == 0, "non-finite consumed input rejected");
TSRepairCheck(TS2Quality == 0., "invalid return clears quality");
}
}
file_append(TSRepairLog, strf("RESULT: %d checks; %d failures\n", TSRepairChecks, TSRepairFailures));
}
// Synthetic property tests: executed only with -d TS2_SELFTEST.
// Tests do not execute trades, query market data, or establish profitability.
// Known-response anchor: not just a generic bounded-output assertion.
void TS2KnownResponse()
{
int I;
var Edge, Negative;
for (I = 0; I < 256; I++)
TS2Returns[I] = 0.0005;
Edge = TS2Evaluate();
TS2Expect(Edge > 0.99, "known straight path: model-specific response");
for (I = 0; I < 256; I++)
TS2Returns[I] = -0.0005;
Negative = TS2Evaluate();
TS2Expect(abs(Edge + Negative) < 1.e-7, "known straight path: symmetric response");
}
// Case 1: slow_sine; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case1()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0008 * sin(0.07 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "slow_sine: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "slow_sine: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "slow_sine: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "slow_sine: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "slow_sine: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "slow_sine: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[17] = 2.;
TS2Expect(TS2Evaluate() == 0., "slow_sine: implausible return rejected");
TS2Expect(TS2Quality == 0., "slow_sine: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "slow_sine: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "slow_sine: quality restored");
}
// Case 2: fast_sine; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case2()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0012 * sin(1.1 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "fast_sine: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "fast_sine: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "fast_sine: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "fast_sine: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "fast_sine: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "fast_sine: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[54] = 2.;
TS2Expect(TS2Evaluate() == 0., "fast_sine: implausible return rejected");
TS2Expect(TS2Quality == 0., "fast_sine: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "fast_sine: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "fast_sine: quality restored");
}
// Case 3: two_scale_beating; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case3()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0009 * sin(0.18 * I) + 0.0007 * sin(0.21 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "two_scale_beating: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "two_scale_beating: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "two_scale_beating: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "two_scale_beating: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "two_scale_beating: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "two_scale_beating: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[91] = 2.;
TS2Expect(TS2Evaluate() == 0., "two_scale_beating: implausible return rejected");
TS2Expect(TS2Quality == 0., "two_scale_beating: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "two_scale_beating: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "two_scale_beating: quality restored");
}
// Case 4: amplitude_burst; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case4()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0004 * sin(0.31 * I) * (1. + 3. * exp(-pow((I - 28.) / 8., 2.)));
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "amplitude_burst: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "amplitude_burst: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "amplitude_burst: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "amplitude_burst: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_burst: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "amplitude_burst: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[128] = 2.;
TS2Expect(TS2Evaluate() == 0., "amplitude_burst: implausible return rejected");
TS2Expect(TS2Quality == 0., "amplitude_burst: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "amplitude_burst: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_burst: quality restored");
}
// Case 5: chirp_acceleration; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case5()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(0.0018 * I * I + 0.05 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "chirp_acceleration: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "chirp_acceleration: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "chirp_acceleration: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "chirp_acceleration: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_acceleration: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "chirp_acceleration: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[165] = 2.;
TS2Expect(TS2Evaluate() == 0., "chirp_acceleration: implausible return rejected");
TS2Expect(TS2Quality == 0., "chirp_acceleration: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "chirp_acceleration: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_acceleration: quality restored");
}
// Case 6: chirp_deceleration; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case6()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(7. * sqrt(I + 1.));
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "chirp_deceleration: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "chirp_deceleration: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "chirp_deceleration: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "chirp_deceleration: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_deceleration: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "chirp_deceleration: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[202] = 2.;
TS2Expect(TS2Evaluate() == 0., "chirp_deceleration: implausible return rejected");
TS2Expect(TS2Quality == 0., "chirp_deceleration: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "chirp_deceleration: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_deceleration: quality restored");
}
// Case 7: positive_drift_noise; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case7()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0003 + 0.0009 * sin(0.77 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "positive_drift_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "positive_drift_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "positive_drift_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "positive_drift_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "positive_drift_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "positive_drift_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[239] = 2.;
TS2Expect(TS2Evaluate() == 0., "positive_drift_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "positive_drift_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "positive_drift_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "positive_drift_noise: quality restored");
}
// Case 8: negative_drift_noise; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case8()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = -0.0003 + 0.0009 * sin(0.77 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "negative_drift_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "negative_drift_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "negative_drift_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "negative_drift_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "negative_drift_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "negative_drift_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[20] = 2.;
TS2Expect(TS2Evaluate() == 0., "negative_drift_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "negative_drift_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "negative_drift_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "negative_drift_noise: quality restored");
}
// Case 9: mixed_frequency_drift; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case9()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0002 + 0.0006 * sin(0.23 * I) + 0.0004 * cos(1.37 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "mixed_frequency_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "mixed_frequency_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "mixed_frequency_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "mixed_frequency_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "mixed_frequency_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "mixed_frequency_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[57] = 2.;
TS2Expect(TS2Evaluate() == 0., "mixed_frequency_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "mixed_frequency_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "mixed_frequency_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "mixed_frequency_drift: quality restored");
}
// Case 10: alternating_sign; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case10()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 2 == 0, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "alternating_sign: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "alternating_sign: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "alternating_sign: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "alternating_sign: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "alternating_sign: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "alternating_sign: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[94] = 2.;
TS2Expect(TS2Evaluate() == 0., "alternating_sign: implausible return rejected");
TS2Expect(TS2Quality == 0., "alternating_sign: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "alternating_sign: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "alternating_sign: quality restored");
}
// Case 11: three_bar_blocks; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case11()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 6 < 3, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "three_bar_blocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "three_bar_blocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "three_bar_blocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "three_bar_blocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "three_bar_blocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "three_bar_blocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[131] = 2.;
TS2Expect(TS2Evaluate() == 0., "three_bar_blocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "three_bar_blocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "three_bar_blocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "three_bar_blocks: quality restored");
}
// Case 12: five_bar_blocks; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case12()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 10 < 5, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "five_bar_blocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "five_bar_blocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "five_bar_blocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "five_bar_blocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "five_bar_blocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "five_bar_blocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[168] = 2.;
TS2Expect(TS2Evaluate() == 0., "five_bar_blocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "five_bar_blocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "five_bar_blocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "five_bar_blocks: quality restored");
}
// Case 13: one_sided_steps; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case13()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 24, 0.001, 0.0001) + 0.0001 * sin(I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "one_sided_steps: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "one_sided_steps: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "one_sided_steps: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "one_sided_steps: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "one_sided_steps: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "one_sided_steps: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[205] = 2.;
TS2Expect(TS2Evaluate() == 0., "one_sided_steps: implausible return rejected");
TS2Expect(TS2Quality == 0., "one_sided_steps: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "one_sided_steps: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "one_sided_steps: quality restored");
}
// Case 14: late_reversal; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case14()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 12, -0.0008, 0.0005) + 0.0002 * cos(0.7 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "late_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "late_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "late_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "late_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "late_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "late_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[242] = 2.;
TS2Expect(TS2Evaluate() == 0., "late_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "late_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "late_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "late_reversal: quality restored");
}
// Case 15: middle_reversal; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case15()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 64, 0.0006, -0.0004) + 0.0002 * sin(0.43 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "middle_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "middle_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "middle_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "middle_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "middle_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "middle_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[23] = 2.;
TS2Expect(TS2Evaluate() == 0., "middle_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "middle_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "middle_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "middle_reversal: quality restored");
}
// Case 16: old_reversal; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case16()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 160, 0.0004, -0.0007) + 0.0001 * cos(0.91 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "old_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "old_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "old_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "old_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "old_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[60] = 2.;
TS2Expect(TS2Evaluate() == 0., "old_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "old_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "old_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_reversal: quality restored");
}
// Case 17: volatility_expansion; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case17()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = (0.0002 + 0.001 * exp(-0.015 * I)) * sin(0.81 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "volatility_expansion: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "volatility_expansion: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "volatility_expansion: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "volatility_expansion: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_expansion: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "volatility_expansion: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[97] = 2.;
TS2Expect(TS2Evaluate() == 0., "volatility_expansion: implausible return rejected");
TS2Expect(TS2Quality == 0., "volatility_expansion: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "volatility_expansion: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_expansion: quality restored");
}
// Case 18: volatility_contraction; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case18()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = (0.0002 + 0.000004 * I) * sin(0.81 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "volatility_contraction: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "volatility_contraction: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "volatility_contraction: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "volatility_contraction: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_contraction: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "volatility_contraction: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[134] = 2.;
TS2Expect(TS2Evaluate() == 0., "volatility_contraction: implausible return rejected");
TS2Expect(TS2Quality == 0., "volatility_contraction: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "volatility_contraction: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_contraction: quality restored");
}
// Case 19: isolated_recent_up; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case19()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 3, 0.008, 0.0002 * sin(0.61 * I));
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "isolated_recent_up: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "isolated_recent_up: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "isolated_recent_up: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "isolated_recent_up: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_up: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "isolated_recent_up: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[171] = 2.;
TS2Expect(TS2Evaluate() == 0., "isolated_recent_up: implausible return rejected");
TS2Expect(TS2Quality == 0., "isolated_recent_up: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "isolated_recent_up: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_up: quality restored");
}
// Case 20: isolated_recent_down; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case20()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 3, -0.008, 0.0002 * sin(0.61 * I));
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "isolated_recent_down: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "isolated_recent_down: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "isolated_recent_down: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "isolated_recent_down: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_down: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "isolated_recent_down: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[208] = 2.;
TS2Expect(TS2Evaluate() == 0., "isolated_recent_down: implausible return rejected");
TS2Expect(TS2Quality == 0., "isolated_recent_down: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "isolated_recent_down: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_down: quality restored");
}
// Case 21: paired_opposite_shocks; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case21()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 7, 0.006, ifelse(I == 11, -0.006, 0.0001 * cos(I)));
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "paired_opposite_shocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "paired_opposite_shocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "paired_opposite_shocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "paired_opposite_shocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_opposite_shocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "paired_opposite_shocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[245] = 2.;
TS2Expect(TS2Evaluate() == 0., "paired_opposite_shocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "paired_opposite_shocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "paired_opposite_shocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_opposite_shocks: quality restored");
}
// Case 22: paired_same_shocks; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case22()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 7 || I == 11, 0.006, 0.0001 * cos(I));
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "paired_same_shocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "paired_same_shocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "paired_same_shocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "paired_same_shocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_same_shocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "paired_same_shocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[26] = 2.;
TS2Expect(TS2Evaluate() == 0., "paired_same_shocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "paired_same_shocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "paired_same_shocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_same_shocks: quality restored");
}
|
|
|
Multiscale Signed Event Excitation (cont.)
[Re: TipmyPip]
#489757
51 minutes ago
51 minutes ago
|
Joined: Sep 2017
Posts: 372
TipmyPip
OP
Senior Member
|
OP
Senior Member
Joined: Sep 2017
Posts: 372
|
// Case 23: old_shock; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case23()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 211, 0.012, 0.0003 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "old_shock: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "old_shock: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "old_shock: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "old_shock: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_shock: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "old_shock: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[63] = 2.;
TS2Expect(TS2Evaluate() == 0., "old_shock: implausible return rejected");
TS2Expect(TS2Quality == 0., "old_shock: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "old_shock: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_shock: quality restored");
}
// Case 24: sparse_up_events; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case24()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 17 == 0, 0.003, -0.0001);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sparse_up_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sparse_up_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sparse_up_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sparse_up_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_up_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sparse_up_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[100] = 2.;
TS2Expect(TS2Evaluate() == 0., "sparse_up_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "sparse_up_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sparse_up_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_up_events: quality restored");
}
// Case 25: sparse_down_events; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case25()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 17 == 0, -0.003, 0.0001);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sparse_down_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sparse_down_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sparse_down_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sparse_down_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_down_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sparse_down_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[137] = 2.;
TS2Expect(TS2Evaluate() == 0., "sparse_down_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "sparse_down_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sparse_down_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sparse_down_events: quality restored");
}
// Case 26: clustered_up_events; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case26()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 29 < 4, 0.002, -0.00015);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "clustered_up_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "clustered_up_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "clustered_up_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "clustered_up_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_up_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "clustered_up_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[174] = 2.;
TS2Expect(TS2Evaluate() == 0., "clustered_up_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "clustered_up_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "clustered_up_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_up_events: quality restored");
}
// Case 27: clustered_down_events; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case27()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 29 < 4, -0.002, 0.00015);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "clustered_down_events: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "clustered_down_events: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "clustered_down_events: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "clustered_down_events: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_down_events: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "clustered_down_events: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[211] = 2.;
TS2Expect(TS2Evaluate() == 0., "clustered_down_events: implausible return rejected");
TS2Expect(TS2Quality == 0., "clustered_down_events: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "clustered_down_events: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "clustered_down_events: quality restored");
}
// Case 28: capped_sawtooth; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case28()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.00012 * ((I % 19) - 9);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "capped_sawtooth: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "capped_sawtooth: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "capped_sawtooth: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "capped_sawtooth: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "capped_sawtooth: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "capped_sawtooth: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[248] = 2.;
TS2Expect(TS2Evaluate() == 0., "capped_sawtooth: implausible return rejected");
TS2Expect(TS2Quality == 0., "capped_sawtooth: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "capped_sawtooth: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "capped_sawtooth: quality restored");
}
// Case 29: triangular_wave; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case29()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.00015 * (abs((I % 24) - 12) - 6);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "triangular_wave: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "triangular_wave: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "triangular_wave: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "triangular_wave: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "triangular_wave: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "triangular_wave: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[29] = 2.;
TS2Expect(TS2Evaluate() == 0., "triangular_wave: implausible return rejected");
TS2Expect(TS2Quality == 0., "triangular_wave: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "triangular_wave: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "triangular_wave: quality restored");
}
// Case 30: convex_drift; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case30()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0001 + 0.001 * pow(I / 256., 2.);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "convex_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "convex_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "convex_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "convex_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "convex_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "convex_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[66] = 2.;
TS2Expect(TS2Evaluate() == 0., "convex_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "convex_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "convex_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "convex_drift: quality restored");
}
// Case 31: concave_drift; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case31()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0011 - 0.001 * pow(I / 256., 2.);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "concave_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "concave_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "concave_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "concave_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "concave_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "concave_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[103] = 2.;
TS2Expect(TS2Evaluate() == 0., "concave_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "concave_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "concave_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "concave_drift: quality restored");
}
// Case 32: sigmoid_transition; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case32()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * (2. / (1. + exp((I - 90.) / 12.)) - 1.);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "sigmoid_transition: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "sigmoid_transition: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "sigmoid_transition: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "sigmoid_transition: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sigmoid_transition: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "sigmoid_transition: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[140] = 2.;
TS2Expect(TS2Evaluate() == 0., "sigmoid_transition: implausible return rejected");
TS2Expect(TS2Quality == 0., "sigmoid_transition: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "sigmoid_transition: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "sigmoid_transition: quality restored");
}
// Case 33: damped_oscillation; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case33()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.002 * exp(-0.012 * I) * cos(0.37 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "damped_oscillation: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "damped_oscillation: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "damped_oscillation: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "damped_oscillation: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "damped_oscillation: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "damped_oscillation: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[177] = 2.;
TS2Expect(TS2Evaluate() == 0., "damped_oscillation: implausible return rejected");
TS2Expect(TS2Quality == 0., "damped_oscillation: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "damped_oscillation: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "damped_oscillation: quality restored");
}
// Case 34: growing_oscillation; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case34()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0001 * exp(0.008 * I) * cos(0.37 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "growing_oscillation: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "growing_oscillation: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "growing_oscillation: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "growing_oscillation: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "growing_oscillation: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "growing_oscillation: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[214] = 2.;
TS2Expect(TS2Evaluate() == 0., "growing_oscillation: implausible return rejected");
TS2Expect(TS2Quality == 0., "growing_oscillation: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "growing_oscillation: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "growing_oscillation: quality restored");
}
// Case 35: phase_discontinuity; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case35()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(0.3 * I + ifelse(I < 40, 1.5, 0.));
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "phase_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "phase_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "phase_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "phase_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "phase_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "phase_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[251] = 2.;
TS2Expect(TS2Evaluate() == 0., "phase_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "phase_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "phase_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "phase_discontinuity: quality restored");
}
// Case 36: frequency_discontinuity; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case36()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(ifelse(I < 80, 0.17, 0.63) * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "frequency_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "frequency_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "frequency_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "frequency_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "frequency_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "frequency_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[32] = 2.;
TS2Expect(TS2Evaluate() == 0., "frequency_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "frequency_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "frequency_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "frequency_discontinuity: quality restored");
}
// Case 37: amplitude_discontinuity; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case37()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 80, 0.002, 0.0003) * sin(0.4 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "amplitude_discontinuity: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "amplitude_discontinuity: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "amplitude_discontinuity: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "amplitude_discontinuity: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_discontinuity: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "amplitude_discontinuity: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[69] = 2.;
TS2Expect(TS2Evaluate() == 0., "amplitude_discontinuity: implausible return rejected");
TS2Expect(TS2Quality == 0., "amplitude_discontinuity: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "amplitude_discontinuity: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_discontinuity: quality restored");
}
// Case 38: smooth_pulse; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case38()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.003 * exp(-pow((I - 32.) / 12., 2.)) - 0.0003;
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "smooth_pulse: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "smooth_pulse: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "smooth_pulse: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "smooth_pulse: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "smooth_pulse: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "smooth_pulse: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[106] = 2.;
TS2Expect(TS2Evaluate() == 0., "smooth_pulse: implausible return rejected");
TS2Expect(TS2Quality == 0., "smooth_pulse: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "smooth_pulse: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "smooth_pulse: quality restored");
}
// Case 39: double_pulse; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case39()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.002 * exp(-pow((I - 16.) / 6., 2.)) - 0.002 * exp(-pow((I - 60.) / 9., 2.));
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "double_pulse: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "double_pulse: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "double_pulse: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "double_pulse: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "double_pulse: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "double_pulse: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[143] = 2.;
TS2Expect(TS2Evaluate() == 0., "double_pulse: implausible return rejected");
TS2Expect(TS2Quality == 0., "double_pulse: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "double_pulse: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "double_pulse: quality restored");
}
// Case 40: cross_scale_conflict; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case40()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0008 * cos(0.04 * I) - 0.001 * cos(0.6 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "cross_scale_conflict: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "cross_scale_conflict: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "cross_scale_conflict: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "cross_scale_conflict: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "cross_scale_conflict: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "cross_scale_conflict: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[180] = 2.;
TS2Expect(TS2Evaluate() == 0., "cross_scale_conflict: implausible return rejected");
TS2Expect(TS2Quality == 0., "cross_scale_conflict: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "cross_scale_conflict: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "cross_scale_conflict: quality restored");
}
// Case 41: near_flat_noise; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case41()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0000002 * sin(0.73 * I) + 0.0000001 * cos(0.29 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "near_flat_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "near_flat_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "near_flat_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "near_flat_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "near_flat_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "near_flat_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[217] = 2.;
TS2Expect(TS2Evaluate() == 0., "near_flat_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "near_flat_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "near_flat_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "near_flat_noise: quality restored");
}
// Case 42: large_return_units; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case42()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.03 * sin(0.13 * I) + 0.01 * cos(0.7 * I);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "large_return_units: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "large_return_units: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "large_return_units: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "large_return_units: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "large_return_units: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "large_return_units: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[254] = 2.;
TS2Expect(TS2Evaluate() == 0., "large_return_units: implausible return rejected");
TS2Expect(TS2Quality == 0., "large_return_units: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "large_return_units: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "large_return_units: quality restored");
}
// Case 43: deterministic_roughness; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case43()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(12.9898 * I + 78.233 * sin(4.1414 * I));
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "deterministic_roughness: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "deterministic_roughness: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "deterministic_roughness: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "deterministic_roughness: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "deterministic_roughness: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "deterministic_roughness: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[35] = 2.;
TS2Expect(TS2Evaluate() == 0., "deterministic_roughness: implausible return rejected");
TS2Expect(TS2Quality == 0., "deterministic_roughness: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "deterministic_roughness: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "deterministic_roughness: quality restored");
}
// Case 44: weeklike_gaps; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case44()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 120 < 8, 0., 0.001 * cos(0.33 * I));
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "weeklike_gaps: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "weeklike_gaps: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "weeklike_gaps: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "weeklike_gaps: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "weeklike_gaps: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "weeklike_gaps: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[72] = 2.;
TS2Expect(TS2Evaluate() == 0., "weeklike_gaps: implausible return rejected");
TS2Expect(TS2Quality == 0., "weeklike_gaps: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "weeklike_gaps: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "weeklike_gaps: quality restored");
}
// Case 45: quiet_recent_window; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case45()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 24, 0., 0.001 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "quiet_recent_window: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "quiet_recent_window: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "quiet_recent_window: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "quiet_recent_window: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_recent_window: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "quiet_recent_window: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[109] = 2.;
TS2Expect(TS2Evaluate() == 0., "quiet_recent_window: implausible return rejected");
TS2Expect(TS2Quality == 0., "quiet_recent_window: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "quiet_recent_window: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_recent_window: quality restored");
}
// Case 46: quiet_old_window; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case46()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I > 180, 0., 0.001 * sin(0.27 * I));
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "quiet_old_window: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "quiet_old_window: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "quiet_old_window: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "quiet_old_window: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_old_window: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "quiet_old_window: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[146] = 2.;
TS2Expect(TS2Evaluate() == 0., "quiet_old_window: implausible return rejected");
TS2Expect(TS2Quality == 0., "quiet_old_window: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "quiet_old_window: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "quiet_old_window: quality restored");
}
// Case 47: unequal_tail_mass; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case47()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 13 == 0, -0.004, 0.00035 + 0.0001 * sin(I));
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "unequal_tail_mass: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "unequal_tail_mass: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "unequal_tail_mass: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "unequal_tail_mass: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "unequal_tail_mass: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "unequal_tail_mass: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[183] = 2.;
TS2Expect(TS2Evaluate() == 0., "unequal_tail_mass: implausible return rejected");
TS2Expect(TS2Quality == 0., "unequal_tail_mass: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "unequal_tail_mass: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "unequal_tail_mass: quality restored");
}
// Case 48: bounded_chaotic_phase; model 17 perturbation phase 2.329000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case48()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(I * I * 0.61803398875);
TS2Returns[I] += 0.00000003 * sin(2.329000 + I * 0.411000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "bounded_chaotic_phase: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "bounded_chaotic_phase: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "bounded_chaotic_phase: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "bounded_chaotic_phase: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "bounded_chaotic_phase: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "bounded_chaotic_phase: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[220] = 2.;
TS2Expect(TS2Evaluate() == 0., "bounded_chaotic_phase: implausible return rejected");
TS2Expect(TS2Quality == 0., "bounded_chaotic_phase: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "bounded_chaotic_phase: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "bounded_chaotic_phase: quality restored");
}
void TS2SelfTest()
{
int I;
TS2Checks = 0;
TS2Failures = 0;
file_write(TS2TestLog, "Synthetic property suite\n", 0);
for (I = 0; I < 256; I++)
TS2Returns[I] = 0.;
TS2Expect(TS2Evaluate() == 0., "flat path has no edge");
TS2Expect(TS2Quality == 0., "flat path clears quality");
TS2KnownResponse();
TS2Case1();
TS2Case2();
TS2Case3();
TS2Case4();
TS2Case5();
TS2Case6();
TS2Case7();
TS2Case8();
TS2Case9();
TS2Case10();
TS2Case11();
TS2Case12();
TS2Case13();
TS2Case14();
TS2Case15();
TS2Case16();
TS2Case17();
TS2Case18();
TS2Case19();
TS2Case20();
TS2Case21();
TS2Case22();
TS2Case23();
TS2Case24();
TS2Case25();
TS2Case26();
TS2Case27();
TS2Case28();
TS2Case29();
TS2Case30();
TS2Case31();
TS2Case32();
TS2Case33();
TS2Case34();
TS2Case35();
TS2Case36();
TS2Case37();
TS2Case38();
TS2Case39();
TS2Case40();
TS2Case41();
TS2Case42();
TS2Case43();
TS2Case44();
TS2Case45();
TS2Case46();
TS2Case47();
TS2Case48();
TSRepairTests();
file_append(TS2TestLog, strf("RESULT: %d checks; %d failures\n", TS2Checks, TS2Failures));
}
// Embedded execution and risk controls; no custom runtime include is required.
function run()
{
int Index;
var Current, Previous, Edge, Sigma, OrderLots, UnitRisk, Budget;
BarPeriod = 60;
LookBack = 260;
StartDate = 20240101;
EndDate = 20241231;
Capital = 10000.;
Hedge = 0;
MaxLong = 1;
MaxShort = 1;
#ifdef TS2_SELFTEST
if (is(INITRUN))
{
TS2SelfTest();
quit("TS2 synthetic tests complete; no historical or live orders");
}
return;
#endif
if (!asset("EUR/USD"))
return;
algo(TS2Algo);
if (is(EXITRUN) || is(LOOKBACK))
return;
for (Index = 0; Index < TS2_N; Index++)
{
Current = priceClose(Index + 1);
Previous = priceClose(Index + 2);
if (!TSIsFinite(Current) || !TSIsFinite(Previous) || !(Current > 0.) || !(Previous > 0.))
{
exitLong();
exitShort();
return;
}
TS2Returns[Index] = log(Current / Previous);
}
Edge = TS2Evaluate();
plot("model edge", Edge, NEW, BLUE);
plot("model quality", TS2Quality, 0, RED);
if (Edge < 0.10 || TS2Quality < 0.15)
exitLong();
if (Edge > -0.10 || TS2Quality < 0.15)
exitShort();
if (abs(Edge) < 0.25 || TS2Quality < 0.30)
return;
if (NumOpenLong + NumOpenShort > 0)
return;
if (PIP <= 0. || PIPCost <= 0. || LotAmount <= 0. || MarginCost <= 0.)
return;
if (Balance <= 0. || Equity < 0.85 * Balance)
return;
Sigma = 0.;
for (Index = 0; Index < 48; Index++)
Sigma += TS2Returns[Index] * TS2Returns[Index] / 48.;
Sigma = sqrt(Sigma) * priceClose(1);
Stop = max(20. * PIP, 3. * Sigma);
TakeProfit = 2. * Stop;
LifeTime = TS2Holding;
UnitRisk = TSUnitStopRisk(priceClose(0));
if (UnitRisk <= 0.)
return;
Budget = 0.0025 * min(Balance, Equity);
OrderLots = min(Budget / UnitRisk, 2000. / LotAmount);
OrderLots = min(OrderLots, max(0., Equity - MarginVal) * 0.5 / MarginCost);
if (OrderLots < 1.)
return;
Lots = floor(OrderLots);
Risk = 0.;
Margin = 0.;
if (Edge > 0.)
enterLong();
else
enterShort();
}
|
|
|
Sparse-Curvature Convex Trend Filter
[Re: TipmyPip]
#489758
51 minutes ago
51 minutes ago
|
Joined: Sep 2017
Posts: 372
TipmyPip
OP
Senior Member
|
OP
Senior Member
Joined: Sep 2017
Posts: 372
|
This strategy reconstructs a recent cumulative return path as a piecewise-linear trend with sparse changes in slope. Its core is a convex optimization problem, not a robust quantile slope or a sequential latent-state Kalman update. The hypothesis is that a directional endpoint slope is more credible when it remains similar under several degrees of curvature regularization. The regularization path therefore acts as a stability check rather than simply selecting one smoothing parameter that looks favorable in hindsight. The most recent 64-return region supplies an RMS scale. A chronological cumulative path is normalized by that scale to obtain dimensionless observations y[t]. For each penalty lambda in 0.4, 1.2, and 3.6, the target optimization is min_f 0.5*sum((f[t]-y[t])^2) + lambda*sum(abs(D2*f)). Here D2*f[t] = f[t] - 2*f[t+1] + f[t+2]. Penalizing second differences promotes long regions with approximately constant slope, while allowing localized changes when their fit benefit justifies the penalty. The implementation uses an alternating-direction method of multipliers. It introduces z = D2*f and a scaled dual variable u. The fitted path update approximately minimizes a squared-error term plus the augmented quadratic constraint penalty. Several stable gradient sweeps are used for that subproblem. The sparse curvature update is z = soft_threshold(D2*f + u, lambda/rho), where soft_threshold(v,a) = max(0,v-a) - max(0,-v-a). The dual update is u = u + D2*f - z. Iterations stop early only when the monitored primal and change residuals are small, otherwise they use a fixed numerical budget. For each penalty, endpoint direction is (fit[63]-fit[57])/6. Its score is normalized by reconstruction error and its own magnitude. The three scores are averaged only if the least and most regularized endpoint slopes have the same sign. Quality decreases with their disagreement and with the final solver residuals. Therefore a poorly stabilized numerical solution can be rejected even when its endpoint looks directional. The bounded mean score feeds the shared entry and exit system. Maximum holding duration is eighteen hourly bars. The optimization is approximate because the inner quadratic problem is solved iteratively, and the iteration budget is finite. The reported change residual is a practical monitor, not a complete proof of optimality or a statistical confidence interval. Endpoint estimates can lag reversals, and piecewise-linear fitting can interpret a temporary excursion as a new trend segment. Dependence across the three penalties is substantial because they use the same observations. Synthetic sign and state-restoration tests help detect implementation errors, but market-data walk-forward evaluation must still examine numerical convergence, trading costs, signal latency, and robustness to abrupt structural breaks.
// TS18_SparseTrendFilter: Sparse-curvature convex trend filter.
// Standalone model implementation with embedded safety and engine code.
// Market scope: EUR/USD completed-hour return aggregation horizons.
// These are not actual bond maturities or a futures calendar spread.
// Model diagnostic: regularization-path endpoint disagreement.
// Quality heuristic: Primal/dual residual stability and penalty agreement.
// Limitation: Finite-iteration ADMM is approximate. The residual gate is a numerical safeguard, not a confidence interval.
// No claim of profitability, calibration, or independent strategy returns.
// Inputs: 256 newest-first log returns; all must be finite and within [-1,1].
// Output: bounded signed edge; positive buys, negative sells, zero abstains.
// Quality is a heuristic filter, never a calibrated success probability.
// The synthetic suite below is included in the total file line count.
// Regenerate with build_sources.py; compare hashes before deployment.
#include <default.c>
string TS2Algo = "TS18";
string TS2TestLog = "Log/TS18_SparseTrendFilter_test.txt";
int TS2Holding = 18;
// R1/R3: IEEE-754 finite validation without lite-C unordered comparisons.
// Supported Zorro Windows targets use 64-bit var and little-endian 32-bit int.
int TSIsFinite(var Value)
{
int Words[2];
memcpy(Words, &Value, sizeof(Value));
return (Words[1] & 0x7ff00000) != 0x7ff00000;
}
// Forex commission per lot; negative quotes are percent, not cash rebates.
// Return -1 on invalid metadata rather than accepting an unknown risk amount.
var TSFeePerLot(var FeeQuote, var UnitsPerLot, var PipSize, var PipValue, var RefPrice)
{
var FeeValue;
if (!TSIsFinite(FeeQuote) || !TSIsFinite(UnitsPerLot) || !TSIsFinite(PipSize) ||
!TSIsFinite(PipValue) || !TSIsFinite(RefPrice))
return -1.;
if (!(UnitsPerLot > 0.) || !(PipSize > 0.) || !(PipValue > 0.) || !(RefPrice > 0.))
return -1.;
if (FeeQuote >= 0.)
FeeValue = FeeQuote * UnitsPerLot / 10000.;
else
FeeValue = (-FeeQuote / 100.) * (PipValue / PipSize) * RefPrice;
if (!TSIsFinite(FeeValue) || FeeValue < 0.)
return -1.;
return FeeValue;
}
var TSUnitStopRisk(var RefPrice)
{
var FeeValue, FeePrice, StopRisk;
if (!TSIsFinite(RefPrice) || !(RefPrice > 0.) || !TSIsFinite(Stop) || !(Stop > 0.) ||
!TSIsFinite(Spread) || !TSIsFinite(Balance) || !TSIsFinite(Equity) ||
!TSIsFinite(MarginCost) || !TSIsFinite(MarginVal))
return -1.;
if (!(Balance > 0.) || !(Equity > 0.) || !(MarginCost > 0.))
return -1.;
// Conservative percentage-fee price through the stop, absent gaps/slippage.
FeePrice = RefPrice + abs(Spread) + Stop;
FeeValue = TSFeePerLot(Commission, LotAmount, PIP, PIPCost, FeePrice);
if (FeeValue < 0.)
return -1.;
StopRisk = (Stop + abs(Spread)) / PIP * PIPCost + FeeValue;
if (!TSIsFinite(StopRisk) || !(StopRisk > 0.))
return -1.;
return StopRisk;
}
// Embedded input, state, and test contracts; identical safety is not novel alpha.
#define TS2_N 256
var TS2Returns[256];
var TS2Quality;
var TS2Statistic;
var TS2Raw;
int TS2Checks;
int TS2Failures;
var TS2Model();
var TS2Bound(var Value)
{
if (!TSIsFinite(Value))
return 0.;
return max(-1., min(1., Value));
}
var TS2Evaluate()
{
int Index;
var Energy;
TS2Quality = 0.;
TS2Statistic = 0.;
TS2Raw = 0.;
Energy = 0.;
for (Index = 0; Index < TS2_N; Index++)
{
if (!TSIsFinite(TS2Returns[Index]))
return 0.;
if (abs(TS2Returns[Index]) > 1.)
return 0.;
Energy += TS2Returns[Index] * TS2Returns[Index];
}
if (Energy < 1.e-24)
return 0.;
TS2Raw = TS2Model();
if (!TSIsFinite(TS2Raw) || abs(TS2Raw) > 1.e12 ||
!TSIsFinite(TS2Quality) || !TSIsFinite(TS2Statistic))
{
TS2Quality = 0.;
TS2Statistic = 0.;
TS2Raw = 0.;
return 0.;
}
TS2Quality = max(0., min(1., TS2Quality));
return TS2Bound(TS2Raw);
}
void TS2Expect(int Passed, string Label)
{
TS2Checks++;
if (!Passed)
{
TS2Failures++;
file_append(TS2TestLog, strf("FAIL: %s\n", Label));
}
}
// BEGIN ANALYTICAL MODEL
// Solve squared-error plus L1 second-difference penalty by ADMM.
// Three independently optimized penalties form a trend regularization path.
var TS2Model()
{
var Data[64], Fit[64], Z[62], Dual[62], Gradient[64], Next[64];
var Penalties[3] = {0.4, 1.2, 3.6};
var Energy, Unit, Lambda, Rho, Difference, Shifted, Change;
var Primal, DualChange, PreviousZ, Slope, Curvature, Score, Stability;
var Scores[3], Error, Step, Objective, LastObjective;
int Index, Iteration, Scale, Sweep;
Data[0] = 0.; Energy = 0.;
for (Index = 1; Index < 64; Index++)
Data[Index] = Data[Index - 1] + TS2Returns[63 - Index];
for (Index = 0; Index < 64; Index++)
Energy += TS2Returns[Index] * TS2Returns[Index] / 64.;
Unit = sqrt(Energy);
if (Unit < 1.e-16)
return 0.;
for (Index = 0; Index < 64; Index++)
Data[Index] /= Unit;
Stability = 1.;
for (Scale = 0; Scale < 3; Scale++)
{
Lambda = Penalties[Scale];
Rho = 1.;
Step = 1. / 18.;
for (Index = 0; Index < 64; Index++)
Fit[Index] = Data[Index];
for (Index = 0; Index < 62; Index++)
{
Z[Index] = Fit[Index] - 2. * Fit[Index + 1] + Fit[Index + 2];
Dual[Index] = 0.;
}
// Fixed iteration budget; residuals explicitly gate the output.
for (Iteration = 0; Iteration < 160; Iteration++)
{
for (Sweep = 0; Sweep < 8; Sweep++)
{
for (Index = 0; Index < 64; Index++)
Gradient[Index] = Fit[Index] - Data[Index];
for (Index = 0; Index < 62; Index++)
{
Difference = Fit[Index] - 2. * Fit[Index + 1] + Fit[Index + 2];
Shifted = Rho * (Difference - Z[Index] + Dual[Index]);
Gradient[Index] += Shifted;
Gradient[Index + 1] -= 2. * Shifted;
Gradient[Index + 2] += Shifted;
}
for (Index = 0; Index < 64; Index++)
Next[Index] = Fit[Index] - Step * Gradient[Index];
for (Index = 0; Index < 64; Index++)
Fit[Index] = Next[Index];
}
Primal = 0.; DualChange = 0.;
for (Index = 0; Index < 62; Index++)
{
Difference = Fit[Index] - 2. * Fit[Index + 1] + Fit[Index + 2];
Shifted = Difference + Dual[Index];
PreviousZ = Z[Index];
Z[Index] = max(0., Shifted - Lambda / Rho) - max(0., -Shifted - Lambda / Rho);
Dual[Index] += Difference - Z[Index];
Primal += pow(Difference - Z[Index], 2.);
DualChange += pow(Z[Index] - PreviousZ, 2.);
}
if (Primal < 1.e-8 && DualChange < 1.e-8)
break;
}
Error = 0.;
for (Index = 0; Index < 64; Index++)
Error += pow(Fit[Index] - Data[Index], 2.) / 64.;
Slope = (Fit[63] - Fit[57]) / 6.;
Curvature = Fit[63] - 2. * Fit[60] + Fit[57];
Scores[Scale] = Slope / sqrt(1. + Error + Slope * Slope);
Stability = min(Stability, 1. / (1. + sqrt(Primal + DualChange)));
}
Score = (Scores[0] + Scores[1] + Scores[2]) / 3.;
TS2Statistic = abs(Scores[0] - Scores[2]);
TS2Quality = Stability / (1. + 4. * TS2Statistic);
if (Scores[0] * Scores[2] <= 0.)
return 0.;
return TS2Bound(Score);
}
// END ANALYTICAL MODEL
// Separate repair regression log; the original suite counts stay intact.
int TSRepairChecks = 0;
int TSRepairFailures = 0;
string TSRepairLog = "Log/TS18_SparseTrendFilter_repair.txt";
void TSRepairCheck(int Passed, string Label)
{
TSRepairChecks++;
if (!Passed)
{
TSRepairFailures++;
file_append(TSRepairLog, strf("FAIL: %s\n", Label));
}
}
var TSRepairBad(int Kind)
{
int Bits[2];
var Value;
Bits[0] = 0;
Bits[1] = 0x7ff80000;
if (Kind == 1) Bits[1] = 0x7ff00000;
if (Kind == 2) Bits[1] = 0xfff00000;
memcpy(&Value, Bits, sizeof(Value));
return Value;
}
void TSRepairTests()
{
int I, Kind, Position;
var FeeValue, UnitLoss, Budget;
TSRepairChecks = 0; TSRepairFailures = 0;
file_write(TSRepairLog, "Repairs R1-R5: native-safe regression suite\n", 0);
TSRepairCheck(sizeof(FeeValue) == 8, "64-bit var representation");
TSRepairCheck(TSIsFinite(0.), "finite zero");
TSRepairCheck(TSIsFinite(1.), "finite positive");
TSRepairCheck(TSIsFinite(-1.), "finite negative");
for (Kind = 0; Kind < 3; Kind++)
TSRepairCheck(!TSIsFinite(TSRepairBad(Kind)), "reject NaN and both infinities");
TSRepairCheck(abs(TSFeePerLot(0.7, 1000., 0.0001, 0.1, 1.1) - 0.07) < 1.e-6,
"cash commission convention");
TSRepairCheck(TSFeePerLot(0., 1000., 0.0001, 0.1, 1.1) == 0., "zero commission");
FeeValue = TSFeePerLot(-0.02, 1000., 0.0001, 0.1, 1.1);
TSRepairCheck(abs(FeeValue - 0.22) < 1.e-6, "percentage commission convention");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0., 0.1, 1.1) < 0., "invalid pip size");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0.0001, 0., 1.1) < 0., "invalid pip value");
TSRepairCheck(TSFeePerLot(0.7, 0., 0.0001, 0.1, 1.1) < 0., "invalid lot amount");
TSRepairCheck(TSFeePerLot(0.7, 1000., 0.0001, 0.1, -1.) < 0., "invalid fee price");
TSRepairCheck(TSFeePerLot(TSRepairBad(0), 1000., 0.0001, 0.1, 1.1) < 0., "NaN fee quote");
TSRepairCheck(TSFeePerLot(-0.02, 1000., 0.0001, 0.1, TSRepairBad(1)) < 0., "infinite fee price");
TSRepairCheck(TSFeePerLot(-0.02, 1000., TSRepairBad(0), 0.1, 1.1) < 0., "NaN pip metadata");
UnitLoss = (20. * 0.0001 + 0.0001) / 0.0001 * 0.1 + FeeValue;
Budget = 850. * 0.0025;
TSRepairCheck(floor(Budget / UnitLoss) == 0., "percentage fee respects lot-rounding budget");
for (Kind = 0; Kind < 3; Kind++)
{
for (Position = 0; Position < 2; Position++)
{
for (I = 0; I < 256; I++) TS2Returns[I] = 0.0005 + 0.0001 * sin(0.3 * I);
TS2Returns[Position] = TSRepairBad(Kind);
TSRepairCheck(TS2Evaluate() == 0, "non-finite consumed input rejected");
TSRepairCheck(TS2Quality == 0., "invalid return clears quality");
}
}
file_append(TSRepairLog, strf("RESULT: %d checks; %d failures\n", TSRepairChecks, TSRepairFailures));
}
// Synthetic property tests: executed only with -d TS2_SELFTEST.
// Tests do not execute trades, query market data, or establish profitability.
// Known-response anchor: not just a generic bounded-output assertion.
void TS2KnownResponse()
{
int I;
var Edge, Negative;
for (I = 0; I < 256; I++)
TS2Returns[I] = 0.0005;
Edge = TS2Evaluate();
TS2Expect(abs(Edge - 1. / sqrt(2.)) < 1.e-7, "known straight path: model-specific response");
for (I = 0; I < 256; I++)
TS2Returns[I] = -0.0005;
Negative = TS2Evaluate();
TS2Expect(abs(Edge + Negative) < 1.e-7, "known straight path: symmetric response");
}
// Case 1: slow_sine; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case1()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0008 * sin(0.07 * I);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "slow_sine: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "slow_sine: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "slow_sine: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "slow_sine: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "slow_sine: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "slow_sine: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[18] = 2.;
TS2Expect(TS2Evaluate() == 0., "slow_sine: implausible return rejected");
TS2Expect(TS2Quality == 0., "slow_sine: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "slow_sine: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "slow_sine: quality restored");
}
// Case 2: fast_sine; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case2()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0012 * sin(1.1 * I);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "fast_sine: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "fast_sine: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "fast_sine: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "fast_sine: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "fast_sine: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "fast_sine: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[55] = 2.;
TS2Expect(TS2Evaluate() == 0., "fast_sine: implausible return rejected");
TS2Expect(TS2Quality == 0., "fast_sine: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "fast_sine: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "fast_sine: quality restored");
}
// Case 3: two_scale_beating; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case3()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0009 * sin(0.18 * I) + 0.0007 * sin(0.21 * I);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "two_scale_beating: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "two_scale_beating: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "two_scale_beating: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "two_scale_beating: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "two_scale_beating: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "two_scale_beating: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[92] = 2.;
TS2Expect(TS2Evaluate() == 0., "two_scale_beating: implausible return rejected");
TS2Expect(TS2Quality == 0., "two_scale_beating: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "two_scale_beating: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "two_scale_beating: quality restored");
}
// Case 4: amplitude_burst; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case4()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0004 * sin(0.31 * I) * (1. + 3. * exp(-pow((I - 28.) / 8., 2.)));
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "amplitude_burst: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "amplitude_burst: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "amplitude_burst: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "amplitude_burst: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_burst: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "amplitude_burst: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[129] = 2.;
TS2Expect(TS2Evaluate() == 0., "amplitude_burst: implausible return rejected");
TS2Expect(TS2Quality == 0., "amplitude_burst: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "amplitude_burst: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "amplitude_burst: quality restored");
}
// Case 5: chirp_acceleration; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case5()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(0.0018 * I * I + 0.05 * I);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "chirp_acceleration: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "chirp_acceleration: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "chirp_acceleration: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "chirp_acceleration: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_acceleration: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "chirp_acceleration: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[166] = 2.;
TS2Expect(TS2Evaluate() == 0., "chirp_acceleration: implausible return rejected");
TS2Expect(TS2Quality == 0., "chirp_acceleration: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "chirp_acceleration: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_acceleration: quality restored");
}
// Case 6: chirp_deceleration; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case6()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.001 * sin(7. * sqrt(I + 1.));
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "chirp_deceleration: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "chirp_deceleration: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "chirp_deceleration: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "chirp_deceleration: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_deceleration: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "chirp_deceleration: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[203] = 2.;
TS2Expect(TS2Evaluate() == 0., "chirp_deceleration: implausible return rejected");
TS2Expect(TS2Quality == 0., "chirp_deceleration: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "chirp_deceleration: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "chirp_deceleration: quality restored");
}
// Case 7: positive_drift_noise; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case7()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0003 + 0.0009 * sin(0.77 * I);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "positive_drift_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "positive_drift_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "positive_drift_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "positive_drift_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "positive_drift_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "positive_drift_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[240] = 2.;
TS2Expect(TS2Evaluate() == 0., "positive_drift_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "positive_drift_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "positive_drift_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "positive_drift_noise: quality restored");
}
// Case 8: negative_drift_noise; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case8()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = -0.0003 + 0.0009 * sin(0.77 * I);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "negative_drift_noise: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "negative_drift_noise: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "negative_drift_noise: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "negative_drift_noise: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "negative_drift_noise: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "negative_drift_noise: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[21] = 2.;
TS2Expect(TS2Evaluate() == 0., "negative_drift_noise: implausible return rejected");
TS2Expect(TS2Quality == 0., "negative_drift_noise: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "negative_drift_noise: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "negative_drift_noise: quality restored");
}
// Case 9: mixed_frequency_drift; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case9()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = 0.0002 + 0.0006 * sin(0.23 * I) + 0.0004 * cos(1.37 * I);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "mixed_frequency_drift: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "mixed_frequency_drift: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "mixed_frequency_drift: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "mixed_frequency_drift: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "mixed_frequency_drift: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "mixed_frequency_drift: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[58] = 2.;
TS2Expect(TS2Evaluate() == 0., "mixed_frequency_drift: implausible return rejected");
TS2Expect(TS2Quality == 0., "mixed_frequency_drift: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "mixed_frequency_drift: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "mixed_frequency_drift: quality restored");
}
// Case 10: alternating_sign; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case10()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 2 == 0, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "alternating_sign: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "alternating_sign: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "alternating_sign: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "alternating_sign: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "alternating_sign: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "alternating_sign: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[95] = 2.;
TS2Expect(TS2Evaluate() == 0., "alternating_sign: implausible return rejected");
TS2Expect(TS2Quality == 0., "alternating_sign: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "alternating_sign: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "alternating_sign: quality restored");
}
// Case 11: three_bar_blocks; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case11()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 6 < 3, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "three_bar_blocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "three_bar_blocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "three_bar_blocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "three_bar_blocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "three_bar_blocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "three_bar_blocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[132] = 2.;
TS2Expect(TS2Evaluate() == 0., "three_bar_blocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "three_bar_blocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "three_bar_blocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "three_bar_blocks: quality restored");
}
// Case 12: five_bar_blocks; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case12()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I % 10 < 5, 0.001, -0.001);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "five_bar_blocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "five_bar_blocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "five_bar_blocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "five_bar_blocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "five_bar_blocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "five_bar_blocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[169] = 2.;
TS2Expect(TS2Evaluate() == 0., "five_bar_blocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "five_bar_blocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "five_bar_blocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "five_bar_blocks: quality restored");
}
// Case 13: one_sided_steps; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case13()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 24, 0.001, 0.0001) + 0.0001 * sin(I);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "one_sided_steps: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "one_sided_steps: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "one_sided_steps: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "one_sided_steps: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "one_sided_steps: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "one_sided_steps: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[206] = 2.;
TS2Expect(TS2Evaluate() == 0., "one_sided_steps: implausible return rejected");
TS2Expect(TS2Quality == 0., "one_sided_steps: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "one_sided_steps: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "one_sided_steps: quality restored");
}
// Case 14: late_reversal; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case14()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 12, -0.0008, 0.0005) + 0.0002 * cos(0.7 * I);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "late_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "late_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "late_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "late_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "late_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "late_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[243] = 2.;
TS2Expect(TS2Evaluate() == 0., "late_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "late_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "late_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "late_reversal: quality restored");
}
// Case 15: middle_reversal; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case15()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 64, 0.0006, -0.0004) + 0.0002 * sin(0.43 * I);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "middle_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "middle_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "middle_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "middle_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "middle_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "middle_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[24] = 2.;
TS2Expect(TS2Evaluate() == 0., "middle_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "middle_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "middle_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "middle_reversal: quality restored");
}
// Case 16: old_reversal; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case16()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I < 160, 0.0004, -0.0007) + 0.0001 * cos(0.91 * I);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "old_reversal: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "old_reversal: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "old_reversal: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "old_reversal: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_reversal: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "old_reversal: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[61] = 2.;
TS2Expect(TS2Evaluate() == 0., "old_reversal: implausible return rejected");
TS2Expect(TS2Quality == 0., "old_reversal: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "old_reversal: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "old_reversal: quality restored");
}
// Case 17: volatility_expansion; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case17()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = (0.0002 + 0.001 * exp(-0.015 * I)) * sin(0.81 * I);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "volatility_expansion: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "volatility_expansion: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "volatility_expansion: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "volatility_expansion: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_expansion: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "volatility_expansion: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[98] = 2.;
TS2Expect(TS2Evaluate() == 0., "volatility_expansion: implausible return rejected");
TS2Expect(TS2Quality == 0., "volatility_expansion: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "volatility_expansion: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_expansion: quality restored");
}
// Case 18: volatility_contraction; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case18()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = (0.0002 + 0.000004 * I) * sin(0.81 * I);
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "volatility_contraction: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "volatility_contraction: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "volatility_contraction: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "volatility_contraction: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_contraction: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "volatility_contraction: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[135] = 2.;
TS2Expect(TS2Evaluate() == 0., "volatility_contraction: implausible return rejected");
TS2Expect(TS2Quality == 0., "volatility_contraction: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "volatility_contraction: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "volatility_contraction: quality restored");
}
// Case 19: isolated_recent_up; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case19()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 3, 0.008, 0.0002 * sin(0.61 * I));
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "isolated_recent_up: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "isolated_recent_up: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "isolated_recent_up: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "isolated_recent_up: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_up: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "isolated_recent_up: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[172] = 2.;
TS2Expect(TS2Evaluate() == 0., "isolated_recent_up: implausible return rejected");
TS2Expect(TS2Quality == 0., "isolated_recent_up: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "isolated_recent_up: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_up: quality restored");
}
// Case 20: isolated_recent_down; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case20()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 3, -0.008, 0.0002 * sin(0.61 * I));
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "isolated_recent_down: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "isolated_recent_down: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "isolated_recent_down: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "isolated_recent_down: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_down: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "isolated_recent_down: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[209] = 2.;
TS2Expect(TS2Evaluate() == 0., "isolated_recent_down: implausible return rejected");
TS2Expect(TS2Quality == 0., "isolated_recent_down: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "isolated_recent_down: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "isolated_recent_down: quality restored");
}
// Case 21: paired_opposite_shocks; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case21()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 7, 0.006, ifelse(I == 11, -0.006, 0.0001 * cos(I)));
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "paired_opposite_shocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "paired_opposite_shocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "paired_opposite_shocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "paired_opposite_shocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_opposite_shocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "paired_opposite_shocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[246] = 2.;
TS2Expect(TS2Evaluate() == 0., "paired_opposite_shocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "paired_opposite_shocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "paired_opposite_shocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_opposite_shocks: quality restored");
}
// Case 22: paired_same_shocks; model 18 perturbation phase 2.466000.
// Covers numerical stability and directional symmetry on this path family.
void TS2Case22()
{
var Snapshot[256], Original, Repeated, Reflected, Restored;
var InitialQuality, InitialStatistic;
int I;
for (I = 0; I < 256; I++)
{
TS2Returns[I] = ifelse(I == 7 || I == 11, 0.006, 0.0001 * cos(I));
TS2Returns[I] += 0.00000003 * sin(2.466000 + I * 0.424000);
Snapshot[I] = TS2Returns[I];
}
Original = TS2Evaluate();
InitialQuality = TS2Quality;
InitialStatistic = TS2Statistic;
TS2Expect(Original == Original && abs(Original) <= 1., "paired_same_shocks: finite bounded edge");
TS2Expect(InitialQuality >= 0. && InitialQuality <= 1., "paired_same_shocks: quality contract");
TS2Expect(InitialStatistic == InitialStatistic && abs(InitialStatistic) < 1.e12, "paired_same_shocks: finite diagnostic");
Repeated = TS2Evaluate();
TS2Expect(abs(Repeated - Original) < 1.e-9, "paired_same_shocks: deterministic evaluation");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_same_shocks: deterministic quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = -Snapshot[I];
Reflected = TS2Evaluate();
TS2Expect(abs(Reflected + Original) < 1.e-7, "paired_same_shocks: directional reflection");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
TS2Returns[27] = 2.;
TS2Expect(TS2Evaluate() == 0., "paired_same_shocks: implausible return rejected");
TS2Expect(TS2Quality == 0., "paired_same_shocks: rejected sample clears quality");
for (I = 0; I < 256; I++)
TS2Returns[I] = Snapshot[I];
Restored = TS2Evaluate();
TS2Expect(abs(Restored - Original) < 1.e-9, "paired_same_shocks: restored input has no stale state");
TS2Expect(abs(TS2Quality - InitialQuality) < 1.e-9, "paired_same_shocks: quality restored");
}
|
|
|
|