Introduced google test for L33

This commit is contained in:
2025-11-28 06:05:40 +09:00
parent b42db10e14
commit c97093fe46
5 changed files with 139 additions and 7 deletions

View File

@@ -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),)

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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
View 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);
}