2024-11-07 15:33:40 +00:00
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
|
pragma solidity ^0.8.19;
|
|
|
|
|
|
|
|
|
|
import "forge-std/Test.sol";
|
|
|
|
|
import "./CSVHelper.sol";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @title CSVManager
|
|
|
|
|
* @dev An abstract contract that manages CSV creation, row appending, and writing to file.
|
|
|
|
|
* Contracts that inherit this contract can use the CSV functionality without managing the CSV string directly.
|
|
|
|
|
*/
|
|
|
|
|
abstract contract CSVManager is Test {
|
|
|
|
|
using CSVHelper for *;
|
|
|
|
|
|
|
|
|
|
string internal csv;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @notice Creates the header for the CSV file.
|
|
|
|
|
* This function should be called in the `setUp` function of derived contracts.
|
|
|
|
|
*/
|
|
|
|
|
function initializePositionsCSV() internal {
|
|
|
|
|
csv = CSVHelper.createPositionsHeader();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function initializeTimeSeriesCSV() internal {
|
|
|
|
|
csv = CSVHelper.createTimeSeriesHeader();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @notice Appends a new row to the CSV string.
|
|
|
|
|
* @param newRow The new row to append.
|
|
|
|
|
*/
|
|
|
|
|
function appendCSVRow(string memory newRow) internal {
|
|
|
|
|
csv = CSVHelper.appendRow(csv, newRow);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @notice Writes the CSV string to a file.
|
|
|
|
|
* @param filePath The path where the CSV file will be saved.
|
|
|
|
|
*/
|
|
|
|
|
function writeCSVToFile(string memory filePath) internal {
|
|
|
|
|
vm.writeFile(filePath, csv);
|
|
|
|
|
}
|
2025-08-19 13:30:18 +02:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @notice Clears the CSV buffer. Should be called between runs to avoid data accumulation.
|
|
|
|
|
*/
|
|
|
|
|
function clearCSV() internal {
|
|
|
|
|
csv = "";
|
|
|
|
|
}
|
2024-11-07 15:33:40 +00:00
|
|
|
}
|