Prepare independent successor playtest with spawn recovery and casualty feedback
This commit is contained in:
@@ -9,6 +9,7 @@ cpp = cpp.rstrip() + ';'
|
||||
run(r'''#include <cassert>
|
||||
#include <cmath>
|
||||
#include <algorithm>
|
||||
#include <initializer_list>
|
||||
struct vector {
|
||||
float v[3]={0,0,0};
|
||||
vector()=default; vector(float x,float y,float z):v{x,y,z}{}
|
||||
@@ -46,17 +47,6 @@ int main(){
|
||||
vector sideways=Rules::RampReference({2,0,0},{0,0,2},.1f);
|
||||
assert((sideways-vector{2,0,0}).Length()<=.020001f);
|
||||
assert(close(Rules::RampReference({1,4,0},{-2,0,0},0)[0],1));
|
||||
assert(close(Rules::ApproachSpeed(100,2),2)&&close(Rules::ApproachSpeed(.75f,2),0));
|
||||
assert(close(Rules::ApproachSpeed(3,2),0));
|
||||
assert(close(Rules::ApproachSpeed(Rules::BrakingReserve(1.5f),2),1.5f));
|
||||
assert(Rules::ApproachSpeed(18,2)<2); // before the2m/s reserve, unlike old sqrt(distance-.75)
|
||||
for(int i=3;i<=120;i++){
|
||||
float admitted=Rules::ApproachSpeed(float(i),2);
|
||||
assert(admitted<=2&&Rules::BrakingReserve(admitted)<=i+.00002f);
|
||||
}
|
||||
assert(Rules::ApproachSpeed(15,1.2f)<=1.2f);
|
||||
assert(Rules::ApproachSpeed(10,.1f)<=.1f&&Rules::ApproachSpeed(NAN,1)==0);
|
||||
assert(close(Rules::ApproachSpeed(108,2),2)&&Rules::ApproachSpeed(120.01f,2)==0);
|
||||
assert(!Rules::ShouldBrake(100.23f,1)&&!Rules::ShouldBrake(108,2)&&!Rules::ShouldBrake(120,2));
|
||||
assert(Rules::ShouldBrake(120.01f,1)&&!Rules::Length(108));
|
||||
vector integral, next;
|
||||
@@ -78,7 +68,21 @@ int main(){
|
||||
demand=Rules::VelocityDemand({NAN,0,0},{},{1,0,0},.1f,next);assert(demand.Length()==0&&next.Length()==0);
|
||||
demand=Rules::VelocityDemand({1,0,0},{},{1,0,0},0,next);assert(demand.Length()==0&&next.Length()==0);
|
||||
assert(close(Rules::BrakingReserve(0),3)&&close(Rules::BrakingReserve(2.5f),26.333334f));
|
||||
assert(Rules::ShouldBrake(25,0)&&!Rules::ShouldBrake(25.01f,0));
|
||||
assert(Rules::ShouldBrake(3,0)&&!Rules::ShouldBrake(3.001f,0)&&!Rules::ShouldBrake(25,0));
|
||||
for(float actualSpeed:{0.0f,.1f,.25f,1.0f,1.5f,2.0f,2.5f}){
|
||||
float reserve=Rules::BrakingReserve(actualSpeed);
|
||||
assert(Rules::ShouldBrake(reserve,actualSpeed)&&!Rules::ShouldBrake(reserve+.001f,actualSpeed));
|
||||
}
|
||||
// Stop reference never chases the destination or reverses direction.
|
||||
for(vector initial:{vector{2,0,0},vector{-1.2f,0,1.6f},vector{0,0,0}}){
|
||||
vector v=initial;
|
||||
for(int i=0;i<110;i++){
|
||||
vector nextV=Rules::RampReference(v,{},.1f);
|
||||
assert(nextV.Length()<=v.Length()+.000001f&&(nextV-v).Length()<=.020001f);
|
||||
assert(vector::Dot(nextV,initial)>=-.000001f);v=nextV;
|
||||
}
|
||||
assert(v.Length()<=.00001f);
|
||||
}
|
||||
assert(Rules::ShouldBrake(26,2.5f)&&!Rules::ShouldBrake(27,2.5f));
|
||||
assert(Rules::ShouldBrake(50,NAN)&&Rules::ShouldBrake(NAN,1));
|
||||
assert(Rules::LeaseAdmitted(1000,241000)&&Rules::LeaseAdmitted(1000,240000));
|
||||
|
||||
Reference in New Issue
Block a user