added test script to test feature parity of ezgame.formulas with ns.formulas functions
This commit is contained in:
parent
f12de39c91
commit
d5e9028750
190
src/ezgame/formulas/test.ts
Normal file
190
src/ezgame/formulas/test.ts
Normal file
|
|
@ -0,0 +1,190 @@
|
||||||
|
import { ezgame } from "@/ezgame";
|
||||||
|
import { randomNumber } from "@/utils/utils";
|
||||||
|
import { NS } from "@ns";
|
||||||
|
|
||||||
|
interface TestCase {
|
||||||
|
name: string;
|
||||||
|
fn: (ns: NS, serverName: string) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
// add servers to be tested against here
|
||||||
|
const serverNames: string[] = ["n00dles", "foodnstuff", "joesguns", "sigma-cosmetics", "max-hardware"];
|
||||||
|
|
||||||
|
// test generator for gang
|
||||||
|
const gangTests = (ns: NS, serverName: string): TestCase[] => [
|
||||||
|
{
|
||||||
|
name: "gang.ascensionMultiplier",
|
||||||
|
fn: (ns, serverName) => {
|
||||||
|
const points = randomNumber(0, 1e9);
|
||||||
|
const testResult = ezgame.formulas.gang.ascensionMultiplier(points);
|
||||||
|
const actualResult = ns.formulas.gang.ascensionMultiplier(points);
|
||||||
|
if (testResult !== actualResult) {
|
||||||
|
throw new Error(`expected ${actualResult}, got ${testResult}`);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "gang.ascensionPointsGain",
|
||||||
|
fn: (ns, serverName) => {
|
||||||
|
const exp = randomNumber(0, 1e9);
|
||||||
|
const testResult = ezgame.formulas.gang.ascensionPointsGain(exp);
|
||||||
|
const actualResult = ns.formulas.gang.ascensionPointsGain(exp);
|
||||||
|
if (testResult !== actualResult) {
|
||||||
|
throw new Error(`expected ${actualResult}, got ${testResult}`);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// TODO: moneyGain() cannot do yet
|
||||||
|
// TODO: respectGain() cannot do yet
|
||||||
|
// TODO: wantedLevelGain() cannot do yet
|
||||||
|
// TODO: wantedPenalty() cannot do yet
|
||||||
|
];
|
||||||
|
|
||||||
|
// test generator for hacking
|
||||||
|
const hackingTests = (ns: NS, serverName: string): TestCase[] => [
|
||||||
|
{
|
||||||
|
name: "hacking.growAmount",
|
||||||
|
fn: (ns, serverName) => {
|
||||||
|
const server = ns.getServer(serverName);
|
||||||
|
const player = ns.getPlayer();
|
||||||
|
const threads = randomNumber(1, 100);
|
||||||
|
const cores = randomNumber(1, 16);
|
||||||
|
const testResult = ezgame.formulas.hacking.growAmount(server, player, threads, cores);
|
||||||
|
const actualResult = ns.formulas.hacking.growAmount(server, player, threads, cores);
|
||||||
|
if (testResult !== actualResult) {
|
||||||
|
throw new Error(`expected ${actualResult}, got ${testResult}`);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "hacking.growPercent",
|
||||||
|
fn: (ns, serverName) => {
|
||||||
|
const server = ns.getServer(serverName);
|
||||||
|
const threads = randomNumber(1, 100);
|
||||||
|
const player = ns.getPlayer();
|
||||||
|
const cores = randomNumber(1, 16);
|
||||||
|
const testResult = ezgame.formulas.hacking.growPercent(server, threads, player, cores);
|
||||||
|
const actualResult = ns.formulas.hacking.growPercent(server, threads, player, cores);
|
||||||
|
if (testResult !== actualResult) {
|
||||||
|
throw new Error(`expected ${actualResult}, got ${testResult}`);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "hacking.growThreads",
|
||||||
|
fn: (ns, serverName) => {
|
||||||
|
const server = ns.getServer(serverName);
|
||||||
|
const player = ns.getPlayer();
|
||||||
|
// if moneyMax is not set, use a large number to ensure growThreads returns a valid number of threads
|
||||||
|
// anyways if it is above moneyMax, the function should clamp it to the max (hopefully)
|
||||||
|
const targetMoney = server.moneyMax ?? 1e120;
|
||||||
|
const cores = randomNumber(1, 16);
|
||||||
|
const testResult = ezgame.formulas.hacking.growThreads(server, player, targetMoney, cores);
|
||||||
|
const actualResult = ns.formulas.hacking.growThreads(server, player, targetMoney, cores);
|
||||||
|
if (testResult !== actualResult) {
|
||||||
|
throw new Error(`expected ${actualResult}, got ${testResult}`);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "hacking.growTime",
|
||||||
|
fn: (ns, serverName) => {
|
||||||
|
const server = ns.getServer(serverName);
|
||||||
|
const player = ns.getPlayer();
|
||||||
|
const testResult = ezgame.formulas.hacking.growTime(server, player);
|
||||||
|
const actualResult = ns.formulas.hacking.growTime(server, player);
|
||||||
|
if (testResult !== actualResult) {
|
||||||
|
throw new Error(`expected ${actualResult}, got ${testResult}`);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "hacking.hackChance",
|
||||||
|
fn: (ns, serverName) => {
|
||||||
|
const server = ns.getServer(serverName);
|
||||||
|
const player = ns.getPlayer();
|
||||||
|
const testResult = ezgame.formulas.hacking.hackChance(server, player);
|
||||||
|
const actualResult = ns.formulas.hacking.hackChance(server, player);
|
||||||
|
if (testResult !== actualResult) {
|
||||||
|
throw new Error(`expected ${actualResult}, got ${testResult}`);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "hacking.hackExp",
|
||||||
|
fn: (ns, serverName) => {
|
||||||
|
const server = ns.getServer(serverName);
|
||||||
|
const player = ns.getPlayer();
|
||||||
|
const testResult = ezgame.formulas.hacking.hackExp(server, player);
|
||||||
|
const actualResult = ns.formulas.hacking.hackExp(server, player);
|
||||||
|
if (testResult !== actualResult) {
|
||||||
|
throw new Error(`expected ${actualResult}, got ${testResult}`);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "hacking.hackPercent",
|
||||||
|
fn: (ns, serverName) => {
|
||||||
|
const server = ns.getServer(serverName);
|
||||||
|
const player = ns.getPlayer();
|
||||||
|
const testResult = ezgame.formulas.hacking.hackPercent(server, player);
|
||||||
|
const actualResult = ns.formulas.hacking.hackPercent(server, player);
|
||||||
|
if (testResult !== actualResult) {
|
||||||
|
throw new Error(`expected ${actualResult}, got ${testResult}`);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "hacking.hackTime",
|
||||||
|
fn: (ns, serverName) => {
|
||||||
|
const server = ns.getServer(serverName);
|
||||||
|
const player = ns.getPlayer();
|
||||||
|
const testResult = ezgame.formulas.hacking.hackTime(server, player);
|
||||||
|
const actualResult = ns.formulas.hacking.hackTime(server, player);
|
||||||
|
if (testResult !== actualResult) {
|
||||||
|
throw new Error(`expected ${actualResult}, got ${testResult}`);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "hacking.weakenTime",
|
||||||
|
fn: (ns, serverName) => {
|
||||||
|
const server = ns.getServer(serverName);
|
||||||
|
const player = ns.getPlayer();
|
||||||
|
const testResult = ezgame.formulas.hacking.weakenTime(server, player);
|
||||||
|
const actualResult = ns.formulas.hacking.weakenTime(server, player);
|
||||||
|
if (testResult !== actualResult) {
|
||||||
|
throw new Error(`expected ${actualResult}, got ${testResult}`);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export const main = (ns: NS) => {
|
||||||
|
const passedTests: string[] = [];
|
||||||
|
const failedTests: string[] = [];
|
||||||
|
|
||||||
|
// gather all the test generators here
|
||||||
|
const testGenerators = [gangTests, hackingTests];
|
||||||
|
|
||||||
|
// run tests for each server and generator
|
||||||
|
for (const serverName of serverNames) {
|
||||||
|
for (const generator of testGenerators) {
|
||||||
|
const tests = generator(ns, serverName);
|
||||||
|
for (const test of tests) {
|
||||||
|
try {
|
||||||
|
test.fn(ns, serverName);
|
||||||
|
passedTests.push(`[${serverName}] ${test.name}`);
|
||||||
|
} catch (error) {
|
||||||
|
failedTests.push(`[${serverName}] ${test.name}: ${error}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// print results
|
||||||
|
ns.tprint(`Passed: ${passedTests.length}/${passedTests.length + failedTests.length}`);
|
||||||
|
passedTests.forEach((t) => ns.tprint(` ✓ ${t}`));
|
||||||
|
ns.tprint(`Failed: ${failedTests.length}/${passedTests.length + failedTests.length}`);
|
||||||
|
failedTests.forEach((t) => ns.tprint(` ✗ ${t}`));
|
||||||
|
};
|
||||||
Loading…
Reference in a new issue