Explorar el Código

Add unit test for SegmentTree

Olivier Marty hace 8 años
padre
commit
0ea3cdcd66
Se han modificado 2 ficheros con 65 adiciones y 0 borrados
  1. 20 0
      code/Makefile
  2. 45 0
      code/SegmentTree_test.cpp

+ 20 - 0
code/Makefile

@@ -0,0 +1,20 @@
+TEST_SRC=$(wildcard *_test.cpp)
+TEST_EXE=$(TEST_SRC:.cpp=)
+TEST_RUN=$(TEST_SRC:.cpp=.run)
+
+run: $(TEST_RUN)
+
+%_test.run: %_test
+	@echo Testing $<...
+	@./$<
+	@echo OK
+
+%_test: %_test.cpp
+	@echo Compiling $@...
+	@g++ -o $@ $<
+
+clean:
+	rm -f $(TEST_EXE)
+
+.PHONY: run clean
+.SECONDARY: $(TEST_EXE)

+ 45 - 0
code/SegmentTree_test.cpp

@@ -0,0 +1,45 @@
+#include <bits/stdc++.h>
+using namespace std;
+int min(int a, int b) {
+  return a<b ? a : b;
+}
+#include "SegmentTree.cpp"
+int main() {
+  int values[] = {1,2,3,4,5,6,7};
+  build(sizeof(values)/sizeof(int), values);
+  assert(query(1,5) == 2);
+  assert(query(0,5) == 1);
+  assert(query(2,8) == 3);
+  assert(query(4,5) == 5);
+  update_range(0, 7, 1);
+  assert(query(1,5) == 3);
+  assert(query(0,7) == 2);
+  assert(query(2,8) == 4);
+  assert(query(4,5) == 6);
+  update_range(2, 6, 2);
+  update_range(3, 7, 2);
+  assert(query(1,5) == 3);
+  assert(query(0,7) == 2);
+  assert(query(2,8) == 6);
+  assert(query(4,5) == 10);
+  assert(query(5,7) == 10);
+  update(2, 0);
+  assert(query(1,5) == 0);
+  assert(query(0,7) == 0);
+  assert(query(2,8) == 0);
+  assert(query(4,5) == 10);
+  assert(query(5,7) == 10);
+  update_range(1, 4, 2);
+  assert(query(1,5) == 2);
+  assert(query(0,7) == 2);
+  assert(query(4,8) == 10);
+  assert(query(4,5) == 10);
+  assert(query(6,7) == 10);
+  assert(query(1,3) == 2);
+  update(5, -1);
+  assert(query(0, 5) == 2);
+  assert(query(6, 7) == 10);
+  assert(query(5, 6) == -1);
+  assert(query(4, 7) == -1);
+  return 0;
+}