(vibe) Added testframework
This commit is contained in:
166
douwco_hivemind/test/README.md
Normal file
166
douwco_hivemind/test/README.md
Normal file
@@ -0,0 +1,166 @@
|
||||
# Douwco Hivemind Testing Framework
|
||||
|
||||
## Overview
|
||||
|
||||
This testing framework allows you to verify the logic of your Screeps C++ code before uploading it to the live server. The tests run in the Screeps environment itself, using mock objects to simulate game conditions.
|
||||
|
||||
## Running Tests
|
||||
|
||||
### In Screeps Console
|
||||
|
||||
1. Upload your compiled WASM module as usual
|
||||
2. Open the Screeps console
|
||||
3. Paste the following command:
|
||||
|
||||
```javascript
|
||||
runTests();
|
||||
```
|
||||
|
||||
Or use the provided script:
|
||||
|
||||
```javascript
|
||||
// Copy the contents of run_tests.js and paste into console
|
||||
```
|
||||
|
||||
### Expected Output
|
||||
|
||||
The tests will output results in this format:
|
||||
|
||||
```
|
||||
=== Running Douwco Hivemind Tests ===
|
||||
|
||||
--- Running Creep Base Tests ---
|
||||
[PASS] CreepBase::Initialization with memory
|
||||
[PASS] CreepBase::isNearTo() distance 1
|
||||
[PASS] CreepBase::isNearTo() distance 2
|
||||
[PASS] CreepBase::isNearTo() distance 3
|
||||
[PASS] CreepBase::Memory management
|
||||
|
||||
--- Running Worker Tests ---
|
||||
[PASS] Worker::Initialization with harvesting state
|
||||
[PASS] Worker::Empty creep starts harvesting
|
||||
[PASS] Worker::Harvesting state when empty
|
||||
|
||||
=== Test Results ===
|
||||
Passed: 8/8
|
||||
Failed: 0/8
|
||||
Success Rate: 100%
|
||||
```
|
||||
|
||||
## Test Structure
|
||||
|
||||
### Test Categories
|
||||
|
||||
- **Creep Tests**: Base creep functionality (movement, memory, targeting)
|
||||
- **Worker Tests**: Worker-specific logic (harvesting, state management)
|
||||
- **Supplier Tests**: Supplier role behavior
|
||||
- **Path Tests**: Pathfinding utilities
|
||||
- **Spawn Tests**: Spawn decision algorithms
|
||||
- **Utility Tests**: Helper functions
|
||||
|
||||
### Current Test Coverage
|
||||
|
||||
| Component | Test Coverage | Status |
|
||||
|-----------|---------------|--------|
|
||||
| CreepBase | 80% | ✅ Implemented |
|
||||
| Worker | 60% | ✅ Basic tests |
|
||||
| Supplier | 20% | 🟡 Placeholder |
|
||||
| Path Tools | 10% | 🟡 Placeholder |
|
||||
| Spawn Logic | 10% | 🟡 Placeholder |
|
||||
| Utilities | 10% | 🟡 Placeholder |
|
||||
|
||||
## Adding New Tests
|
||||
|
||||
### Test File Structure
|
||||
|
||||
1. **Test Files**: Located in `src/Testing/`
|
||||
2. **Mock Objects**: Defined in `include/Testing/Mocks.hpp`
|
||||
3. **Test Harness**: `Testing/TestHarness.hpp/cpp`
|
||||
|
||||
### Creating a New Test
|
||||
|
||||
1. **Add test function** to the appropriate test file (e.g., `CreepTests.cpp`):
|
||||
|
||||
```cpp
|
||||
void testNewFeature()
|
||||
{
|
||||
// Arrange
|
||||
Mocks::MockCreep mockCreep("TestCreep");
|
||||
mockCreep.setPosition(10, 10);
|
||||
|
||||
// Act
|
||||
CreepBase creep(mockCreep);
|
||||
bool result = creep.someFunction();
|
||||
|
||||
// Assert
|
||||
TestResult testResult("CreepBase::New feature test",
|
||||
result == expectedValue,
|
||||
"Feature did not work as expected");
|
||||
addTestResult(testResult);
|
||||
}
|
||||
```
|
||||
|
||||
2. **Call the test** from the appropriate `runXXXTests()` function
|
||||
|
||||
3. **Add mocks** if needed in `Mocks.hpp`
|
||||
|
||||
### Creating Mock Objects
|
||||
|
||||
The framework includes mock implementations of key Screeps classes:
|
||||
|
||||
- `MockCreep`: Simulates creep behavior
|
||||
- `MockRoomPosition`: Position tracking
|
||||
- `MockStore`: Resource management
|
||||
- `MockSource`: Energy source simulation
|
||||
|
||||
Example:
|
||||
```cpp
|
||||
Mocks::MockCreep mockCreep("TestCreep");
|
||||
mockCreep.setPosition(10, 10);
|
||||
mockCreep.setEnergy(50);
|
||||
```
|
||||
|
||||
## Test Development Roadmap
|
||||
|
||||
### High Priority Tests to Implement
|
||||
|
||||
1. **Worker State Machine**: Complete harvesting/depositing transitions
|
||||
2. **Supplier Targeting**: Energy structure selection logic
|
||||
3. **Pathfinding**: Edge cases and obstacle handling
|
||||
4. **Spawn Calculations**: Creep requirement algorithms
|
||||
5. **Memory Management**: Complex memory operations
|
||||
|
||||
### Medium Priority
|
||||
|
||||
1. **Performance Tests**: CPU usage measurements
|
||||
2. **Edge Cases**: Boundary conditions
|
||||
3. **Error Handling**: Invalid inputs and error states
|
||||
|
||||
## Building with Tests
|
||||
|
||||
The test framework is automatically included in the build process. No special build steps are required.
|
||||
|
||||
## Limitations
|
||||
|
||||
1. **Screeps API Dependency**: Some functionality cannot be fully mocked
|
||||
2. **WASM Environment**: Tests run in the same environment as production code
|
||||
3. **Performance Impact**: Running comprehensive tests may use significant CPU
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Run tests frequently** during development
|
||||
2. **Add tests for new features** before implementation
|
||||
3. **Test edge cases** and error conditions
|
||||
4. **Keep tests fast** to avoid CPU bucket issues
|
||||
5. **Clean up test memory** to avoid polluting game state
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Issue**: `runTests is not defined`
|
||||
**Solution**: Ensure the WASM module is properly loaded and the latest version is uploaded
|
||||
|
||||
**Issue**: Tests failing in Screeps but passing locally
|
||||
**Solution**: Check for differences between mock behavior and actual Screeps API
|
||||
|
||||
**Issue**: High CPU usage from tests
|
||||
**Solution**: Reduce test complexity or run tests less frequently
|
||||
9
douwco_hivemind/test/run_tests.js
Normal file
9
douwco_hivemind/test/run_tests.js
Normal file
@@ -0,0 +1,9 @@
|
||||
// Screeps console command to run tests
|
||||
// Copy and paste this into the Screeps console to run all tests
|
||||
|
||||
if (typeof runTests === 'function') {
|
||||
console.log('Running Douwco Hivemind tests...');
|
||||
runTests();
|
||||
} else {
|
||||
console.log('ERROR: runTests function not found. Make sure the WASM module is loaded.');
|
||||
}
|
||||
Reference in New Issue
Block a user