import { readTestProgram, executeProgram } from "../../test-utils";
import Engine from "../runtime";

/**
 * All test programs are picked up from https://esolangs.org/wiki/Deadfish.
 */

describe("Test programs", () => {
  // Standard hello-world program
  test("hello world", async () => {
    const code = readTestProgram(__dirname, "helloworld");
    const result = await executeProgram(new Engine(), code);
    expect(result.output).toBe("7210110810811132119111114108100");
    expect(result.rendererState.value).toBe(100);
  });

  // Test program 1, output 0
  test("output zero (1)", async () => {
    const code = readTestProgram(__dirname, "zero1");
    const result = await executeProgram(new Engine(), code);
    expect(result.output).toBe("0");
    expect(result.rendererState.value).toBe(0);
  });

  // Test program 2, output 0
  test("output zero (2)", async () => {
    const code = readTestProgram(__dirname, "zero2");
    const result = await executeProgram(new Engine(), code);
    expect(result.output).toBe("0");
    expect(result.rendererState.value).toBe(0);
  });

  // Test program 3, output 288
  test("output 288", async () => {
    const code = readTestProgram(__dirname, "288");
    const result = await executeProgram(new Engine(), code);
    expect(result.output).toBe("288");
    expect(result.rendererState.value).toBe(288);
  });
});