Introduced google test for L33
This commit is contained in:
26
Makefile
26
Makefile
@@ -9,18 +9,22 @@ VAL_DIR = validator
|
||||
INC_DIR = include
|
||||
CHK_DIR = checker
|
||||
|
||||
TEST_DIR = src/test
|
||||
|
||||
BUILD_DIR = build
|
||||
BUILD_TARGET_DIR = $(BUILD_DIR)/target
|
||||
BUILD_GEN_DIR = $(BUILD_DIR)/gen
|
||||
BUILD_VAL_DIR = $(BUILD_DIR)/val
|
||||
BUILD_CHK_DIR = $(BUILD_DIR)/chk
|
||||
BUILD_TEST_DIR = $(BUILD_DIR)/test
|
||||
LOG_DIR = $(BUILD_DIR)/logs
|
||||
|
||||
BUILD_IN_DIR = $(BUILD_DIR)/input
|
||||
BUILD_OUT_A_DIR = $(BUILD_DIR)/$(SOL_A)_out
|
||||
BUILD_OUT_B_DIR = $(BUILD_DIR)/$(SOL_B)_out
|
||||
|
||||
DIRS = $(BUILD_DIR) $(BUILD_TARGET_DIR) $(BUILD_GEN_DIR) $(BUILD_VAL_DIR) $(BUILD_CHK_DIR) $(LOG_DIR) $(BUILD_IN_DIR) $(BUILD_OUT_A_DIR) $(BUILD_OUT_B_DIR)
|
||||
|
||||
DIRS = $(BUILD_DIR) $(BUILD_TARGET_DIR) $(BUILD_GEN_DIR) $(BUILD_VAL_DIR) $(BUILD_CHK_DIR) $(LOG_DIR) $(BUILD_IN_DIR) $(BUILD_OUT_A_DIR) $(BUILD_OUT_B_DIR) $(BUILD_TEST_DIR)
|
||||
|
||||
CXXFLAGS = -Wall -O2 -std=c++2a
|
||||
GENFLAGS = -N $(N) -M $(M) -pm $(pm)
|
||||
@@ -56,7 +60,7 @@ pm ?= 0.1
|
||||
all: $(SOLS_EXE) $(GENS_EXE) $(VAL_EXE) $(CHK_EXE) $(DIRS)
|
||||
@echo "All executables compiled in $(BUILD_DIR)/"
|
||||
|
||||
$(BUILD_DIR) $(BUILD_TARGET_DIR) $(BUILD_GEN_DIR) $(BUILD_VAL_DIR) $(BUILD_CHK_DIR) $(LOG_DIR) $(BUILD_IN_DIR) $(BUILD_OUT_A_DIR) $(BUILD_OUT_B_DIR):
|
||||
$(BUILD_DIR) $(BUILD_TARGET_DIR) $(BUILD_GEN_DIR) $(BUILD_VAL_DIR) $(BUILD_CHK_DIR) $(LOG_DIR) $(BUILD_IN_DIR) $(BUILD_OUT_A_DIR) $(BUILD_OUT_B_DIR) $(BUILD_TEST_DIR):
|
||||
@echo "Creating directory: $@"
|
||||
@mkdir -p $@
|
||||
|
||||
@@ -83,6 +87,10 @@ $(BUILD_IN_DIR)/input%: $(GEN_TO_RUN) | $(BUILD_IN_DIR)
|
||||
echo "Using Seed: $$SEED" >&2; \
|
||||
./$(GEN_TO_RUN) $(GENFLAGS) "$$SEED" > $@
|
||||
|
||||
$(BUILD_TEST_DIR)/%: $(TEST_DIR)/%.cpp | $(BUILD_TEST_DIR)
|
||||
@echo "Compiling Unit Test $< -> $@"
|
||||
$(CXX) $(CXXFLAGS) -I$(INC_DIR) -I$(SRC_DIR)/bsb -o $@ $< -lgtest -lgtest_main -pthread
|
||||
|
||||
.PHONY: force
|
||||
force:
|
||||
|
||||
@@ -152,10 +160,18 @@ else
|
||||
@echo "OK: ID=$(id) outputs match!"
|
||||
endif
|
||||
|
||||
UNIT_TEST_SRCS = $(wildcard $(TEST_DIR)/*.cpp)
|
||||
UNIT_TEST_NAMES = $(patsubst $(TEST_DIR)/%.cpp, %, $(UNIT_TEST_SRCS))
|
||||
|
||||
.PHONY: test
|
||||
test: all $(LOG_DIR) $(BUILD_OUT_A_DIR) $(BUILD_OUT_B_DIR)
|
||||
ifeq ($(id),)
|
||||
ifdef target
|
||||
@# Case 1: Unit Test 실행 (예: make test target=L33)
|
||||
@echo "--- Running Unit Test Target: [$(target)] ---"
|
||||
@$(MAKE) --no-print-directory $(BUILD_TEST_DIR)/$(target)
|
||||
@echo "-------------------------------------------"
|
||||
@./$(BUILD_TEST_DIR)/$(target)
|
||||
else ifeq ($(id),)
|
||||
@echo "--- Running $(TEST_COUNT) tests (Comparing $(SOL_A) vs $(SOL_B)) ---"
|
||||
@echo "--- Using Generator [$(gen)] (N=$(N), M=$(M)) ---"
|
||||
@LOG_FILE=$(LOG_DIR)/test_run_$$(date +%Y%m%d_%H%M%S).log; \
|
||||
@@ -194,6 +210,10 @@ else
|
||||
@$(MAKE) --no-print-directory check id=$(id) gen=$(gen) SOL_A=$(SOL_A) SOL_B=$(SOL_B) N=$(N) M=$(M)
|
||||
endif
|
||||
|
||||
.PHONY: $(UNIT_TEST_NAMES)
|
||||
$(UNIT_TEST_NAMES):
|
||||
@$(MAKE) --no-print-directory test target=$@
|
||||
|
||||
.PHONY: bench
|
||||
bench: all
|
||||
ifeq ($(id),)
|
||||
|
||||
@@ -20,8 +20,7 @@ int main(int argc, char *argv[]) {
|
||||
vector<ll> cnt(n + 1, 0);
|
||||
for (ll i = 0; i < m; ++i) {
|
||||
ll s = rnd.next(1uLL, n);
|
||||
if(cnt[s] == n-1)
|
||||
{
|
||||
if (cnt[s] == n - 1) {
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
#include <boost/heap/fibonacci_heap.hpp>
|
||||
#include <cassert>
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
#include <list>
|
||||
#include <map>
|
||||
#include <optional>
|
||||
#include <ostream>
|
||||
#include <tuple>
|
||||
#include <unordered_map>
|
||||
#include <utility>
|
||||
@@ -329,6 +329,26 @@ class L33 {
|
||||
return {x, s};
|
||||
}
|
||||
bool empty() const { return ptr.empty(); }
|
||||
|
||||
void _debug(ostream& os)
|
||||
{
|
||||
os<<"D0: "<<endl;
|
||||
for(auto [B, it_BLIST]:D0)
|
||||
{
|
||||
os<<"["<<B<<"] : ";
|
||||
auto &block = *it_BLIST;
|
||||
for(auto [key, val] : block) os << "(" << key << " : " << val << ") ";
|
||||
os<<endl;
|
||||
}
|
||||
os<<"D1: "<<endl;
|
||||
for(auto [B, it_BLIST]:D1)
|
||||
{
|
||||
os<<"["<<B<<"] : ";
|
||||
auto &block = *it_BLIST;
|
||||
for(auto [key, val] : block) os << "(" << key << " : " << val << ") ";
|
||||
os<<endl;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace GMS
|
||||
@@ -10,7 +10,7 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "bsb.hpp"
|
||||
#include "L33.hpp"
|
||||
|
||||
using namespace std;
|
||||
using namespace GMS;
|
||||
|
||||
93
src/test/L33-test1.cpp
Normal file
93
src/test/L33-test1.cpp
Normal file
@@ -0,0 +1,93 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <L33.hpp>
|
||||
// #include <limits>
|
||||
#include <random>
|
||||
|
||||
TEST(L33_test, debug_small) {
|
||||
const unsigned seed = 998244353;
|
||||
const uint N = 10, M = 1, MX = 1e9;
|
||||
|
||||
std::mt19937 gen(seed);
|
||||
std::uniform_int_distribution<int> dis(1, MX);
|
||||
|
||||
GMS::L33<int,int> D(M, MX);
|
||||
std::map<int,int> mp;
|
||||
|
||||
std::vector<int> keys;
|
||||
for(int i=1;i<=N;i++) keys.push_back(i);
|
||||
|
||||
std::shuffle(keys.begin(), keys.end(), gen);
|
||||
|
||||
for(auto key:keys)
|
||||
{
|
||||
int val = dis(gen);
|
||||
std::cerr<<key<<": "<<val<<std::endl;
|
||||
|
||||
mp[val] = key;
|
||||
|
||||
D.Insert(key, val);
|
||||
}
|
||||
|
||||
std::cerr<<"[!] mp: "<<std::endl;
|
||||
for(auto [val, key] : mp)
|
||||
std::cerr<<key<<": "<<val<<std::endl;
|
||||
|
||||
D._debug(std::cerr);
|
||||
|
||||
std::cerr<<"[!] D: "<<std::endl;
|
||||
int bef = 0;
|
||||
while(!D.empty())
|
||||
{
|
||||
auto [B, keys] = D.Pull();
|
||||
|
||||
std::cerr<<"[!] new pull; B : "<<B<<" ("<<keys.size()<<')'<<": ";
|
||||
for(auto i:keys) std::cerr<<i<<' ';
|
||||
std::cerr<<std::endl;
|
||||
|
||||
D._debug(std::cerr);
|
||||
|
||||
EXPECT_LT(bef, B);
|
||||
bef = B;
|
||||
std::cerr<<std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
TEST(L33_test, DISABLED_emptying_test1) {
|
||||
const double inf = 100;
|
||||
const unsigned seed = 998244353;
|
||||
const uint N = 2328, M = 10, MX = 1e9;
|
||||
|
||||
std::mt19937 gen(seed);
|
||||
std::uniform_int_distribution<int> dis(1, MX);
|
||||
std::uniform_real_distribution<double> valdis(-inf, inf);
|
||||
|
||||
GMS::L33<int, double> D(M, inf);
|
||||
|
||||
std::vector<int> vec;
|
||||
for (int i = 1; i <= N; i++) vec.push_back(i);
|
||||
|
||||
std::shuffle(vec.begin(), vec.end(), gen);
|
||||
|
||||
for (int i = 0; i < N; i++) {
|
||||
D.Insert(vec[i], valdis(gen));
|
||||
}
|
||||
|
||||
int cnt = 0; double bef = -inf;
|
||||
|
||||
while(!D.empty())
|
||||
{
|
||||
auto [B, v] = D.Pull();
|
||||
// std::cerr<<B<<' '<<v.size()<<std::endl;
|
||||
cnt += v.size();
|
||||
|
||||
EXPECT_TRUE(D.empty() || (v.size() == M));
|
||||
EXPECT_LE(bef, B);
|
||||
bef = B;
|
||||
}
|
||||
|
||||
EXPECT_EQ(cnt, N);
|
||||
|
||||
int result = 2 + 2;
|
||||
EXPECT_EQ(result, 4);
|
||||
}
|
||||
Reference in New Issue
Block a user