mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-17 06:48:42 +02:00
185 lines
3.4 KiB
TypeScript
185 lines
3.4 KiB
TypeScript
import { CodingContractName } from "../../../src/Enums";
|
|
import { largestRectangle } from "../../../src/CodingContract/contracts/LargestRectangle";
|
|
|
|
const contract = largestRectangle[CodingContractName.LargestRectangleInAMatrix];
|
|
|
|
describe("LargestRectangle", () => {
|
|
test("empty matrix", () => {
|
|
const data = Array.from({ length: 5 }, () => Array<0>(3).fill(0));
|
|
expect(contract.desc(data)).toContain(`
|
|
[
|
|
[0,0,0],
|
|
[0,0,0],
|
|
[0,0,0],
|
|
[0,0,0],
|
|
[0,0,0]
|
|
]
|
|
`);
|
|
expect(contract.getAnswer(data)).toEqual([
|
|
[0, 0],
|
|
[4, 2],
|
|
]);
|
|
expect(
|
|
contract.solver(data, [
|
|
[0, 0],
|
|
[4, 2],
|
|
]),
|
|
).toBe(true);
|
|
expect(
|
|
contract.solver(data, [
|
|
[4, 2],
|
|
[0, 0],
|
|
]),
|
|
).toBe(true);
|
|
expect(
|
|
contract.solver(data, [
|
|
[4, 0],
|
|
[0, 2],
|
|
]),
|
|
).toBe(true);
|
|
expect(
|
|
contract.solver(data, [
|
|
[0, 2],
|
|
[4, 0],
|
|
]),
|
|
).toBe(true);
|
|
expect(
|
|
contract.solver(data, [
|
|
[0, 0],
|
|
[2, 4],
|
|
]),
|
|
).toBe(false);
|
|
expect(
|
|
contract.solver(data, [
|
|
[0, 0],
|
|
[1, 1],
|
|
]),
|
|
).toBe(false);
|
|
});
|
|
|
|
test("single one", () => {
|
|
const data = Array.from({ length: 5 }, () => Array<0 | 1>(5).fill(0));
|
|
data[1][1] = 1;
|
|
expect(contract.desc(data)).toContain(`
|
|
[
|
|
[0,0,0,0,0],
|
|
[0,1,0,0,0],
|
|
[0,0,0,0,0],
|
|
[0,0,0,0,0],
|
|
[0,0,0,0,0]
|
|
]
|
|
`);
|
|
expect(contract.getAnswer(data)).toEqual([
|
|
[2, 0],
|
|
[4, 4],
|
|
]);
|
|
expect(
|
|
contract.solver(data, [
|
|
[0, 2],
|
|
[4, 4],
|
|
]),
|
|
).toBe(true);
|
|
expect(
|
|
contract.solver(data, [
|
|
[4, 4],
|
|
[0, 2],
|
|
]),
|
|
).toBe(true);
|
|
expect(
|
|
contract.solver(data, [
|
|
[4, 2],
|
|
[0, 4],
|
|
]),
|
|
).toBe(true);
|
|
expect(
|
|
contract.solver(data, [
|
|
[0, 4],
|
|
[4, 2],
|
|
]),
|
|
).toBe(true);
|
|
expect(
|
|
contract.solver(data, [
|
|
[2, 0],
|
|
[4, 4],
|
|
]),
|
|
).toBe(true);
|
|
expect(
|
|
contract.solver(data, [
|
|
[1, 0],
|
|
[4, 4],
|
|
]),
|
|
).toBe(false);
|
|
expect(
|
|
contract.solver(data, [
|
|
[0, 0],
|
|
[4, 4],
|
|
]),
|
|
).toBe(false);
|
|
expect(
|
|
contract.solver(data, [
|
|
[-1, 2],
|
|
[4, 4],
|
|
]),
|
|
).toBe(false);
|
|
});
|
|
test("single zero", () => {
|
|
const data = Array.from({ length: 1 }, () => Array<0 | 1>(8).fill(1));
|
|
data[0][3] = 0;
|
|
expect(contract.desc(data)).toContain(`
|
|
[
|
|
[1,1,1,0,1,1,1,1]
|
|
]
|
|
`);
|
|
expect(contract.getAnswer(data)).toEqual([
|
|
[0, 3],
|
|
[0, 3],
|
|
]);
|
|
expect(
|
|
contract.solver(data, [
|
|
[0, 3],
|
|
[0, 3],
|
|
]),
|
|
).toBe(true);
|
|
expect(
|
|
contract.solver(data, [
|
|
[0, 3],
|
|
[0, 4],
|
|
]),
|
|
).toBe(false);
|
|
expect(
|
|
contract.solver(data, [
|
|
[0, 2],
|
|
[0, 3],
|
|
]),
|
|
).toBe(false);
|
|
expect(
|
|
contract.solver(data, [
|
|
[0, 3],
|
|
[1, 3],
|
|
]),
|
|
).toBe(false);
|
|
expect(
|
|
contract.solver(data, [
|
|
[0, 0],
|
|
[0, 7],
|
|
]),
|
|
).toBe(false);
|
|
});
|
|
test("generate doesn't return all ones", () => {
|
|
const origRandom = Math.random;
|
|
let calls = 0;
|
|
const mockRandom = () => {
|
|
if (calls++ < 100) {
|
|
return 0;
|
|
}
|
|
return origRandom();
|
|
};
|
|
try {
|
|
Math.random = mockRandom;
|
|
expect(contract.generate().flat()).toContain(0);
|
|
} finally {
|
|
Math.random = origRandom;
|
|
}
|
|
});
|
|
});
|