1
0
forked from 0ad/0ad
0ad/source/graphics/tests/test_LOSTexture.h
phosit 6b31999b64 Don't use std::shared_ptr<ScriptContext> in the CSimulation2
Since 1bccfef6fb the `CSimulation2` uses the `std::shared_ptr` only in
the constructor and stores a `ScriptContext&` (inside it's members).
That's a bit dangerous: A caller might think `CSimulation2` takes
ownership of the `ScriptContext`.
With this commit the caller has to pass an `ScriptContext&` to the
constructor.

Comments By: @vladislavbelov
Differential Revision: https://code.wildfiregames.com/D5223
This was SVN commit r28046.
2024-03-08 17:15:25 +00:00

95 lines
2.9 KiB
C++

/* Copyright (C) 2024 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* 0 A.D. is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
*/
#include "lib/self_test.h"
#include "graphics/LOSTexture.h"
#include "lib/timer.h"
#include "scriptinterface/ScriptInterface.h"
#include "simulation2/Simulation2.h"
#include "simulation2/helpers/Los.h"
class TestLOSTexture : public CxxTest::TestSuite
{
public:
void test_basic()
{
CSimulation2 sim{nullptr, *g_ScriptContext, nullptr};
CLOSTexture tex(sim);
const ssize_t size = 8;
u32 inputData[size*size] = {
2, 2, 2, 0, 0, 0, 0, 0,
2, 2, 2, 0, 0, 0, 0, 0,
2, 2, 2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 2
};
Grid<u32> inputDataVec(size, size);
for (u8 i = 0; i < size; ++i)
for (u8 j = 0; j < size; ++j)
inputDataVec.set(i, j, inputData[i + j * size]);
// LosState::MASK should be cmpRanageManager->GetSharedLosMask(1),
// but that would mean adding a huge mock component for this and it
// should always be LosState::MASK for player 1 (as the other players are bit-shifted).
CLosQuerier los((u32)LosState::MASK, inputDataVec, size);
std::vector<u8> losData;
size_t pitch;
losData.resize(tex.GetBitmapSize(size, size, &pitch));
tex.GenerateBitmap(los, &losData[0], size, size, pitch);
// for (size_t i = 0; i < losData.size(); ++i)
// printf("%s %3d", i % (size_t)sqrt(losData.size()) ? "" : "\n", losData[i]);
TS_ASSERT_EQUALS(losData[0], 104);
}
void test_perf_DISABLED()
{
CSimulation2 sim{nullptr, *g_ScriptContext, nullptr};
CLOSTexture tex(sim);
const ssize_t size = 257;
Grid<u32> inputDataVec(size, size);
// LosState::MASK should be cmpRanageManager->GetSharedLosMask(1),
// but that would mean adding a huge mock component for this and it
// should always be LosState::MASK for player 1 (as the other players are bit-shifted).
CLosQuerier los((u32)LosState::MASK, inputDataVec, size);
size_t reps = 128;
double t = timer_Time();
for (size_t i = 0; i < reps; ++i)
{
std::vector<u8> losData;
size_t pitch;
losData.resize(tex.GetBitmapSize(size, size, &pitch));
tex.GenerateBitmap(los, &losData[0], size, size, pitch);
}
double dt = timer_Time() - t;
printf("\n# %f secs\n", dt/reps);
}
};