From d5bb76c53f0cab0f85448bc8a93a03346f706d04 Mon Sep 17 00:00:00 2001 From: <> Date: Sat, 6 May 2017 17:56:12 -0700 Subject: [PATCH] Added testing program and scripts for parser --- ReflexToQ3/Makefile | 10 +- ReflexToQ3/test/case-parser-face-3indices.sh | 52 ++++++++++ ReflexToQ3/test/test-parser.cpp | 102 +++++++++++++++++++ 3 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 ReflexToQ3/test/case-parser-face-3indices.sh create mode 100644 ReflexToQ3/test/test-parser.cpp diff --git a/ReflexToQ3/Makefile b/ReflexToQ3/Makefile index 9901dff..062b8b3 100644 --- a/ReflexToQ3/Makefile +++ b/ReflexToQ3/Makefile @@ -2,10 +2,16 @@ EX=reflex2q3 CC=g++ CFLAGS=-std=c++11 -I"includes" -I"/usr/include/eigen3" -all: main +all: main test main: planes.o brushdef.o oopless-parser.o - $(CC) $^ main.cpp $(CFLAGS) -DV8 -o $(EX) 2>error8.log + $(CC) $^ main.cpp $(CFLAGS) -o $(EX) 2>error8.log + +test: planes.o brushdef.o oopless-parser.o test-parser.o + $(CC) $^ $(CFLAGS) -o test/test-parser + +test-parser.o: test/test-parser.cpp + $(CC) -c $^ $(CFLAGS) oopless-parser.o: includes/oopless-parser.cpp $(CC) -c $^ $(CFLAGS) diff --git a/ReflexToQ3/test/case-parser-face-3indices.sh b/ReflexToQ3/test/case-parser-face-3indices.sh new file mode 100644 index 0000000..f0c99bb --- /dev/null +++ b/ReflexToQ3/test/case-parser-face-3indices.sh @@ -0,0 +1,52 @@ + +# Test if the parser is correctly reading in faces with 3 indices. + +# Map Versions as of : 4:26 PM 4/8/2017 +# Answers are copied from the map file. +# The program is expected to output the same string as the answer. + +# test-parser parameters +# 1. which parser to test +# 2. map file to use +# 3. line number to begin from + +function test () { + if [ "$1" == "$2" ]; then + echo "test passed" + else + echo "test failed" + echo $2 + fi +} + +ansr1=" 0.000000 0.000000 1.000000 1.000000 0.000000 5 2 7 0xffffffff common/materials/metal/aluminum + 0.000000 0.000000 1.000000 1.000000 0.000000 6 5 7 0xffffffff common/materials/metal/aluminum + 0.000000 0.000000 1.000000 1.000000 0.000000 3 1 0 4 0xffffffff common/materials/metal/aluminum + 0.000000 0.000000 1.000000 1.000000 0.000000 0 1 2 5 0xffffffff common/materials/metal/aluminum + 0.000000 0.000000 1.000000 1.000000 0.000000 4 0 5 6 0xffffffff common/materials/metal/aluminum + 0.000000 0.000000 1.000000 1.000000 0.000000 2 1 3 7 0xffffffff common/materials/metal/aluminum + 0.000000 0.000000 1.000000 1.000000 0.000000 3 4 6 7 0xffffffff common/materials/metal/aluminum" +test1=$(./test-parser --face "maps/pocket-infinity.map" 142) +test $ansr1 $test1 + +ansr2=" 0.000000 0.000000 1.000000 1.000000 0.000000 2 0 4 0xffa5a5a5 common/materials/metal/p_metal3 + 0.000000 0.000000 1.000000 1.000000 0.000000 1 3 5 0xffa5a5a5 common/materials/metal/p_metal3 + 0.000000 0.000000 1.000000 1.000000 0.000000 0 3 1 4 0xffa5a5a5 common/materials/metal/p_metal3 + 0.000000 0.000000 1.000000 1.000000 0.000000 3 0 2 5 0xffa5a5a5 common/materials/metal/p_metal3 + 0.000000 0.000000 1.000000 1.000000 0.000000 2 4 1 5 0xffa5a5a5 common/materials/metal/p_metal3" +test2=$(./test-parser --face "maps/static-discharge.map" 1739) +test $ansr2 $test2 + +ansr3=" 0.000000 0.000000 1.000000 1.000000 0.000000 1 0 4 0xff727278 common/materials/stone/stone + 0.000000 0.000000 1.000000 1.000000 0.000000 3 1 4 0xff727278 common/materials/stone/stone + 0.000000 0.000000 1.000000 1.000000 0.000000 1 2 5 0xff727278 common/materials/stone/stone + 0.000000 0.000000 1.000000 1.000000 0.000000 0 1 5 0xff727278 common/materials/stone/stone + 0.000000 0.000000 1.000000 1.000000 0.000000 4 0 6 0xff727278 common/materials/stone/stone + 0.000000 0.000000 1.000000 1.000000 0.000000 5 2 6 0xff727278 common/materials/stone/stone + 0.000000 0.000000 1.000000 1.000000 0.000000 0 5 6 0xff727278 common/materials/stone/stone + 0.000000 0.000000 1.000000 1.000000 0.000000 1 3 7 0xff727278 common/materials/stone/stone + 0.000000 0.000000 1.000000 1.000000 0.000000 2 1 7 0xff727278 common/materials/stone/stone + 0.000000 0.000000 1.000000 1.000000 0.000000 6 2 7 0xff727278 common/materials/stone/stone + 0.000000 0.000000 1.000000 1.000000 0.000000 3 4 6 7 0xff727278 common/materials/stone/stone" +test3=$(./test-parser --face "maps/SkyTemples.map" 19354) +test $ansr3 $test3 diff --git a/ReflexToQ3/test/test-parser.cpp b/ReflexToQ3/test/test-parser.cpp new file mode 100644 index 0000000..98e8063 --- /dev/null +++ b/ReflexToQ3/test/test-parser.cpp @@ -0,0 +1,102 @@ +#include "oopless-parser.hpp" +#include "brushdef.hpp" +#include +#include +using namespace std; + +// human read output +void print_TFace(const TFace x, int i) { + cout << "----------------------------" << endl; + cout << "TFace #" << i << endl; + cout << "\tOffset X: " << x.m_fXOffset << endl; + cout << "\tOffset Y: " << x.m_fYOffset << endl; + cout << "\tScale X: " << x.m_fXScale << endl; + cout << "\tScale Y: " << x.m_fYScale << endl; + cout << "\tRotation: " << x.m_fRotation << endl; + for (unsigned int i = 0; i < x.m_Indices.size(); ++i) { + cout << x.m_Indices[i] << ", "; + } + cout << "\n\tMaterial: " << x.m_Material << endl; + cout << "----------------------------" << endl; +} + +// for bash script to compare strings. +void print_TFace(const TFace x) { +#define FMT_PRECISION 6 + cout <<"\t\t\t" + << fixed << setprecision(FMT_PRECISION) << x.m_fXOffset << " " + << fixed << setprecision(FMT_PRECISION) << x.m_fYOffset << " " + << fixed << setprecision(FMT_PRECISION) << x.m_fXScale << " " + << fixed << setprecision(FMT_PRECISION) << x.m_fYScale << " " + << fixed << setprecision(FMT_PRECISION) << x.m_fRotation << " "; + for (const int index : x.m_Indices) { + cout << index << " "; + } + cout << "0x" << hex << x.hex << " " + << x.m_Material; + cout << endl; +} + +// jump to a line in fstream +// this is to set the stream position to test individual parsing functions. +void gotoline(ifstream &f, unsigned int n) { + string t; + for (unsigned int i = 0; i < n; ++i) { + getline(f, t); + } +} + +void test_parsevertices (const char * const fn, const int ln) { + ifstream fin; + fin.open(fn); + string line; + gotoline(fin, ln); + vector x = parse_vertices(fin); + cout << "size has a size of " << x.size() << endl; + // display data retrieved. + for (unsigned int i = 0; i < x.size(); ++i) { + for (unsigned int j = 0; j < 3; ++j) { + cout << x[i][j] << "\t"; + } + cout << endl; + } + getline(fin, line); + cout << "check stream state \n current line: " << endl; + cout << line << endl; + fin.close(); +} + +// test if faces are parsing correctly +void test_parseface(const char * const fn, const int ln) { + ifstream fin; + fin.open(fn); + string line; + gotoline(fin, ln); + vector x = parse_face(fin); +// cout << "size has a size of " << x.size() << endl; +// display data retrieved. + for (unsigned int i = 0; i < x.size(); ++i) { + print_TFace(x[i]); + } + // parse_face will rollback to a position if it comes across a keyword + // check the line that fin will retrieve. +// getline(fin, line); +// cout << "check stream state \n current line: " << endl; +// cout << line << endl; + fin.close(); +} + +int main(int argc, const char *argv[]) { +// test_parsevertices("empty.map", 10); +// test_parseface("empty.map", 19); + +// test_parsevertices("pocket-infinity.map", 134); + + if (string(argv[1]) == "--face" || string(argv[1]) == "-f") { + if (argc < 4) { + cerr << "expected: 3 arguments to program - given: " << argc << endl; + return -1; + } + test_parseface(argv[2], stoi(argv[3])); + } +}