import { processMemory } from './MemoryPane'
import { enginelessExecutor } from '../../../lib/testHelpers'
import { assertParse, initPromise, ProgramMemory } from '../../../lang/wasm'

beforeAll(async () => {
  await initPromise
})

describe('processMemory', () => {
  it('should grab the values and remove and geo data', async () => {
    // Enable rotations #152
    const code = `
  myVar = 5
  fn myFn = (a) => {
    return a - 2
  }
  otherVar = myFn(5)

  theExtrude = startSketchOn('XY')
    |> startProfileAt([0, 0], %)
    |> line(endAbsolute = [-2.4, myVar])
    |> line(endAbsolute = [-0.76, otherVar])
    |> extrude(length = 4)

  theSketch = startSketchOn('XY')
    |> startProfileAt([0, 0], %)
    |> line(endAbsolute = [-3.35, 0.17])
    |> line(endAbsolute = [0.98, 5.16])
    |> line(endAbsolute = [2.15, 4.32])
    // |> rx(90, %)`
    const ast = assertParse(code)
    const execState = await enginelessExecutor(ast, ProgramMemory.empty())
    const output = processMemory(execState.memory)
    expect(output.myVar).toEqual(5)
    expect(output.otherVar).toEqual(3)
    expect(output).toEqual({
      HALF_TURN: 180,
      QUARTER_TURN: 90,
      THREE_QUARTER_TURN: 270,
      ZERO: 0,
      myVar: 5,
      myFn: '__function(a)__',
      otherVar: 3,
      theExtrude: [
        {
          type: 'extrudePlane',
          tag: null,
          id: expect.any(String),
          faceId: expect.any(String),
          sourceRange: [expect.any(Number), expect.any(Number), 0],
        },
        {
          type: 'extrudePlane',
          tag: null,
          id: expect.any(String),
          faceId: expect.any(String),
          sourceRange: [expect.any(Number), expect.any(Number), 0],
        },
      ],
      theSketch: [
        { type: 'ToPoint', to: [-3.35, 0.17], from: [0, 0], tag: null },
        { type: 'ToPoint', to: [0.98, 5.16], from: [-3.35, 0.17], tag: null },
        { type: 'ToPoint', to: [2.15, 4.32], from: [0.98, 5.16], tag: null },
      ],
    })
  })
})
