more tests + cleaner test runner
parent
a03058391c
commit
77f7fed0df
|
@ -42,7 +42,7 @@ namespace octa {
|
||||||
bool empty() const { return N == 0; }
|
bool empty() const { return N == 0; }
|
||||||
|
|
||||||
bool in_range(size_t idx) { return idx < N; }
|
bool in_range(size_t idx) { return idx < N; }
|
||||||
bool in_range(int idx) { return idx >= 0 && idx < N; }
|
bool in_range(int idx) { return idx >= 0 && size_t(idx) < N; }
|
||||||
bool in_range(const T *ptr) {
|
bool in_range(const T *ptr) {
|
||||||
return ptr >= &p_buf[0] && ptr < &p_buf[N];
|
return ptr >= &p_buf[0] && ptr < &p_buf[N];
|
||||||
}
|
}
|
||||||
|
|
|
@ -251,7 +251,7 @@ namespace octa {
|
||||||
bool empty() const { return (p_len == 0); }
|
bool empty() const { return (p_len == 0); }
|
||||||
|
|
||||||
bool in_range(size_t idx) { return idx < p_len; }
|
bool in_range(size_t idx) { return idx < p_len; }
|
||||||
bool in_range(int idx) { return idx >= 0 && idx < p_len; }
|
bool in_range(int idx) { return idx >= 0 && size_t(idx) < p_len; }
|
||||||
bool in_range(const T *ptr) {
|
bool in_range(const T *ptr) {
|
||||||
return ptr >= p_buf && ptr < &p_buf[p_len];
|
return ptr >= p_buf && ptr < &p_buf[p_len];
|
||||||
}
|
}
|
||||||
|
|
51
run_tests.py
51
run_tests.py
|
@ -4,29 +4,34 @@ from os.path import splitext
|
||||||
import subprocess as sp
|
import subprocess as sp
|
||||||
|
|
||||||
COMPILER = "c++"
|
COMPILER = "c++"
|
||||||
CXXFLAGS="-std=c++11 -Wall -Wextra -I."
|
# -Wno-missing-braces because clang false positive
|
||||||
|
CXXFLAGS="-std=c++11 -Wall -Wextra -Wno-missing-braces -I."
|
||||||
|
|
||||||
for fname in listdir("./tests"):
|
for fname in listdir("./tests"):
|
||||||
if fname.endswith(".cpp"):
|
(modname, modext) = splitext(fname)
|
||||||
modname = splitext(fname)[0]
|
|
||||||
stdout.write("%s...\t" % modname)
|
|
||||||
pc = sp.Popen("%s tests/%s -o tests/%s %s"
|
|
||||||
% (COMPILER, fname, modname, CXXFLAGS), shell = True,
|
|
||||||
stdout = sp.PIPE, stderr = sp.STDOUT)
|
|
||||||
pcdata = pc.communicate()[0]
|
|
||||||
if pc.returncode != 0:
|
|
||||||
print "\033[91m(compile error)\033[0m"
|
|
||||||
stdout.write(pcdata)
|
|
||||||
exit(1)
|
|
||||||
pc = sp.Popen("./tests/%s" % modname, shell = True,
|
|
||||||
stdout = sp.PIPE, stderr = sp.STDOUT)
|
|
||||||
pcdata = pc.communicate()[0]
|
|
||||||
if pc.returncode != 0:
|
|
||||||
remove("./tests/%s" % modname)
|
|
||||||
print "\033[91m(runtime error)\033[0m"
|
|
||||||
stdout.write(pcdata)
|
|
||||||
exit(1)
|
|
||||||
remove("./tests/%s" % modname)
|
|
||||||
print "\033[92m(success)\033[0m"
|
|
||||||
|
|
||||||
print "testing successful"
|
if modext != ".cpp":
|
||||||
|
continue
|
||||||
|
|
||||||
|
pc = sp.Popen("%s tests/%s -o tests/%s %s"
|
||||||
|
% (COMPILER, fname, modname, CXXFLAGS), shell = True,
|
||||||
|
stdout = sp.PIPE, stderr = sp.STDOUT)
|
||||||
|
stdout.write(pc.communicate()[0])
|
||||||
|
|
||||||
|
if pc.returncode != 0:
|
||||||
|
print "%s...\t\033[91m\033[1m(compile error)\033[0m" % modname
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
pc = sp.Popen("./tests/%s" % modname, shell = True,
|
||||||
|
stdout = sp.PIPE, stderr = sp.STDOUT)
|
||||||
|
stdout.write(pc.communicate()[0])
|
||||||
|
|
||||||
|
if pc.returncode != 0:
|
||||||
|
remove("./tests/%s" % modname)
|
||||||
|
print "%s...\t\033[91m\033[1m(runtime error)\033[0m" % modname
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
remove("./tests/%s" % modname)
|
||||||
|
print "%s...\t\033[92m\033[1m(success)\033[0m" % modname
|
||||||
|
|
||||||
|
print "\033[94m\033[1mtesting successful\033[0m"
|
|
@ -1,5 +1,45 @@
|
||||||
|
#include <assert.h>
|
||||||
|
#include <string.h>
|
||||||
#include "octa/array.h"
|
#include "octa/array.h"
|
||||||
|
#include "octa/string.h"
|
||||||
|
|
||||||
|
using namespace octa;
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
Array<int, 5> x = { 2, 4, 8, 16, 32 };
|
||||||
|
|
||||||
|
assert(x.first() == 2);
|
||||||
|
assert(x.last() == 32);
|
||||||
|
|
||||||
|
assert(x[0] == 2);
|
||||||
|
assert(x[2] == 8);
|
||||||
|
|
||||||
|
assert(x.at(0) == x[0]);
|
||||||
|
assert(x.at(3) == x[3]);
|
||||||
|
|
||||||
|
assert(x.size() == 5);
|
||||||
|
|
||||||
|
assert(!x.empty());
|
||||||
|
|
||||||
|
assert(x.in_range(4));
|
||||||
|
assert(x.in_range(0));
|
||||||
|
assert(!x.in_range(5));
|
||||||
|
|
||||||
|
assert(x.data()[0] == x[0]);
|
||||||
|
|
||||||
|
auto r = x.each();
|
||||||
|
assert(r.first() == 2);
|
||||||
|
assert(r.last() == 32);
|
||||||
|
|
||||||
|
Array<int, 5> z;
|
||||||
|
x.swap(z);
|
||||||
|
|
||||||
|
assert(z.first() == 2);
|
||||||
|
assert(z.last() == 32);
|
||||||
|
|
||||||
|
assert(z.size() == 5);
|
||||||
|
|
||||||
|
assert(!strcmp(to_string(z).data(), "{2, 4, 8, 16, 32}"));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
|
@ -1,5 +1,7 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <string.h>
|
||||||
#include "octa/vector.h"
|
#include "octa/vector.h"
|
||||||
|
#include "octa/string.h"
|
||||||
|
|
||||||
using namespace octa;
|
using namespace octa;
|
||||||
|
|
||||||
|
@ -12,6 +14,11 @@ int main() {
|
||||||
assert(x[0] == 5);
|
assert(x[0] == 5);
|
||||||
assert(x[2] == 15);
|
assert(x[2] == 15);
|
||||||
|
|
||||||
|
assert(x.at(0) == x[0]);
|
||||||
|
assert(x.at(3) == x[3]);
|
||||||
|
|
||||||
|
assert(x.data()[0] == x[0]);
|
||||||
|
|
||||||
assert(x.size() == 4);
|
assert(x.size() == 4);
|
||||||
|
|
||||||
Vector<int> y(5, 10);
|
Vector<int> y(5, 10);
|
||||||
|
@ -78,5 +85,7 @@ int main() {
|
||||||
assert(w.first() == 5);
|
assert(w.first() == 5);
|
||||||
assert(w.last() == 5);
|
assert(w.last() == 5);
|
||||||
|
|
||||||
|
assert(!strcmp(to_string(w).data(), "{5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5}"));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
Loading…
Reference in New Issue