Files
EVEngine/test/pcg_frame_rate_manager.cpp

28 lines
1.6 KiB
C++

#include "zeroerr/assert.h"
#include "zeroerr/unittest.h"
#include "system/PcgFrameRateManager.h"
#include "common/SquirrelBinding.h"
#include <simplesquirrel/simplesquirrel.hpp>
#include <limits>
using namespace eve::system;
TEST_CASE("system.pcgFrameRateManager.matchesSamplingAndQualityPolicy"){
PcgFrameRateManager low;REQUIRE(low.configure(60,.5f,0,5,2).ok());
for(int i=0;i<6;++i)REQUIRE(low.update(.1f,1).ok());
CHECK_EQ(low.getQuality(),1);CHECK(low.getQualityChanged());CHECK_EQ(low.getPreset().treeDistance,500.f);
PcgFrameRateManager high;REQUIRE(high.configure(60,.5f,0,5,2).ok());
for(int i=0;i<51;++i)REQUIRE(high.update(.01f,1).ok());
CHECK_EQ(high.getQuality(),3);CHECK_GE(high.getFps(),99.f);CHECK_EQ(high.getPreset().detailObjectDensity,.7f);
}
TEST_CASE("system.pcgFrameRateManager.manualAndFailureAreAtomic"){
PcgFrameRateManager m;REQUIRE(m.configure(60,10,1,4,2).ok());REQUIRE(m.selectManualQuality(4).ok());
CHECK(!m.getAutomatic());CHECK_EQ(m.getQuality(),4);CHECK(!m.selectManualQuality(5).ok());CHECK_EQ(m.getQuality(),4);
CHECK(!m.update(std::numeric_limits<float>::quiet_NaN(),1).ok());CHECK_EQ(m.getQuality(),4);
}TEST_CASE("system.pcgFrameRateManager.squirrelContract"){
ssq::VM vm(2048,ssq::Libs::ALL);auto table=vm.addTable("eve");eve::script::exposeResultBindings(table);exposePcgFrameRateManagerBindings(table);
vm.run(vm.compileSource(R"(
local m=eve.PcgFrameRateManager();assert(m.configure(60,0.5,0,5,2).ok);
for(local i=0;i<6;i++)assert(m.update(0.1,1.0).ok);
assert(m.getQuality()==1&&m.getQualityChanged());local p=m.getPreset();
assert(p.treeDistance==500.0&&p.detailObjectDensity==0.25&&p.heightmapMaximumLod==1);
)"));
}