Update build and basic DS test framework.

This commit is contained in:
Kyle Isom 2017-12-21 14:02:49 -08:00
parent eb37973147
commit 8ea78af90b
5 changed files with 58 additions and 2 deletions

View File

@ -21,6 +21,8 @@ then
mkdir -p $BUILDDIR && cd $BUILDDIR mkdir -p $BUILDDIR && cd $BUILDDIR
autoreconf -i $SRCDIR autoreconf -i $SRCDIR
bash $SRCDIR/configure $CONFOPTS bash $SRCDIR/configure $CONFOPTS
[ -d "$BUILDDIR/data" ] || mkdir "$BUILDDIR/data"
cp $SRCDIR/data/corpus* "$BUILDDIR/data"
else else
autoreconf -i autoreconf -i
./configure $CONFOPTS ./configure $CONFOPTS

View File

@ -8,5 +8,5 @@ ods-cpp/main.cpp: ods-cpp.tgz
ODS_SAMPLE_CODE_URL := http://opendatastructures.org/ods-cpp.tgz ODS_SAMPLE_CODE_URL := http://opendatastructures.org/ods-cpp.tgz
ods-cpp.tgz: ods-cpp.tgz:
if command -v curl 2>&1 > /dev/null ; then curl -L -O $(ODS_SAMPLE_CODE_URL) \ if command -v curl 2>&1 > /dev/null ; then curl -L -O $(ODS_SAMPLE_CODE_URL) ; \
elif command -v curl 2>&1 > /dev/null ; then wget $(ODS_SAMPLE_CODE_URL) ; fi elif command -v curl 2>&1 > /dev/null ; then wget $(ODS_SAMPLE_CODE_URL) ; fi

View File

@ -148,6 +148,8 @@ Run times come in three flavours:
interfaces. These do not have to be efficient. They can be used later to interfaces. These do not have to be efficient. They can be used later to
test the correctness and performance of more efficient implementations. test the correctness and performance of more efficient implementations.
In progress: src/ch01ex06.cc, src/ods/simplist.h, src/ods/uset.h.
7. Work to improve the performance of your implementations 7. Work to improve the performance of your implementations
from the previous question using any tricks you can think of. Experiment from the previous question using any tricks you can think of. Experiment
and think about how you could improve the performance of add(i,x) and and think about how you could improve the performance of add(i,x) and

View File

@ -1,6 +1,6 @@
AM_CPPFLAGS = -Wall -Wextra -pedantic -Wshadow -Wpointer-arith -Wcast-align AM_CPPFLAGS = -Wall -Wextra -pedantic -Wshadow -Wpointer-arith -Wcast-align
AM_CPPFLAGS += -Wwrite-strings -Wmissing-declarations -Wno-long-long -Werror AM_CPPFLAGS += -Wwrite-strings -Wmissing-declarations -Wno-long-long -Werror
AM_CPPFLAGS += -Wunused-variable -std=c++14 -D_XOPEN_SOURCE -O0 -g -I. AM_CPPFLAGS += -Wunused-variable -std=c++17 -D_XOPEN_SOURCE -O0 -g -I.
AM_CPPFLAGS += -fno-elide-constructors -Weffc++ AM_CPPFLAGS += -fno-elide-constructors -Weffc++
bin_PROGRAMS := ch01ex01 ch01ex03 ch01ex04 ch01ex05 ch01ex06 bin_PROGRAMS := ch01ex01 ch01ex03 ch01ex04 ch01ex05 ch01ex06

View File

@ -1,5 +1,7 @@
#include <cassert> #include <cassert>
#include <iostream>
#include <ods/simplist.h> #include <ods/simplist.h>
#include <ods/simpuset.h>
using namespace std; using namespace std;
@ -12,6 +14,54 @@ check_simplist(void)
sl.add(1, 2); sl.add(1, 2);
sl.add(2, 3); sl.add(2, 3);
assert(sl.size() == 3); assert(sl.size() == 3);
sl.add(0, 4);
sl.add(1, 5);
sl.add(2, 6);
assert(sl.size() == 6);
int expected[6] = {4, 5, 6, 1, 2, 3};
for (size_t i = 0; i < 6; i++) {
assert(sl.get(i) == expected[i]);
}
bool caught = false;
try {
sl.add(8, 8);
} catch (std::invalid_argument) {
caught = true;
}
assert(caught);
assert(sl.get(2) == 6);
sl.remove(2);
assert(sl.get(2) == 1);
assert(sl.size() == 5);
sl.set(2, 6);
assert(sl.get(2) == 6);
// expected = {1, 2, 3, 4, 5, 6};
for (size_t i = 0; i < 6; i++) {
expected[i] = i+1;
}
for (size_t i = 0; i < 5; i++) {
sl.set(i, i+1);
}
sl.add(5, 6);
for (size_t i = 0; i < 6; i++) {
assert(sl.get(i) == expected[i]);
}
}
static void
check_simpuset(void)
{
ods::SimpUSet<int> us;
assert(us.add(1));
} }
@ -19,4 +69,6 @@ int
main(void) main(void)
{ {
check_simplist(); check_simplist();
check_simpuset();
cout << "OK" << endl;
} }