First approach
This commit is contained in:
80
CLAUDE.md
80
CLAUDE.md
@@ -9,11 +9,22 @@ BayesNet is a C++ library implementing Bayesian Network Classifiers. It provides
|
|||||||
## Build System & Dependencies
|
## Build System & Dependencies
|
||||||
|
|
||||||
### Dependency Management
|
### Dependency Management
|
||||||
- Uses **vcpkg** for package management with private registry at https://github.com/rmontanana/vcpkg-stash
|
The project supports **two package managers**:
|
||||||
|
|
||||||
|
#### vcpkg (Default)
|
||||||
|
- Uses vcpkg with private registry at https://github.com/rmontanana/vcpkg-stash
|
||||||
- Core dependencies: libtorch, nlohmann-json, folding, fimdlp, arff-files, catch2
|
- Core dependencies: libtorch, nlohmann-json, folding, fimdlp, arff-files, catch2
|
||||||
- All dependencies defined in `vcpkg.json` with version overrides
|
- All dependencies defined in `vcpkg.json` with version overrides
|
||||||
|
|
||||||
|
#### Conan (Alternative)
|
||||||
|
- Modern C++ package manager with better dependency resolution
|
||||||
|
- Configured via `conanfile.py` for packaging and distribution
|
||||||
|
- Supports subset of dependencies (libtorch, nlohmann-json, catch2)
|
||||||
|
- Custom dependencies (folding, fimdlp, arff-files) need custom Conan recipes
|
||||||
|
|
||||||
### Build Commands
|
### Build Commands
|
||||||
|
|
||||||
|
#### Using vcpkg (Default)
|
||||||
```bash
|
```bash
|
||||||
# Initialize dependencies
|
# Initialize dependencies
|
||||||
make init
|
make init
|
||||||
@@ -37,11 +48,38 @@ make viewcoverage
|
|||||||
make clean
|
make clean
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Using Conan
|
||||||
|
```bash
|
||||||
|
# Install Conan first: pip install conan
|
||||||
|
|
||||||
|
# Initialize dependencies
|
||||||
|
make conan-init
|
||||||
|
|
||||||
|
# Build debug version (with tests and coverage)
|
||||||
|
make conan-debug
|
||||||
|
make buildd
|
||||||
|
|
||||||
|
# Build release version
|
||||||
|
make conan-release
|
||||||
|
make buildr
|
||||||
|
|
||||||
|
# Create and test Conan package
|
||||||
|
make conan-create
|
||||||
|
|
||||||
|
# Upload to Conan remote
|
||||||
|
make conan-upload remote=myremote
|
||||||
|
|
||||||
|
# Clean Conan cache and builds
|
||||||
|
make conan-clean
|
||||||
|
```
|
||||||
|
|
||||||
### CMake Configuration
|
### CMake Configuration
|
||||||
- Uses CMake 3.27+ with C++17 standard
|
- Uses CMake 3.27+ with C++17 standard
|
||||||
- Debug builds automatically enable testing and coverage
|
- Debug builds automatically enable testing and coverage
|
||||||
- Release builds optimize with `-Ofast`
|
- Release builds optimize with `-Ofast`
|
||||||
- Supports both static library and vcpkg package installation
|
- **Automatic package manager detection**: CMake detects whether Conan or vcpkg is being used
|
||||||
|
- Supports both static library and package manager installation
|
||||||
|
- Conditional dependency linking based on availability
|
||||||
|
|
||||||
## Testing Framework
|
## Testing Framework
|
||||||
|
|
||||||
@@ -94,9 +132,45 @@ Sample code in `sample/` directory demonstrates library usage:
|
|||||||
make sample fname=tests/data/iris.arff model=TANLd
|
make sample fname=tests/data/iris.arff model=TANLd
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Package Distribution
|
||||||
|
|
||||||
|
### Creating Conan Packages
|
||||||
|
```bash
|
||||||
|
# Create package locally
|
||||||
|
make conan-create
|
||||||
|
|
||||||
|
# Test package installation
|
||||||
|
cd test_package
|
||||||
|
conan create ..
|
||||||
|
|
||||||
|
# Upload to remote repository
|
||||||
|
make conan-upload remote=myremote profile=myprofile
|
||||||
|
```
|
||||||
|
|
||||||
|
### Using the Library
|
||||||
|
With Conan:
|
||||||
|
```python
|
||||||
|
# conanfile.txt or conanfile.py
|
||||||
|
[requires]
|
||||||
|
bayesnet/1.1.2@user/channel
|
||||||
|
|
||||||
|
[generators]
|
||||||
|
cmake
|
||||||
|
```
|
||||||
|
|
||||||
|
With vcpkg:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"dependencies": ["bayesnet"]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Common Development Tasks
|
## Common Development Tasks
|
||||||
|
|
||||||
- **Add new classifier**: Extend BaseClassifier, implement in appropriate subdirectory
|
- **Add new classifier**: Extend BaseClassifier, implement in appropriate subdirectory
|
||||||
- **Add new test**: Update `tests/CMakeLists.txt` and create test in `tests/`
|
- **Add new test**: Update `tests/CMakeLists.txt` and create test in `tests/`
|
||||||
- **Modify build**: Edit main `CMakeLists.txt` or use Makefile targets
|
- **Modify build**: Edit main `CMakeLists.txt` or use Makefile targets
|
||||||
- **Update dependencies**: Modify `vcpkg.json` and run `make init`
|
- **Update dependencies**:
|
||||||
|
- vcpkg: Modify `vcpkg.json` and run `make init`
|
||||||
|
- Conan: Modify `conanfile.py` and run `make conan-init`
|
||||||
|
- **Package for distribution**: Use `make conan-create` for Conan packaging
|
@@ -10,10 +10,36 @@ project(bayesnet
|
|||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
cmake_policy(SET CMP0135 NEW)
|
cmake_policy(SET CMP0135 NEW)
|
||||||
|
|
||||||
|
# Package manager detection
|
||||||
|
if(EXISTS ${CMAKE_BINARY_DIR}/conan_toolchain.cmake)
|
||||||
|
include(${CMAKE_BINARY_DIR}/conan_toolchain.cmake)
|
||||||
|
set(USING_CONAN TRUE)
|
||||||
|
message(STATUS "Using Conan package manager")
|
||||||
|
else()
|
||||||
|
set(USING_CONAN FALSE)
|
||||||
|
message(STATUS "Using vcpkg package manager")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Find packages - works with both Conan and vcpkg
|
||||||
find_package(Torch CONFIG REQUIRED)
|
find_package(Torch CONFIG REQUIRED)
|
||||||
find_package(fimdlp CONFIG REQUIRED)
|
|
||||||
find_package(nlohmann_json CONFIG REQUIRED)
|
find_package(nlohmann_json CONFIG REQUIRED)
|
||||||
find_package(folding CONFIG REQUIRED)
|
|
||||||
|
# These packages might not be available in Conan yet, so we handle them conditionally
|
||||||
|
if(NOT USING_CONAN)
|
||||||
|
find_package(fimdlp CONFIG REQUIRED)
|
||||||
|
find_package(folding CONFIG REQUIRED)
|
||||||
|
else()
|
||||||
|
# For Conan, we'll need to either find alternatives or create custom packages
|
||||||
|
# For now, we'll look for them and warn if not found
|
||||||
|
find_package(fimdlp CONFIG QUIET)
|
||||||
|
find_package(folding CONFIG QUIET)
|
||||||
|
if(NOT fimdlp_FOUND)
|
||||||
|
message(WARNING "fimdlp not found - you may need to create a custom Conan recipe")
|
||||||
|
endif()
|
||||||
|
if(NOT folding_FOUND)
|
||||||
|
message(WARNING "folding not found - you may need to create a custom Conan recipe")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# Global CMake variables
|
# Global CMake variables
|
||||||
# ----------------------
|
# ----------------------
|
||||||
@@ -52,7 +78,17 @@ include_directories(
|
|||||||
file(GLOB_RECURSE Sources "bayesnet/*.cc")
|
file(GLOB_RECURSE Sources "bayesnet/*.cc")
|
||||||
|
|
||||||
add_library(bayesnet ${Sources})
|
add_library(bayesnet ${Sources})
|
||||||
target_link_libraries(bayesnet fimdlp::fimdlp folding::folding "${TORCH_LIBRARIES}")
|
|
||||||
|
# Link libraries conditionally based on package manager
|
||||||
|
set(BAYESNET_LINK_LIBRARIES "${TORCH_LIBRARIES}")
|
||||||
|
if(fimdlp_FOUND)
|
||||||
|
list(APPEND BAYESNET_LINK_LIBRARIES fimdlp::fimdlp)
|
||||||
|
endif()
|
||||||
|
if(folding_FOUND)
|
||||||
|
list(APPEND BAYESNET_LINK_LIBRARIES folding::folding)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(bayesnet ${BAYESNET_LINK_LIBRARIES})
|
||||||
|
|
||||||
# Testing
|
# Testing
|
||||||
# -------
|
# -------
|
||||||
@@ -64,7 +100,17 @@ endif (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|||||||
if (ENABLE_TESTING)
|
if (ENABLE_TESTING)
|
||||||
MESSAGE(STATUS "Testing enabled")
|
MESSAGE(STATUS "Testing enabled")
|
||||||
find_package(Catch2 CONFIG REQUIRED)
|
find_package(Catch2 CONFIG REQUIRED)
|
||||||
|
|
||||||
|
# Handle arff-files conditionally for different package managers
|
||||||
|
if(NOT USING_CONAN)
|
||||||
find_package(arff-files CONFIG REQUIRED)
|
find_package(arff-files CONFIG REQUIRED)
|
||||||
|
else()
|
||||||
|
find_package(arff-files CONFIG QUIET)
|
||||||
|
if(NOT arff-files_FOUND)
|
||||||
|
message(WARNING "arff-files not found - you may need to create a custom Conan recipe")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
enable_testing()
|
enable_testing()
|
||||||
include(CTest)
|
include(CTest)
|
||||||
add_subdirectory(tests)
|
add_subdirectory(tests)
|
||||||
|
84
CONAN_README.md
Normal file
84
CONAN_README.md
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
# Using BayesNet with Conan
|
||||||
|
|
||||||
|
This document explains how to use Conan as an alternative package manager for BayesNet.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install conan
|
||||||
|
```
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### As a Consumer
|
||||||
|
|
||||||
|
1. Create a `conanfile.txt` in your project:
|
||||||
|
```ini
|
||||||
|
[requires]
|
||||||
|
bayesnet/1.1.2@user/channel
|
||||||
|
|
||||||
|
[generators]
|
||||||
|
CMakeDeps
|
||||||
|
CMakeToolchain
|
||||||
|
|
||||||
|
[options]
|
||||||
|
|
||||||
|
[imports]
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Install dependencies:
|
||||||
|
```bash
|
||||||
|
conan install . --build=missing
|
||||||
|
```
|
||||||
|
|
||||||
|
3. In your CMakeLists.txt:
|
||||||
|
```cmake
|
||||||
|
find_package(bayesnet REQUIRED)
|
||||||
|
target_link_libraries(your_target bayesnet::bayesnet)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Building BayesNet with Conan
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install dependencies
|
||||||
|
make conan-init
|
||||||
|
|
||||||
|
# Build debug version
|
||||||
|
make conan-debug
|
||||||
|
make buildd
|
||||||
|
|
||||||
|
# Build release version
|
||||||
|
make conan-release
|
||||||
|
make buildr
|
||||||
|
|
||||||
|
# Create package
|
||||||
|
make conan-create
|
||||||
|
```
|
||||||
|
|
||||||
|
## Current Limitations
|
||||||
|
|
||||||
|
- Custom dependencies (folding, fimdlp, arff-files) are not available in ConanCenter
|
||||||
|
- These need to be built as custom Conan packages or replaced with alternatives
|
||||||
|
- The conanfile.py currently comments out these dependencies
|
||||||
|
|
||||||
|
## Creating Custom Dependency Packages
|
||||||
|
|
||||||
|
For the custom dependencies, you'll need to create Conan recipes:
|
||||||
|
|
||||||
|
1. **folding**: Cross-validation library
|
||||||
|
2. **fimdlp**: Discretization library
|
||||||
|
3. **arff-files**: ARFF file format parser
|
||||||
|
|
||||||
|
Contact the maintainer or create custom recipes for these packages.
|
||||||
|
|
||||||
|
## Package Distribution
|
||||||
|
|
||||||
|
Once custom dependencies are resolved:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create and test package
|
||||||
|
make conan-create
|
||||||
|
|
||||||
|
# Upload to your remote
|
||||||
|
conan upload bayesnet/1.1.2@user/channel -r myremote
|
||||||
|
```
|
47
Makefile
47
Makefile
@@ -1,6 +1,6 @@
|
|||||||
SHELL := /bin/bash
|
SHELL := /bin/bash
|
||||||
.DEFAULT_GOAL := help
|
.DEFAULT_GOAL := help
|
||||||
.PHONY: viewcoverage coverage setup help install uninstall diagrams buildr buildd test clean debug release sample updatebadge doc doc-install init clean-test
|
.PHONY: viewcoverage coverage setup help install uninstall diagrams buildr buildd test clean debug release sample updatebadge doc doc-install init clean-test conan-init conan-debug conan-release conan-create conan-upload conan-clean
|
||||||
|
|
||||||
f_release = build_Release
|
f_release = build_Release
|
||||||
f_debug = build_Debug
|
f_debug = build_Debug
|
||||||
@@ -226,3 +226,48 @@ help: ## Show help message
|
|||||||
printf '\033[0m'; \
|
printf '\033[0m'; \
|
||||||
printf "%s\n" $$help_info; \
|
printf "%s\n" $$help_info; \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Conan package manager targets
|
||||||
|
# ============================
|
||||||
|
|
||||||
|
conan-init: ## Install dependencies using Conan
|
||||||
|
@echo ">>> Installing dependencies with Conan"
|
||||||
|
@which conan || (echo ">>> Please install Conan first: pip install conan"; exit 1)
|
||||||
|
@conan profile detect --force
|
||||||
|
@conan install . --build=missing
|
||||||
|
@echo ">>> Done"
|
||||||
|
|
||||||
|
conan-debug: ## Build debug version using Conan
|
||||||
|
@echo ">>> Building Debug BayesNet with Conan..."
|
||||||
|
@if [ -d ./$(f_debug) ]; then rm -rf ./$(f_debug); fi
|
||||||
|
@mkdir $(f_debug)
|
||||||
|
@conan install . -s build_type=Debug -o enable_testing=True -o enable_coverage=True --build=missing -of $(f_debug)
|
||||||
|
@cmake -S . -B $(f_debug) -D CMAKE_BUILD_TYPE=Debug -D ENABLE_TESTING=ON -D CODE_COVERAGE=ON
|
||||||
|
@echo ">>> Done"
|
||||||
|
|
||||||
|
conan-release: ## Build release version using Conan
|
||||||
|
@echo ">>> Building Release BayesNet with Conan..."
|
||||||
|
@if [ -d ./$(f_release) ]; then rm -rf ./$(f_release); fi
|
||||||
|
@mkdir $(f_release)
|
||||||
|
@conan install . -s build_type=Release --build=missing -of $(f_release)
|
||||||
|
@cmake -S . -B $(f_release) -D CMAKE_BUILD_TYPE=Release
|
||||||
|
@echo ">>> Done"
|
||||||
|
|
||||||
|
conan-create: ## Create Conan package
|
||||||
|
@echo ">>> Creating Conan package..."
|
||||||
|
@conan create . --build=missing
|
||||||
|
@echo ">>> Done"
|
||||||
|
|
||||||
|
profile ?= default
|
||||||
|
remote ?= conancenter
|
||||||
|
conan-upload: ## Upload package to Conan remote (profile=default remote=conancenter)
|
||||||
|
@echo ">>> Uploading to Conan remote $(remote) with profile $(profile)..."
|
||||||
|
@conan upload bayesnet/$(shell grep version conanfile.py | cut -d'"' -f2) -r $(remote) --confirm
|
||||||
|
@echo ">>> Done"
|
||||||
|
|
||||||
|
conan-clean: ## Clean Conan cache and build folders
|
||||||
|
@echo ">>> Cleaning Conan cache and build folders..."
|
||||||
|
@conan remove "*" --confirm
|
||||||
|
@if test -d "$(f_release)" ; then rm -rf "$(f_release)"; fi
|
||||||
|
@if test -d "$(f_debug)" ; then rm -rf "$(f_debug)"; fi
|
||||||
|
@echo ">>> Done"
|
||||||
|
10
conandata.yml
Normal file
10
conandata.yml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
sources:
|
||||||
|
"1.1.2":
|
||||||
|
url: "https://github.com/rmontanana/BayesNet/archive/v1.1.2.tar.gz"
|
||||||
|
sha256: "placeholder_sha256" # Replace with actual SHA256 when releasing
|
||||||
|
"1.0.7":
|
||||||
|
url: "https://github.com/rmontanana/BayesNet/archive/v1.0.7.tar.gz"
|
||||||
|
sha256: "placeholder_sha256" # Replace with actual SHA256 when releasing
|
||||||
|
|
||||||
|
patches:
|
||||||
|
# Add patches here if needed for specific versions
|
87
conanfile.py
Normal file
87
conanfile.py
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
from conan import ConanFile
|
||||||
|
from conan.tools.cmake import CMakeToolchain, CMake, cmake_layout, CMakeDeps
|
||||||
|
from conan.tools.files import copy, save
|
||||||
|
import os
|
||||||
|
|
||||||
|
class BayesNetConan(ConanFile):
|
||||||
|
name = "bayesnet"
|
||||||
|
version = "1.1.2"
|
||||||
|
|
||||||
|
# Binary configuration
|
||||||
|
settings = "os", "compiler", "build_type", "arch"
|
||||||
|
options = {
|
||||||
|
"shared": [True, False],
|
||||||
|
"fPIC": [True, False],
|
||||||
|
"enable_testing": [True, False],
|
||||||
|
"enable_coverage": [True, False]
|
||||||
|
}
|
||||||
|
default_options = {
|
||||||
|
"shared": False,
|
||||||
|
"fPIC": True,
|
||||||
|
"enable_testing": False,
|
||||||
|
"enable_coverage": False
|
||||||
|
}
|
||||||
|
|
||||||
|
# Sources are located in the same place as this recipe, copy them to the recipe
|
||||||
|
exports_sources = "CMakeLists.txt", "bayesnet/*", "config/*", "cmake/*", "tests/*", "bayesnetConfig.cmake.in"
|
||||||
|
|
||||||
|
def config_options(self):
|
||||||
|
if self.settings.os == "Windows":
|
||||||
|
del self.options.fPIC
|
||||||
|
|
||||||
|
def configure(self):
|
||||||
|
if self.options.shared:
|
||||||
|
self.options.rm_safe("fPIC")
|
||||||
|
|
||||||
|
def requirements(self):
|
||||||
|
# Core dependencies
|
||||||
|
self.requires("libtorch/2.1.2")
|
||||||
|
self.requires("nlohmann_json/3.11.3")
|
||||||
|
|
||||||
|
# Custom dependencies - these will need to be available in your Conan center or custom remotes
|
||||||
|
# For now, we'll comment them out and provide instructions in the README
|
||||||
|
self.requires("folding/1.1.1@user/channel") # Custom package
|
||||||
|
self.requires("fimdlp/2.1.0@user/channel") # Custom package
|
||||||
|
self.requires("arff-files/1.2.0@user/channel") # Custom package
|
||||||
|
|
||||||
|
# Test dependencies
|
||||||
|
if self.options.enable_testing:
|
||||||
|
self.requires("catch2/3.8.1")
|
||||||
|
|
||||||
|
def build_requirements(self):
|
||||||
|
self.build_requires("cmake/[>=3.27]")
|
||||||
|
|
||||||
|
def layout(self):
|
||||||
|
cmake_layout(self)
|
||||||
|
|
||||||
|
def generate(self):
|
||||||
|
deps = CMakeDeps(self)
|
||||||
|
deps.generate()
|
||||||
|
tc = CMakeToolchain(self)
|
||||||
|
tc.variables["ENABLE_TESTING"] = self.options.enable_testing
|
||||||
|
tc.variables["CODE_COVERAGE"] = self.options.enable_coverage
|
||||||
|
tc.generate()
|
||||||
|
|
||||||
|
def build(self):
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.configure()
|
||||||
|
cmake.build()
|
||||||
|
|
||||||
|
if self.options.enable_testing:
|
||||||
|
# Run tests only if we're building with testing enabled
|
||||||
|
self.run("ctest --output-on-failure", cwd=self.build_folder)
|
||||||
|
|
||||||
|
def package(self):
|
||||||
|
copy(self, "LICENSE", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses"))
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.install()
|
||||||
|
|
||||||
|
def package_info(self):
|
||||||
|
self.cpp_info.libs = ["bayesnet"]
|
||||||
|
self.cpp_info.includedirs = ["include"]
|
||||||
|
self.cpp_info.set_property("cmake_find_mode", "both")
|
||||||
|
self.cpp_info.set_property("cmake_target_name", "bayesnet::bayesnet")
|
||||||
|
|
||||||
|
# Add compiler flags that might be needed
|
||||||
|
if self.settings.os == "Linux":
|
||||||
|
self.cpp_info.system_libs = ["pthread"]
|
9
test_package/CMakeLists.txt
Normal file
9
test_package/CMakeLists.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.27)
|
||||||
|
project(test_bayesnet)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
|
find_package(bayesnet REQUIRED)
|
||||||
|
|
||||||
|
add_executable(test_bayesnet test_bayesnet.cpp)
|
||||||
|
target_link_libraries(test_bayesnet bayesnet::bayesnet)
|
26
test_package/conanfile.py
Normal file
26
test_package/conanfile.py
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
from conan import ConanFile
|
||||||
|
from conan.tools.cmake import CMake, cmake_layout
|
||||||
|
from conan.tools.build import can_run
|
||||||
|
import os
|
||||||
|
|
||||||
|
class BayesNetTestConan(ConanFile):
|
||||||
|
settings = "os", "compiler", "build_type", "arch"
|
||||||
|
|
||||||
|
def requirements(self):
|
||||||
|
self.requires(self.tested_reference_str)
|
||||||
|
|
||||||
|
def build_requirements(self):
|
||||||
|
self.build_requires("cmake/[>=3.27]")
|
||||||
|
|
||||||
|
def layout(self):
|
||||||
|
cmake_layout(self)
|
||||||
|
|
||||||
|
def build(self):
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.configure()
|
||||||
|
cmake.build()
|
||||||
|
|
||||||
|
def test(self):
|
||||||
|
if can_run(self):
|
||||||
|
cmd = os.path.join(self.cpp.build.bindirs[0], "test_bayesnet")
|
||||||
|
self.run(cmd, env="conanrun")
|
26
test_package/test_bayesnet.cpp
Normal file
26
test_package/test_bayesnet.cpp
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <bayesnet/BaseClassifier.h>
|
||||||
|
#include <bayesnet/classifiers/TAN.h>
|
||||||
|
#include <bayesnet/network/Network.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::cout << "Testing BayesNet library integration..." << std::endl;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Test basic instantiation
|
||||||
|
bayesnet::Network network;
|
||||||
|
std::cout << "✓ Network class instantiated successfully" << std::endl;
|
||||||
|
|
||||||
|
// Test TAN classifier instantiation
|
||||||
|
bayesnet::TAN tan;
|
||||||
|
std::cout << "✓ TAN classifier instantiated successfully" << std::endl;
|
||||||
|
|
||||||
|
std::cout << "✓ All basic tests passed!" << std::endl;
|
||||||
|
std::cout << "BayesNet library is working correctly." << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
} catch (const std::exception& e) {
|
||||||
|
std::cerr << "✗ Test failed: " << e.what() << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
@@ -16,10 +16,10 @@
|
|||||||
#include "TestUtils.h"
|
#include "TestUtils.h"
|
||||||
|
|
||||||
std::map<std::string, std::string> modules = {
|
std::map<std::string, std::string> modules = {
|
||||||
{ "mdlp", "2.0.1" },
|
{ "mdlp", "2.1.0" },
|
||||||
{ "Folding", "1.1.1" },
|
{ "Folding", "1.1.1" },
|
||||||
{ "json", "3.11" },
|
{ "json", "3.11" },
|
||||||
{ "ArffFiles", "1.1.0" }
|
{ "ArffFiles", "1.2.0" }
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_CASE("MDLP", "[Modules]")
|
TEST_CASE("MDLP", "[Modules]")
|
||||||
|
Reference in New Issue
Block a user