Make the tests go faster.
This commit is contained in:
parent
6d7a944a7d
commit
738d9a64d3
7 changed files with 6 additions and 222 deletions
|
|
@ -1,33 +0,0 @@
|
||||||
#include "mini_map.hpp"
|
|
||||||
#include <functional>
|
|
||||||
#include <string>
|
|
||||||
#include "dbc.hpp"
|
|
||||||
#include "game/components.hpp"
|
|
||||||
#include "algos/rand.hpp"
|
|
||||||
#include "game/systems.hpp"
|
|
||||||
#include "algos/rand.hpp"
|
|
||||||
#include <codecvt>
|
|
||||||
#include <iostream>
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
namespace gui {
|
|
||||||
using namespace components;
|
|
||||||
|
|
||||||
MiniMapUI::MiniMapUI() :
|
|
||||||
$map_grid{L"...", 45, {200, 200, 200, 100}, 10}
|
|
||||||
{
|
|
||||||
$font = std::make_shared<sf::Font>(FONT_FILE_NAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MiniMapUI::init(guecs::UI& overlay) {
|
|
||||||
auto top_right = overlay.entity("top_right");
|
|
||||||
auto cell = overlay.cell_for(top_right);
|
|
||||||
$map_grid.init(cell, $font);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MiniMapUI::render(sf::RenderWindow &window, int compass_dir) {
|
|
||||||
(void)compass_dir;
|
|
||||||
$map_grid.update(L"I'M BROKEN");
|
|
||||||
window.draw(*$map_grid.text);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
#pragma once
|
|
||||||
#include "graphics/textures.hpp"
|
|
||||||
#include <guecs/ui.hpp>
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
namespace gui {
|
|
||||||
class MiniMapUI {
|
|
||||||
public:
|
|
||||||
guecs::Text $map_grid;
|
|
||||||
guecs::UI $gui;
|
|
||||||
std::shared_ptr<sf::Font> $font = nullptr;
|
|
||||||
|
|
||||||
MiniMapUI();
|
|
||||||
void init(guecs::UI& overlay);
|
|
||||||
void render(sf::RenderWindow &window, int compass_dir);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -24,7 +24,6 @@ sources = files(
|
||||||
'gui/loot_ui.cpp',
|
'gui/loot_ui.cpp',
|
||||||
'gui/main_ui.cpp',
|
'gui/main_ui.cpp',
|
||||||
'gui/map_view.cpp',
|
'gui/map_view.cpp',
|
||||||
'gui/mini_map.cpp',
|
|
||||||
'gui/overlay_ui.cpp',
|
'gui/overlay_ui.cpp',
|
||||||
'gui/ritual_ui.cpp',
|
'gui/ritual_ui.cpp',
|
||||||
'gui/status_ui.cpp',
|
'gui/status_ui.cpp',
|
||||||
|
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
||||||
[{
|
|
||||||
"input": [
|
|
||||||
[1, 1, 1, 0],
|
|
||||||
[1, 0, 1, 1],
|
|
||||||
[1, 0, 1, 1],
|
|
||||||
[1, 1, 1, 1]
|
|
||||||
],
|
|
||||||
"walls": [
|
|
||||||
[0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0],
|
|
||||||
[0, 0, 1, 0],
|
|
||||||
[0, 0, 1, 0]
|
|
||||||
],
|
|
||||||
"expected": [
|
|
||||||
[1, 1, 1, 0],
|
|
||||||
[1, 0, 1, 1],
|
|
||||||
[1, 0, 1000, 2],
|
|
||||||
[1, 1, 1000, 3]
|
|
||||||
]
|
|
||||||
},{
|
|
||||||
"input": [
|
|
||||||
[1, 1, 1, 0],
|
|
||||||
[1, 0, 1, 1],
|
|
||||||
[1, 0, 1, 1],
|
|
||||||
[1, 1, 1, 1]
|
|
||||||
],
|
|
||||||
"walls": [
|
|
||||||
[0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0],
|
|
||||||
[0, 0, 1, 0],
|
|
||||||
[0, 0, 1, 0]
|
|
||||||
],
|
|
||||||
"expected": [
|
|
||||||
[1, 1, 1, 0],
|
|
||||||
[1, 0, 1, 1],
|
|
||||||
[1, 0, 1000, 2],
|
|
||||||
[1, 1, 1000, 3]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"input": [
|
|
||||||
[1, 1, 1, 0],
|
|
||||||
[1, 1, 1, 1],
|
|
||||||
[1, 0, 1, 1],
|
|
||||||
[1, 1, 1, 1]
|
|
||||||
],
|
|
||||||
"walls": [
|
|
||||||
[0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0],
|
|
||||||
[0, 0, 1, 0],
|
|
||||||
[0, 0, 1, 0]
|
|
||||||
],
|
|
||||||
"expected": [
|
|
||||||
[2, 2, 1, 0],
|
|
||||||
[1, 1, 1, 1],
|
|
||||||
[1, 0, 1000, 2],
|
|
||||||
[1, 1, 1000, 3]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
#include "game/systems.hpp"
|
#include "game/systems.hpp"
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include "graphics/textures.hpp"
|
#include "graphics/textures.hpp"
|
||||||
|
#include "algos/rand.hpp"
|
||||||
|
|
||||||
using namespace fmt;
|
using namespace fmt;
|
||||||
using namespace nlohmann;
|
using namespace nlohmann;
|
||||||
|
|
@ -52,34 +53,6 @@ TEST_CASE("map placement test", "[map-fail]") {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("dijkstra algo test", "[map]") {
|
|
||||||
textures::init();
|
|
||||||
json data = load_test_data("./tests/dijkstra.json");
|
|
||||||
|
|
||||||
for(auto &test : data) {
|
|
||||||
Matrix expected = test["expected"];
|
|
||||||
Matrix input = test["input"];
|
|
||||||
Matrix walls = test["walls"];
|
|
||||||
Map map(input.size(), input[0].size());
|
|
||||||
map.$walls = walls;
|
|
||||||
map.$paths.$input = input;
|
|
||||||
|
|
||||||
REQUIRE(map.INVARIANT());
|
|
||||||
|
|
||||||
map.make_paths();
|
|
||||||
Matrix &paths = map.paths();
|
|
||||||
|
|
||||||
if(paths != expected) {
|
|
||||||
println("ERROR! ------");
|
|
||||||
matrix::dump("EXPECTED", expected);
|
|
||||||
matrix::dump("RESULT", paths);
|
|
||||||
}
|
|
||||||
|
|
||||||
REQUIRE(map.INVARIANT());
|
|
||||||
// FIX ME: REQUIRE(paths == expected);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_CASE("map image test", "[map]") {
|
TEST_CASE("map image test", "[map]") {
|
||||||
GameDB::init();
|
GameDB::init();
|
||||||
|
|
||||||
|
|
@ -99,6 +72,9 @@ TEST_CASE("map image test", "[map]") {
|
||||||
System::draw_map(map_tiles, entity_map);
|
System::draw_map(map_tiles, entity_map);
|
||||||
System::render_map(map_tiles, entity_map, *render, 2, player_display);
|
System::render_map(map_tiles, entity_map, *render, 2, player_display);
|
||||||
|
|
||||||
|
// randomly test about 80% of them
|
||||||
|
if(Random::uniform(0, 100) < 20) break;
|
||||||
|
|
||||||
#ifdef TEST_RENDER
|
#ifdef TEST_RENDER
|
||||||
// confirm we get two different maps
|
// confirm we get two different maps
|
||||||
auto out_img = render->getTexture().copyToImage();
|
auto out_img = render->getTexture().copyToImage();
|
||||||
|
|
|
||||||
|
|
@ -21,64 +21,7 @@ std::shared_ptr<Map> make_map() {
|
||||||
return GameDB::current_level().map;
|
return GameDB::current_level().map;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("basic matrix iterator", "[matrix]") {
|
// BUG: create a test that randomizes a map then does matrix ops on it
|
||||||
std::ifstream infile("./tests/dijkstra.json");
|
|
||||||
json data = json::parse(infile);
|
|
||||||
auto test = data[0];
|
|
||||||
|
|
||||||
Matrix walls = test["walls"];
|
|
||||||
|
|
||||||
// tests going through straight cells but also
|
|
||||||
// using two iterators on one matrix (or two)
|
|
||||||
matrix::each_cell cells{walls};
|
|
||||||
cells.next(); // kick it off
|
|
||||||
size_t row_count = 0;
|
|
||||||
|
|
||||||
for(matrix::each_row it{walls};
|
|
||||||
it.next(); cells.next())
|
|
||||||
{
|
|
||||||
REQUIRE(walls[cells.y][cells.x] == walls[it.y][it.x]);
|
|
||||||
row_count += it.row;
|
|
||||||
}
|
|
||||||
|
|
||||||
REQUIRE(row_count == walls.size());
|
|
||||||
|
|
||||||
{
|
|
||||||
// test getting the correct height in the middle
|
|
||||||
row_count = 0;
|
|
||||||
matrix::box box{walls, 2,2, 1};
|
|
||||||
|
|
||||||
while(box.next()) {
|
|
||||||
row_count += box.x == box.left;
|
|
||||||
walls[box.y][box.x] = 3;
|
|
||||||
}
|
|
||||||
//matrix::dump("2,2 WALLS", walls, 2, 2);
|
|
||||||
|
|
||||||
REQUIRE(row_count == 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
// matrix::dump("1:1 POINT", walls, 1,1);
|
|
||||||
// confirm boxes have the right number of rows
|
|
||||||
// when x goes to 0 on first next call
|
|
||||||
row_count = 0;
|
|
||||||
matrix::box box{walls, 1, 1, 1};
|
|
||||||
|
|
||||||
while(box.next()) {
|
|
||||||
row_count += box.x == box.left;
|
|
||||||
}
|
|
||||||
REQUIRE(row_count == 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
matrix::compass star{walls, 1, 1};
|
|
||||||
while(star.next()) {
|
|
||||||
println("START IS {},{}=={}", star.x, star.y, walls[star.y][star.x]);
|
|
||||||
walls[star.y][star.x] = 11;
|
|
||||||
}
|
|
||||||
// matrix::dump("STAR POINT", walls, 1,1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void random_matrix(Matrix &out) {
|
inline void random_matrix(Matrix &out) {
|
||||||
for(size_t y = 0; y < out.size(); y++) {
|
for(size_t y = 0; y < out.size(); y++) {
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ TEST_CASE("multiple targets can path", "[pathing]") {
|
||||||
while(found == PathingResult::CONTINUE) {
|
while(found == PathingResult::CONTINUE) {
|
||||||
// fmt::println("\033[2J\033[1;1H");
|
// fmt::println("\033[2J\033[1;1H");
|
||||||
// matrix::dump(diag ? "diag" : "simple", paths.$paths, pos.x, pos.y);
|
// matrix::dump(diag ? "diag" : "simple", paths.$paths, pos.x, pos.y);
|
||||||
std::this_thread::sleep_for(200ms);
|
// std::this_thread::sleep_for(200ms);
|
||||||
found = paths.find_path(pos, PATHING_TOWARD, diag);
|
found = paths.find_path(pos, PATHING_TOWARD, diag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -51,27 +51,3 @@ TEST_CASE("multiple targets can path", "[pathing]") {
|
||||||
REQUIRE(found != PathingResult::FAIL);
|
REQUIRE(found != PathingResult::FAIL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("dijkstra algo test", "[pathing-old]") {
|
|
||||||
json data = load_test_pathing("./tests/dijkstra.json");
|
|
||||||
|
|
||||||
for(auto &test : data) {
|
|
||||||
Matrix expected = test["expected"];
|
|
||||||
Matrix walls = test["walls"];
|
|
||||||
|
|
||||||
Pathing pathing(walls[0].size(), walls.size());
|
|
||||||
|
|
||||||
pathing.$input = test["input"];
|
|
||||||
|
|
||||||
REQUIRE(pathing.INVARIANT());
|
|
||||||
int longest = pathing.compute_paths(walls);
|
|
||||||
REQUIRE(longest > 0);
|
|
||||||
REQUIRE(longest < WALL_PATH_LIMIT);
|
|
||||||
|
|
||||||
REQUIRE(pathing.INVARIANT());
|
|
||||||
|
|
||||||
matrix::dump("PATHING RESULT", pathing.$paths);
|
|
||||||
matrix::dump("PATHING EXPECTED", expected);
|
|
||||||
REQUIRE(pathing.$paths == expected);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue