initial version

This commit is contained in:
2016-01-21 11:10:55 +01:00
parent 8818a9b216
commit a7dc0cabbb
21 changed files with 1397 additions and 0 deletions

14
tests/Tests.h Executable file
View File

@@ -0,0 +1,14 @@
#ifndef TESTS_H
#define TESTS_H
#ifdef WITH_TESTS
#include <gtest/gtest.h>
static inline std::string getDataFile(const std::string& name) {
return "/mnt/firma/kunden/indoor/tests/data/" + name;
}
#endif
#endif // TESTS_H

402
tests/data/test.svg Executable file
View File

@@ -0,0 +1,402 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
id="svg3269"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="test.svg">
<defs
id="defs3271" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.98994949"
inkscape:cx="145.84558"
inkscape:cy="284.04468"
inkscape:document-units="px"
inkscape:current-layer="layer16"
showgrid="false"
inkscape:window-width="1366"
inkscape:window-height="672"
inkscape:window-x="0"
inkscape:window-y="33"
inkscape:window-maximized="1" />
<metadata
id="metadata3274">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="1"
style="display:inline">
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 204.28571,352.71429 141.42858,1.42857"
id="path4093"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 339.28571,372.71429 -0.71428,-71.42858"
id="path4095"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 329.28571,302.71429 84.28572,75.71428"
id="path4097"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 423.57143,363.42857 -67.85714,59.28572"
id="path4099"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 362.85714,441.28571 -5.71428,-45.71428"
id="path4101"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 365.71429,397 222.85714,407"
id="path4103"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 235.71429,429.85714 222.14286,333.42857"
id="path4105"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 195,109.14286 320,237.71429"
id="path4107"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 297.14286,237.71429 424.66569,149.83612"
id="path4109"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 417.24799,166.28571 370.71429,54.142857"
id="path4111"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 390.71429,49.857142 345,151.28571"
id="path4113"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 366.0522,143.55112 183.57143,119.85714"
id="path4115"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 40.714286,63.428571 74.285714,190.57143"
id="path4117"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 58.571429,184.14286 130.71429,92.714285"
id="path4119"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 146.42857,109.85714 35.714286,69.142857"
id="path4121"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 26.428571,295.57143 133.57143,202.71429"
id="path4123"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 118.57143,194.85714 50,87.85715"
id="path4125"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 150.71429,289.85714 75.71428,-50"
id="path4127"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 212.85714,238.42857 35,42.14286"
id="path4129"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 255,269.85714 155,326.28571"
id="path4131"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 166.42857,309.85714 143.57143,452"
id="path4133"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 165.71429,447 59.683107,422.43945"
id="path4135"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 77.591012,449.2654 32.857143,277"
id="path4137"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 6.0609153,9.954185 10.101525,502.90863"
id="path4139"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -7.0710678,495.83756 526.2894778,2.0203"
id="path4141"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 507.09658,520.08122 503.05597,-4.1879507"
id="path4143"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 527.29963,10.964338 -17.172593,16.0151"
id="path4145"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 361.63461,259.46186 102.02541,59.599"
id="path3780"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 353.55339,277.64461 509.11688,207.94408"
id="path3782"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 445.47727,326.13193 498.00521,202.89332"
id="path3784"
inkscape:connector-curvature="0" />
</g>
<g
inkscape:groupmode="layer"
id="layer15"
inkscape:label="2"
style="display:inline">
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 29.294424,91.77654 139.40105,29.147082"
id="path13690"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 117.1777,22.076014 43.43656,83.842666"
id="path13692"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 27.274119,80.664862 180.81731,98.847608"
id="path13694"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 33.335034,129.15218 164.65487,159.45676"
id="path13696"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 151.52288,143.29432 36.36549,108.08632"
id="path13698"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 168.69548,249.36034 119.198,-19.1929"
id="path13700"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 271.73104,224.10652 19.19289,66.67007"
id="path13702"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 318.19805,274.61415 127.27922,335.2233"
id="path13704"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 144.45181,347.34513 38.385797,124.10142"
id="path13706"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 248.49753,73.593794 279.81226,185.72073"
id="path13708"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 257.5889,183.70042 406.08132,149.35524"
id="path13710"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 240.41631,79.654709 375.77675,59.451658"
id="path13712"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 363.65492,48.33998 41.41625,115.15739"
id="path13714"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 366.68538,465.53298 446.48743,354.4162"
id="path13716"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 425.27422,352.3959 48.48733,91.92388"
id="path13718"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 359.61431,444.31978 484.87322,434.21825"
id="path13720"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 38.385797,387.75124 161.62441,483.71573"
id="path13722"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 43.43656,395.83246 136.37059,1.01015"
id="path13724"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 159.6041,383.71063 61.61931,62.62945"
id="path13726"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 148.49242,487.75634 84.85282,-57.5787"
id="path13728"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 269.71073,361.48727 20.20305,51.51778"
id="path13730"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 261.62951,371.5888 74.75129,-3.03046"
id="path13732"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 273.75134,420.07612 60.60915,-69.70053"
id="path13734"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 383.85797,231.17759 473.76155,154.406"
id="path13736"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 458.60926,156.4263 33.33503,83.84266"
id="path13738"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 445.47727,292.7969 493.9646,223.09637"
id="path13740"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 384.86812,217.03546 79.80205,80.8122"
id="path13742"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 433.35544,23.086167 59.599,2.020305"
id="path13744"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 484.87322,21.065862 -3.03045,45.456864"
id="path13746"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 438.40621,17.025251 58.58884,49.497475"
id="path13748"
inkscape:connector-curvature="0" />
</g>
<g
inkscape:groupmode="layer"
id="layer16"
inkscape:label="1_2">
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 406.08132,60.461811 443.45697,135.2131 476.792,119.05066 439.41636,51.370438 406.08132,60.461811"
id="path13751"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 243.44676,440.27917 8.08122,42.42641 80.81221,-2.02031 1.01015,-40.4061 -89.90358,0"
id="path13753"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 185.86807,167.53798 12.12183,51.51778 41.41625,-10.10152 -14.14213,-51.51778 -39.39595,10.10152"
id="path13755"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
</g>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="path"
style="display:none">
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 23.233509,328.15223 5.498667,29.84991 5.04738,38.94466 5.726216,27.35837 6.778541,32.38611 10.28423,17.93307 19.192898,6.06092 21.213204,-2.0203 21.213205,1.01015 26.26396,0 24.24367,-9.09137 15.15228,-16.16245 6.06092,-22.22335 -2.02031,-26.26397 0,-25.25381 3.03046,-27.27412 6.06092,-18.18275 20.20305,-19.19289 28.28427,-11.11168 25.25381,-6.06092 19.1929,-14.14213 -4.04061,-28.28427 -13.13198,-27.27412 -22.22336,-11.11168 -24.24366,-6.06092 -24.24366,-12.12183 -20.20305,-13.13198 -11.11168,-22.22336 -3.03046,-25.25381 8.08122,-32.32488 13.13199,-23.23351 25.25381,-16.162441 26.26397,-14.142136 27.27412,-7.071068 27.27411,-4.04061 35.35534,-5.050763 25.25382,-7.071068 27.27412,-2.020305 20.20305,13.131983 23.23351,16.162441 27.27411,12.121831 22.22336,15.152288 5.05076,30.304578 -6.43065,37.00542 -18.34108,26.88819 -31.1166,16.74083 -31.95699,18.46513 -36.0808,17.41488 -23.9052,28.67296 10.79173,29.03585 29.28066,13.55625 26.653,8.13847 27.19771,14.80725 13.80025,29.23264 -4.56452,29.55883 -18.1487,24.13104 -18.94412,26.82052 -22.51132,18.63377 -32.37271,9.74766 -30.9338,4.32323 -31.41691,-1.63983"
id="path3778"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -0,0 +1,27 @@
#ifdef WITH_TESTS
//#include "../Tests.h"
//#include "../../floorplan/FloorplanFactorySVG.h"
//#include <cstdlib>
//TEST(FloorplanFactorySVG, parse) {
// const std::string filename = getDataFile("test.svg");
// FloorplanFactorySVG factory(filename, 1.0);
// Floor f1 = factory.getFloor("1");
// ASSERT_EQ(30, f1.getObstacles().size());
// Floor f2 = factory.getFloor("2");
// ASSERT_EQ(30, f2.getObstacles().size());
// Floor f3 = factory.getFloor("1_2");
// ASSERT_EQ(12, f3.getObstacles().size());
//}
#endif

21
tests/geo/TestAngle.cpp Executable file
View File

@@ -0,0 +1,21 @@
#ifdef WITH_TESTS
#include "../Tests.h"
#include "../../geo/Angle.h"
TEST(Angle, calc) {
ASSERT_EQ(0, Angle::getDEG(0,0, +1,0)); // to the right
ASSERT_EQ(90, Angle::getDEG(0,0, 0,+1)); // upwards
ASSERT_EQ(180, Angle::getDEG(0,0, -1,0)); // to the left
ASSERT_EQ(270, Angle::getDEG(0,0, 0,-1)); // downwards
ASSERT_EQ(45, Angle::getDEG(0,0, +1,+1)); // to the upper right
ASSERT_EQ(135, Angle::getDEG(0,0, -1,+1)); // to the upper left
ASSERT_EQ(225, Angle::getDEG(0,0, -1,-1)); // to the lower left
ASSERT_EQ(315, Angle::getDEG(0,0, +1,-1)); // to the lower right
}
#endif

47
tests/grid/TestBBox.cpp Executable file
View File

@@ -0,0 +1,47 @@
#ifdef WITH_TESTS
#include "../Tests.h"
#include "../../grid/GridNodeBBox.h"
TEST(BBox, equals) {
GridNodeBBox bb1(GridPoint(2,2,2), 2);
GridNodeBBox bb2(GridPoint(2,2,2), 2);
GridNodeBBox bb3(GridPoint(3,2,2), 2);
GridNodeBBox bb4(GridPoint(2,3,2), 2);
GridNodeBBox bb5(GridPoint(2,2,3), 2);
GridNodeBBox bb6(GridPoint(2,2,2), 4);
ASSERT_TRUE(bb1 == bb2);
ASSERT_TRUE(bb1 == bb5); // z doesnt matter for the bbox
ASSERT_FALSE(bb1 == bb3);
ASSERT_FALSE(bb1 == bb4);
ASSERT_FALSE(bb1 == bb6);
}
TEST(BBox, intersect) {
GridNodeBBox bb1(GridPoint(20,20,20), 20);
// left
ASSERT_FALSE(bb1.intersects( Line2D(9, -999, 9, +999) ));
ASSERT_TRUE (bb1.intersects( Line2D(11, -999, 11, +999) ));
// right
ASSERT_TRUE (bb1.intersects( Line2D(29, -999, 29, +999) ));
ASSERT_FALSE(bb1.intersects( Line2D(31, -999, 31, +999) ));
// top
ASSERT_FALSE(bb1.intersects( Line2D(-999, 9, +999, 9) ));
ASSERT_TRUE (bb1.intersects( Line2D(-999, 11, +999, 11) ));
// bottom
ASSERT_TRUE (bb1.intersects( Line2D(-999, 29, +999, 29) ));
ASSERT_FALSE(bb1.intersects( Line2D(-999, 31, +999, 31) ));
}
#endif

112
tests/grid/TestGrid.cpp Executable file
View File

@@ -0,0 +1,112 @@
#ifdef WITH_TESTS
#include "../Tests.h"
#include "../../grid/Grid.h"
#include "../../grid/GridPoint.h"
#include "../../grid/GridNode.h"
class GP : public GridNode, public GridPoint {
public:
GP() : GridNode(), GridPoint() {;}
GP(int x, int y, int z) : GridNode(), GridPoint(x,y,z) {;}
};
TEST(Grid, add) {
Grid<20, GP> grid;
ASSERT_EQ(0, grid.add(GP()));
ASSERT_EQ(1, grid.add(GP()));
ASSERT_EQ(2, grid.add(GP()));
ASSERT_EQ(3, grid.add(GP()));
// not aligned? -> error
ASSERT_THROW(grid.add(GP(10,10,10)), std::exception);
ASSERT_THROW(grid.add(GP(10,20,20)), std::exception);
ASSERT_THROW(grid.add(GP(20,10,20)), std::exception);
ASSERT_THROW(grid.add(GP(20,20,10)), std::exception);
ASSERT_EQ(4, grid.add(GP(20,20,20)));
// access
ASSERT_EQ(GP(20,20,20), grid[4]);
}
TEST(Grid, BBox) {
Grid<20, GP> grid;
int idx = grid.add(GP(40,40,40));
ASSERT_EQ(30, grid.getBBox(idx).x1_cm);
ASSERT_EQ(50, grid.getBBox(idx).x2_cm);
ASSERT_EQ(30, grid.getBBox(idx).y1_cm);
ASSERT_EQ(50, grid.getBBox(idx).y2_cm);
}
TEST(Grid, neighbors) {
Grid<1, GP> grid;
int idx1 = grid.add(GP( 0, 0, 0));
int idx2 = grid.add(GP( 0, 1, 0));
int idx3 = grid.add(GP( 0,-1, 0));
int idx4 = grid.add(GP( 1, 0, 0));
int idx5 = grid.add(GP(-1, 0, 0));
grid.connect(idx1, idx2);
grid.connect(idx1, idx3);
grid.connect(idx1, idx4);
grid.connect(idx1, idx5);
ASSERT_EQ(4, grid.getNumNeighbors(idx1));
ASSERT_EQ(1, grid.getNumNeighbors(idx2));
ASSERT_EQ(1, grid.getNumNeighbors(idx3));
ASSERT_EQ(1, grid.getNumNeighbors(idx4));
ASSERT_EQ(1, grid.getNumNeighbors(idx5));
}
TEST(Grid, uid) {
Grid<20, GP> grid;
GP gp(20,40,60);
uint64_t uid = grid.getUID(gp);
const int mask = (1 << 20) - 1; // 20-bit mask
ASSERT_EQ(3, uid >> 40 & mask); // x
ASSERT_EQ(2, uid >> 20 & mask); // y
ASSERT_EQ(1, uid >> 0 & mask); // z
}
TEST(Grid, nearest) {
Grid<20, GP> grid;
GP c1(20,20,20);
GP c2(40,40,40);
grid.add(c1);
grid.add(c2);
ASSERT_EQ(c1, grid.getNodeFor(GP(15,20,20)));
ASSERT_EQ(c1, grid.getNodeFor(GP(20,15,20)));
ASSERT_EQ(c1, grid.getNodeFor(GP(20,20,15)));
ASSERT_EQ(c1, grid.getNodeFor(GP(25,20,20)));
ASSERT_EQ(c1, grid.getNodeFor(GP(20,25,20)));
ASSERT_EQ(c1, grid.getNodeFor(GP(20,20,25)));
ASSERT_EQ(c2, grid.getNodeFor(GP(35,40,40)));
ASSERT_EQ(c2, grid.getNodeFor(GP(40,35,40)));
ASSERT_EQ(c2, grid.getNodeFor(GP(40,40,35)));
ASSERT_EQ(c2, grid.getNodeFor(GP(45,40,40)));
ASSERT_EQ(c2, grid.getNodeFor(GP(40,45,40)));
ASSERT_EQ(c2, grid.getNodeFor(GP(40,40,45)));
}
#endif

45
tests/grid/TestGridFactory.cpp Executable file
View File

@@ -0,0 +1,45 @@
#ifdef WITH_TESTS
#include "../Tests.h"
#include "../../grid/factory/GridFactory.h"
#include "../../floorplan/FloorplanFactorySVG.h"
#include <KLib/misc/gnuplot/Gnuplot.h>
#include <KLib/misc/gnuplot/GnuplotSplot.h>
#include <KLib/misc/gnuplot/GnuplotSplotElementPoints.h>
class GP : public GridNode, public GridPoint {
public:
GP() : GridNode(), GridPoint() {;}
GP(int x, int y, int z) : GridNode(), GridPoint(x,y,z) {;}
};
TEST(GridFactory, create) {
Grid<20, GP> g;
GridFactory<20, GP> gf(g);
FloorplanFactorySVG fpf(getDataFile("test.svg"), 2);
Floor f1 = fpf.getFloor("1");
gf.addFloor(f1, 0);
K::Gnuplot gp;
K::GnuplotSplot splot;
K::GnuplotSplotElementPoints points;
for (int i = 0; i < g.getNumNodes(); ++i) {
const GP& node = g[i];
points.add(K::GnuplotPoint3(node.x_cm, node.y_cm, node.z_cm));
}
splot.add(&points);
gp.draw(splot);
gp.flush();
sleep(10);
}
#endif

20
tests/grid/TestGridPoint.cpp Executable file
View File

@@ -0,0 +1,20 @@
#ifdef WITH_TESTS
#include "../Tests.h"
#include "../../grid/GridPoint.h"
TEST(GridPoint, distance) {
GridPoint p1(0,0,0);
GridPoint p2(100,0,0);
GridPoint p3(0,100,0);
GridPoint p4(0,0,100);
ASSERT_EQ(1, p1.getDistanceInMeter(p2));
ASSERT_EQ(1, p1.getDistanceInMeter(p3));
ASSERT_EQ(1, p1.getDistanceInMeter(p4));
}
#endif