import {
  run,
  squiggleExpression,
  errorValue,
  result,
} from "../../src/js/index";
import { testRun } from "./TestHelpers";
import * as fc from "fast-check";

describe("Squiggle's parser is whitespace insensitive", () => {
  test("when assigning a distribution to a name and calling that name", () => {
    // intersperse varying amounts of whitespace in a squiggle string
    let squiggleString = (
      a: string,
      b: string,
      c: string,
      d: string,
      e: string,
      f: string,
      g: string,
      h: string
    ): string => {
      return `theDist${a}=${b}beta(${c}4${d},${e}5e1)${f};${g}theDist${h}`;
    };
    let squiggleOutput = testRun(
      squiggleString("", "", "", "", "", "", "", "")
    );

    // Add "\n" to this when multiline is introduced.
    let whitespaceGen = () => {
      return fc.constantFrom("", " ", "\t", "  ", "   ", "    ", "     ");
    };

    fc.assert(
      fc.property(
        whitespaceGen(),
        whitespaceGen(),
        whitespaceGen(),
        whitespaceGen(),
        whitespaceGen(),
        whitespaceGen(),
        whitespaceGen(),
        whitespaceGen(),
        (a, b, c, d, e, f, g, h) => {
          expect(testRun(squiggleString(a, b, c, d, e, f, g, h))).toEqual(
            squiggleOutput
          );
        }
      )
    );
  });
});