diff --git a/octa/array.h b/octa/array.h index 8882ac7..7da91ad 100644 --- a/octa/array.h +++ b/octa/array.h @@ -42,7 +42,7 @@ namespace octa { bool empty() const { return N == 0; } 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) { return ptr >= &p_buf[0] && ptr < &p_buf[N]; } diff --git a/octa/vector.h b/octa/vector.h index 34e0485..5b9de80 100644 --- a/octa/vector.h +++ b/octa/vector.h @@ -251,7 +251,7 @@ namespace octa { bool empty() const { return (p_len == 0); } 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) { return ptr >= p_buf && ptr < &p_buf[p_len]; } diff --git a/run_tests.py b/run_tests.py index 81c0805..fb0f9af 100644 --- a/run_tests.py +++ b/run_tests.py @@ -4,29 +4,34 @@ from os.path import splitext import subprocess as sp 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"): - if fname.endswith(".cpp"): - 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" + (modname, modext) = splitext(fname) -print "testing successful" \ No newline at end of file + 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" \ No newline at end of file diff --git a/tests/array.cpp b/tests/array.cpp index ee74bcb..d1b99cf 100644 --- a/tests/array.cpp +++ b/tests/array.cpp @@ -1,5 +1,45 @@ +#include +#include #include "octa/array.h" +#include "octa/string.h" + +using namespace octa; int main() { + Array 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 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; } \ No newline at end of file diff --git a/tests/vector.cpp b/tests/vector.cpp index 6f5d65a..752a915 100644 --- a/tests/vector.cpp +++ b/tests/vector.cpp @@ -1,5 +1,7 @@ #include +#include #include "octa/vector.h" +#include "octa/string.h" using namespace octa; @@ -12,6 +14,11 @@ int main() { assert(x[0] == 5); 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); Vector y(5, 10); @@ -78,5 +85,7 @@ int main() { assert(w.first() == 5); assert(w.last() == 5); + assert(!strcmp(to_string(w).data(), "{5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5}")); + return 0; } \ No newline at end of file