import { assert } from 'chai';
import { Convert, DebugTrace, SlotInfo } from '../debug-trace/debug-trace';
import { DebugTracePlayer, VariableData } from './debug-trace-player';

function getStack(trace: DebugTrace, player: DebugTracePlayer): string[] {
  return player.getCallStack().map((funcIdx: number) => trace.functions[funcIdx].name);
}

function makeVarsString(trace: DebugTrace, player: DebugTracePlayer,
                        vars: VariableData[]): string[] {
  return vars.map((varData: VariableData) => {
    if (varData.slotIndex < 0 || varData.slotIndex >= trace.slots.length) {
      return '???';
    }

    const slot: SlotInfo = trace.slots[varData.slotIndex];
    let text: string = varData.dirty ? '##' : '';
    text += slot.name;
    text += player.getSlotComponentSuffix(varData.slotIndex);
    text += ' = ';
    text += varData.value.toString();
    return text;
  });
}

function getLocalVariables(trace: DebugTrace, player: DebugTracePlayer): string[] {
  const frame: number = player.getStackDepth() - 1;
  return makeVarsString(trace, player, player.getLocalVariables(frame));
}

function getGlobalVariables(trace: DebugTrace, player: DebugTracePlayer): string[] {
  return makeVarsString(trace, player, player.getGlobalVariables());
}

const trivialGreenShader = String.raw`
{
  "functions": [{"name": "vec4 main(vec2 i)"}],
  "slots": [
    {"columns": 4, "index": 0, "kind": 0, "line": 1, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 1, "kind": 0, "line": 1, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 2, "kind": 0, "line": 1, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 3, "kind": 0, "line": 1, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 2, "index": 0, "kind": 0, "line": 1, "name": "i", "rows": 1},
    {"columns": 2, "index": 1, "kind": 0, "line": 1, "name": "i", "rows": 1}
  ],
  "source": [
    "vec4 main(vec2 i) {     // Line 1",
    "  return vec4(0,1,0,1); // Line 2",
    "}                       // Line 3"
  ],
  "trace": [
    [2],
    [1, 4, 1107361792],
    [1, 5, 1107361792],
    [4, 1],
    [0, 2],
    [1],
    [1, 1, 1065353216],
    [1, 2],
    [1, 3, 1065353216],
    [4, -1],
    [3]
  ],
  "version": "20220209"
}`;

const functionsShader = String.raw`
{
  "functions": [{"name": "half4 main(float2 f2)"}, {"name": "half fnA()"}, {"name": "half fnB()"}],
  "slots": [
    {"columns": 4, "index": 0, "kind": 0, "line": 7, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 1, "kind": 0, "line": 7, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 2, "kind": 0, "line": 7, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 3, "kind": 0, "line": 7, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 2, "index": 0, "kind": 0, "line": 7, "name": "f2", "rows": 1},
    {"columns": 2, "index": 1, "kind": 0, "line": 7, "name": "f2", "rows": 1},
    {"columns": 1, "index": 0, "kind": 0, "line": 4, "name": "[fnA].result", "retval": 1, "rows": 1},
    {"columns": 1, "index": 0, "kind": 0, "line": 1, "name": "[fnB].result", "retval": 2, "rows": 1}
  ],
  "source": [
    "half fnB() {                    // Line 1",
    "    return 0.5;                 // Line 2",
    "}                               // Line 3",
    "half fnA() {                    // Line 4",
    "    return fnB();               // Line 5",
    "}                               // Line 6",
    "half4 main(float2 f2) {         // Line 7",
    "    return fnA().0x01;          // Line 8",
    "}"
  ],
  "trace": [
    [2],
    [1, 4, 1107361792],
    [1, 5, 1107361792],
    [4, 1],
    [0, 8],
    [2, 1],
    [4, 1],
    [0, 5],
    [2, 2],
    [4, 1],
    [0, 2],
    [1, 7, 1056964608],
    [4, -1],
    [3, 2],
    [1, 6, 1056964608],
    [4, -1],
    [3, 1],
    [1],
    [1, 1, 1056964608],
    [1, 2],
    [1, 3, 1065353216],
    [4, -1],
    [3]
  ],
  "version": "20220209"
}`;

const variablesShader = String.raw`
{
  "functions": [{"name": "half4 main(float2 p)"}, {"name": "float func()"}],
  "slots": [
    {"columns": 4, "index": 0, "kind": 0, "line": 6, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 1, "kind": 0, "line": 6, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 2, "kind": 0, "line": 6, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 3, "kind": 0, "line": 6, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 2, "index": 0, "kind": 0, "line": 6, "name": "p", "rows": 1},
    {"columns": 2, "index": 1, "kind": 0, "line": 6, "name": "p", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 7, "name": "a", "rows": 1},
    {"columns": 1, "index": 0, "kind": 3, "line": 8, "name": "b", "rows": 1},
    {"columns": 1, "index": 0, "kind": 0, "line": 2, "name": "[func].result", "retval": 1, "rows": 1},
    {"columns": 1, "index": 0, "kind": 0, "line": 3, "name": "z", "rows": 1},
    {"columns": 4, "index": 0, "kind": 0, "line": 10, "name": "c", "rows": 1},
    {"columns": 4, "index": 1, "kind": 0, "line": 10, "name": "c", "rows": 1},
    {"columns": 4, "index": 2, "kind": 0, "line": 10, "name": "c", "rows": 1},
    {"columns": 4, "index": 3, "kind": 0, "line": 10, "name": "c", "rows": 1},
    {"columns": 3, "index": 0, "kind": 0, "line": 11, "name": "d", "rows": 3},
    {"columns": 3, "index": 1, "kind": 0, "line": 11, "name": "d", "rows": 3},
    {"columns": 3, "index": 2, "kind": 0, "line": 11, "name": "d", "rows": 3},
    {"columns": 3, "index": 3, "kind": 0, "line": 11, "name": "d", "rows": 3},
    {"columns": 3, "index": 4, "kind": 0, "line": 11, "name": "d", "rows": 3},
    {"columns": 3, "index": 5, "kind": 0, "line": 11, "name": "d", "rows": 3},
    {"columns": 3, "index": 6, "kind": 0, "line": 11, "name": "d", "rows": 3},
    {"columns": 3, "index": 7, "kind": 0, "line": 11, "name": "d", "rows": 3},
    {"columns": 3, "index": 8, "kind": 0, "line": 11, "name": "d", "rows": 3}
  ],
  "source": [
    "                                      // Line 1",
    "float func() {                        // Line 2",
    "    float z = 456;                    // Line 3",
    "    return z;                         // Line 4",
    "}                                     // Line 5",
    "half4 main(float2 p) {                // Line 6",
    "    int a = 123;                      // Line 7",
    "    bool b = true;                    // Line 8",
    "    func();                           // Line 9",
    "    float4 c = float4(0, 0.5, 1, -1); // Line 10",
    "    float3x3 d = float3x3(2);         // Line 11",
    "    return c.xyz1;                    // Line 12",
    "}                                     // Line 13"
  ],
  "trace": [
    [2],
    [1, 4, 1107361792],
    [1, 5, 1107361792],
    [4, 1],
    [0, 7],
    [1, 6, 123],
    [0, 8],
    [1, 7, -1],
    [0, 9],
    [2, 1],
    [4, 1],
    [0, 3],
    [1, 9, 1139015680],
    [0, 4],
    [1, 8, 1139015680],
    [4, -1],
    [3, 1],
    [0, 10],
    [1, 10],
    [1, 11, 1056964608],
    [1, 12, 1065353216],
    [1, 13, -1082130432],
    [0, 11],
    [1, 14, 1073741824],
    [1, 15],
    [1, 16],
    [1, 17],
    [1, 18, 1073741824],
    [1, 19],
    [1, 20],
    [1, 21],
    [1, 22, 1073741824],
    [0, 12],
    [1],
    [1, 1, 1056964608],
    [1, 2, 1065353216],
    [1, 3, 1065353216],
    [4, -1],
    [3]
  ],
  "version": "20220209"
}`;

const variableGroupsShader = String.raw`
{
  "functions": [{"name": "vec4 main(vec2 p)"}],
  "slots": [
    {"columns": 4, "index": 0, "kind": 0, "line": 2, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 1, "kind": 0, "line": 2, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 2, "kind": 0, "line": 2, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 3, "kind": 0, "line": 2, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 2, "index": 0, "kind": 0, "line": 2, "name": "p", "rows": 1},
    {"columns": 2, "index": 1, "kind": 0, "line": 2, "name": "p", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 3, "name": "s.x", "rows": 1},
    {"columns": 1, "groupIdx": 1, "index": 0, "kind": 1, "line": 3, "name": "s.y", "rows": 1},
    {"columns": 1, "groupIdx": 2, "index": 0, "kind": 1, "line": 3, "name": "s.z", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 4, "name": "arr[0]", "rows": 1},
    {"columns": 1, "groupIdx": 1, "index": 0, "kind": 1, "line": 4, "name": "arr[1]", "rows": 1},
    {"columns": 1, "groupIdx": 2, "index": 0, "kind": 1, "line": 4, "name": "arr[2]", "rows": 1}
  ],
  "source": [
    "struct S { int x, y, z; };",
    "vec4 main(vec2 p) {",
    "    S s;",
    "    int arr[3];",
    "    s.y = 1;",
    "    arr[1] = 2;",
    "    s.x = 3;",
    "    arr[2] = 4;",
    "    return p.xy11;",
    "}",
    ""
  ],
  "trace": [
    [2],
    [1, 4, 1107361792],
    [1, 5, 1107361792],
    [4, 1],
    [0, 3],
    [1, 6],
    [1, 7],
    [1, 8],
    [0, 4],
    [1, 9],
    [1, 10],
    [1, 11],
    [0, 5],
    [1, 7, 1],
    [0, 6],
    [1, 10, 2],
    [0, 7],
    [1, 6, 3],
    [0, 8],
    [1, 11, 4],
    [0, 9],
    [1, 0, 1107361792],
    [1, 1, 1107361792],
    [1, 2, 1065353216],
    [1, 3, 1065353216],
    [4, -1],
    [3]
  ],
  "version": "20220209"
}`;

const ifStatementShader = String.raw`
{
  "functions": [{"name": "half4 main(float2 p)"}],
  "slots": [
    {"columns": 4, "index": 0, "kind": 0, "line": 2, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 1, "kind": 0, "line": 2, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 2, "kind": 0, "line": 2, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 3, "kind": 0, "line": 2, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 2, "index": 0, "kind": 0, "line": 2, "name": "p", "rows": 1},
    {"columns": 2, "index": 1, "kind": 0, "line": 2, "name": "p", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 3, "name": "val", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 5, "name": "temp", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 11, "name": "temp", "rows": 1}
  ],
  "source": [
    "                       // Line 1",
    "half4 main(float2 p) { // Line 2",
    "    int val;           // Line 3",
    "    if (true) {        // Line 4",
    "        int temp = 1;  // Line 5",
    "        val = temp;    // Line 6",
    "    } else {           // Line 7",
    "        val = 2;       // Line 8",
    "    }                  // Line 9",
    "    if (false) {       // Line 10",
    "        int temp = 3;  // Line 11",
    "        val = temp;    // Line 12",
    "    } else {           // Line 13",
    "        val = 4;       // Line 14",
    "    }                  // Line 15",
    "    return half4(val); // Line 16",
    "}                      // Line 17"
  ],
  "trace": [
    [2],
    [1, 4, 1107361792],
    [1, 5, 1107361792],
    [4, 1],
    [0, 3],
    [1, 6],
    [0, 4],
    [4, 1],
    [0, 5],
    [1, 7, 1],
    [0, 6],
    [1, 6, 1],
    [4, -1],
    [0, 10],
    [4, 1],
    [0, 14],
    [1, 6, 4],
    [4, -1],
    [0, 16],
    [1, 0, 1082130432],
    [1, 1, 1082130432],
    [1, 2, 1082130432],
    [1, 3, 1082130432],
    [4, -1],
    [3]
  ],
  "version": "20220209"
}`;

const forLoopShader = String.raw`
{
  "functions": [{"name": "half4 main(float2 p)"}],
  "slots": [
    {"columns": 4, "index": 0, "kind": 0, "line": 2, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 1, "kind": 0, "line": 2, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 2, "kind": 0, "line": 2, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 3, "kind": 0, "line": 2, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 2, "index": 0, "kind": 0, "line": 2, "name": "p", "rows": 1},
    {"columns": 2, "index": 1, "kind": 0, "line": 2, "name": "p", "rows": 1},
    {"columns": 1, "index": 0, "kind": 0, "line": 4, "name": "x", "rows": 1}
  ],
  "source": [
    "                                     // Line 1",
    "half4 main(float2 p) {               // Line 2",
    "    p *= 0;                          // Line 3",
    "    for (float x = 1; x < 3; ++x) {  // Line 4",
    "        p.y = x;                     // Line 5",
    "    }                                // Line 6",
    "    return p.xy01;                   // Line 7",
    "}                                    // Line 8"
  ],
  "trace": [
    [2],
    [1, 4, 1107361792],
    [1, 5, 1107361792],
    [4, 1],
    [0, 3],
    [1, 4],
    [1, 5],
    [0, 4],
    [4, 1],
    [1, 6, 1065353216],
    [4, 1],
    [0, 5],
    [1, 5, 1065353216],
    [4, -1],
    [0, 4],
    [1, 6, 1073741824],
    [4, 1],
    [0, 5],
    [1, 5, 1073741824],
    [4, -1],
    [0, 4],
    [4, -1],
    [0, 7],
    [1],
    [1, 1, 1073741824],
    [1, 2],
    [1, 3, 1065353216],
    [4, -1],
    [3]
  ],
  "version": "20220209"
}`;

const stepOutShader = String.raw`
{
  "functions": [{"name": "half4 main(float2 p)"}, {"name": "half fn()"}],
  "slots": [
    {"columns": 4, "index": 0, "kind": 0, "line": 9, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 1, "kind": 0, "line": 9, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 2, "kind": 0, "line": 9, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 3, "kind": 0, "line": 9, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 2, "index": 0, "kind": 0, "line": 9, "name": "p", "rows": 1},
    {"columns": 2, "index": 1, "kind": 0, "line": 9, "name": "p", "rows": 1},
    {"columns": 1, "index": 0, "kind": 0, "line": 2, "name": "[fn].result", "retval": 1, "rows": 1},
    {"columns": 1, "index": 0, "kind": 0, "line": 3, "name": "a", "rows": 1},
    {"columns": 1, "index": 0, "kind": 0, "line": 4, "name": "b", "rows": 1},
    {"columns": 1, "index": 0, "kind": 0, "line": 5, "name": "c", "rows": 1},
    {"columns": 1, "index": 0, "kind": 0, "line": 6, "name": "d", "rows": 1}
  ],
  "source": [
    "                       // Line 1",
    "half fn() {            // Line 2",
    "    half a = 11;       // Line 3",
    "    half b = 22;       // Line 4",
    "    half c = 33;       // Line 5",
    "    half d = 44;       // Line 6",
    "    return d;          // Line 7",
    "}                      // Line 8",
    "half4 main(float2 p) { // Line 9",
    "    return fn().xxx1;  // Line 10",
    "}                      // Line 11"
  ],
  "trace": [
    [2],
    [1, 4, 1107361792],
    [1, 5, 1107361792],
    [4, 1],
    [0, 10],
    [2, 1],
    [4, 1],
    [0, 3],
    [1, 7, 1093664768],
    [0, 4],
    [1, 8, 1102053376],
    [0, 5],
    [1, 9, 1107558400],
    [0, 6],
    [1, 10, 1110441984],
    [0, 7],
    [1, 6, 1110441984],
    [4, -1],
    [3, 1],
    [1, 0, 1110441984],
    [1, 1, 1110441984],
    [1, 2, 1110441984],
    [1, 3, 1065353216],
    [4, -1],
    [3]
  ],
  "version": "20220209"
}`;

const varScopeShader = String.raw`
{
  "functions": [{"name": "half4 main(float2 p)"}, {"name": "int fn()"}],
  "slots": [
    {"columns": 4, "index": 0, "kind": 0, "line": 22, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 1, "kind": 0, "line": 22, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 2, "kind": 0, "line": 22, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 3, "kind": 0, "line": 22, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 2, "index": 0, "kind": 0, "line": 22, "name": "p", "rows": 1},
    {"columns": 2, "index": 1, "kind": 0, "line": 22, "name": "p", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 2, "name": "[fn].result", "retval": 1, "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 3, "name": "a", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 5, "name": "b", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 7, "name": "c", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 9, "name": "d", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 11, "name": "e", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 13, "name": "f", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 15, "name": "g", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 17, "name": "h", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 19, "name": "i", "rows": 1}
  ],
  "source": [
    "                            // Line 1",
    "int fn() {                  // Line 2",
    "    int a = 1;              // Line 3",
    "    {                       // Line 4",
    "        int b = 2;          // Line 5",
    "        {                   // Line 6",
    "            int c = 3;      // Line 7",
    "        }                   // Line 8",
    "        int d = 4;          // Line 9",
    "    }                       // Line 10",
    "    int e = 5;              // Line 11",
    "    {                       // Line 12",
    "        int f = 6;          // Line 13",
    "        {                   // Line 14",
    "            int g = 7;      // Line 15",
    "        }                   // Line 16",
    "        int h = 8;          // Line 17",
    "    }                       // Line 18",
    "    int i = 9;              // Line 19",
    "    return 0;               // Line 20",
    "}                           // Line 21",
    "half4 main(float2 p) {      // Line 22",
    "    return half4(fn());     // Line 23",
    "}                           // Line 24"
  ],
  "trace": [
    [2],
    [1, 4, 1107361792],
    [1, 5, 1107361792],
    [4, 1],
    [0, 23],
    [2, 1],
    [4, 1],
    [0, 3],
    [1, 7, 1],
    [4, 1],
    [0, 5],
    [1, 8, 2],
    [4, 1],
    [0, 7],
    [1, 9, 3],
    [4, -1],
    [0, 9],
    [1, 10, 4],
    [4, -1],
    [0, 11],
    [1, 11, 5],
    [4, 1],
    [0, 13],
    [1, 12, 6],
    [4, 1],
    [0, 15],
    [1, 13, 7],
    [4, -1],
    [0, 17],
    [1, 14, 8],
    [4, -1],
    [0, 19],
    [1, 15, 9],
    [0, 20],
    [1, 6],
    [4, -1],
    [3, 1],
    [1],
    [1, 1],
    [1, 2],
    [1, 3],
    [4, -1],
    [3]
  ],
  "version": "20220209"
}`;

const breakpointShader = String.raw`
{
  "functions": [{"name": "half4 main(float2 p)"}, {"name": "void func()"}],
  "slots": [
    {"columns": 1, "index": 0, "kind": 1, "line": 2, "name": "counter", "rows": 1},
    {"columns": 4, "index": 0, "kind": 0, "line": 6, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 1, "kind": 0, "line": 6, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 2, "kind": 0, "line": 6, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 4, "index": 3, "kind": 0, "line": 6, "name": "[main].result", "retval": 0, "rows": 1},
    {"columns": 2, "index": 0, "kind": 0, "line": 6, "name": "p", "rows": 1},
    {"columns": 2, "index": 1, "kind": 0, "line": 6, "name": "p", "rows": 1},
    {"columns": 1, "index": 0, "kind": 1, "line": 7, "name": "x", "rows": 1}
  ],
  "source": [
    "                                   // Line 1",
    "int counter = 0;                   // Line 2",
    "void func() {                      // Line 3",
    "    --counter;                     // Line 4   BREAKPOINT 4 5",
    "}                                  // Line 5",
    "half4 main(float2 p) {             // Line 6",
    "    for (int x = 1; x <= 3; ++x) { // Line 7",
    "        ++counter;                 // Line 8   BREAKPOINT 1 2 3",
    "    }                              // Line 9",
    "    func();                        // Line 10",
    "    func();                        // Line 11",
    "    ++counter;                     // Line 12  BREAKPOINT 6",
    "    return half4(counter);         // Line 13",
    "}                                  // Line 14"
  ],
  "trace": [
    [1],
    [2],
    [1, 5, 1107361792],
    [1, 6, 1107361792],
    [4, 1],
    [0, 7],
    [4, 1],
    [1, 7, 1],
    [4, 1],
    [0, 8],
    [1, 0, 1],
    [4, -1],
    [0, 7],
    [1, 7, 2],
    [4, 1],
    [0, 8],
    [1, 0, 2],
    [4, -1],
    [0, 7],
    [1, 7, 3],
    [4, 1],
    [0, 8],
    [1, 0, 3],
    [4, -1],
    [0, 7],
    [4, -1],
    [0, 10],
    [2, 1],
    [4, 1],
    [0, 4],
    [1, 0, 2],
    [4, -1],
    [3, 1],
    [0, 11],
    [2, 1],
    [4, 1],
    [0, 4],
    [1, 0, 1],
    [4, -1],
    [3, 1],
    [0, 12],
    [1, 0, 2],
    [0, 13],
    [1, 1, 1073741824],
    [1, 2, 1073741824],
    [1, 3, 1073741824],
    [1, 4, 1073741824],
    [4, -1],
    [3]
  ],
  "version": "20220209"
}`;

describe('DebugTrace playback', () => {
  it('Hello World: return green', () => {
    const trace: DebugTrace = Convert.toDebugTrace(trivialGreenShader);
    const player = new DebugTracePlayer();
    player.reset(trace);

    // We have not started tracing yet.
    assert.equal(player.getCursor(), 0);
    assert.equal(player.getCurrentLine(), -1);
    assert.deepEqual(player.getLineNumbersReached(), new Map([[2, 1]]));
    assert.isFalse(player.traceHasCompleted());
    assert.deepEqual(getStack(trace, player), []);
    assert.isEmpty(getGlobalVariables(trace, player));

    player.step();

    // We should now be inside main.
    assert.isAbove(player.getCursor(), 0);
    assert.equal(player.getCurrentLine(), 2);
    assert.deepEqual(player.getLineNumbersReached(), new Map([[2, 0]]));
    assert.isFalse(player.traceHasCompleted());
    assert.deepEqual(getStack(trace, player), ['vec4 main(vec2 i)']);
    assert.deepEqual(getGlobalVariables(trace, player), []);

    player.step();

    // We have now completed the trace.
    assert.isAbove(player.getCursor(), 0);
    assert.isTrue(player.traceHasCompleted());
    assert.equal(player.getCurrentLine(), -1);
    assert.deepEqual(getStack(trace, player), []);
    assert.deepEqual(getGlobalVariables(trace, player), ['##[main].result.x = 0',
                                                         '##[main].result.y = 1',
                                                         '##[main].result.z = 0',
                                                         '##[main].result.w = 1']);
  });

  it('reset() starts over from the beginning', () => {
    const trace: DebugTrace = Convert.toDebugTrace(trivialGreenShader);
    const player = new DebugTracePlayer();
    player.reset(trace);

    // We have not started tracing yet.
    assert.equal(player.getCursor(), 0);
    assert.equal(player.getCurrentLine(), -1);
    assert.isFalse(player.traceHasCompleted());
    assert.deepEqual(getStack(trace, player), []);

    player.step();

    // We should now be inside main.
    assert.isAbove(player.getCursor(), 0);
    assert.equal(player.getCurrentLine(), 2);
    assert.isFalse(player.traceHasCompleted());
    assert.deepEqual(getStack(trace, player), ['vec4 main(vec2 i)']);

    player.reset(trace);

    // We should be back to square one.
    assert.equal(player.getCursor(), 0);
    assert.equal(player.getCurrentLine(), -1);
    assert.isFalse(player.traceHasCompleted());
    assert.deepEqual(getStack(trace, player), []);
  });

  it('invoking functions', () => {
    const trace: DebugTrace = Convert.toDebugTrace(functionsShader);
    const player = new DebugTracePlayer();
    player.reset(trace);

    // We have not started tracing yet.
    assert.equal(player.getCursor(), 0);
    assert.equal(player.getCurrentLine(), -1);
    assert.isFalse(player.traceHasCompleted());
    assert.deepEqual(getStack(trace, player), []);
    assert.isEmpty(getGlobalVariables(trace, player));

    player.step();

    // We should now be inside main.
    assert.isFalse(player.traceHasCompleted());
    assert.equal(player.getCurrentLine(), 8);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 f2)']);
    assert.deepEqual(getLocalVariables(trace, player), ['##f2.x = 32.25',
                                                        '##f2.y = 32.25']);
    assert.deepEqual(getGlobalVariables(trace, player), []);

    player.stepOver();

    // We should now have completed execution.
    assert.isTrue(player.traceHasCompleted());
    assert.equal(player.getCurrentLine(), -1);
    assert.deepEqual(getStack(trace, player), []);
    assert.deepEqual(getGlobalVariables(trace, player), ['##[main].result.x = 0',
                                                         '##[main].result.y = 0.5',
                                                         '##[main].result.z = 0',
                                                         '##[main].result.w = 1']);

    // Watch the stack grow and shrink as single-step.
    player.reset(trace);
    player.step();

    assert.deepEqual(getStack(trace, player), ['half4 main(float2 f2)']);
    assert.equal(player.getCurrentLineInStackFrame(0), 8);
    assert.deepEqual(getLocalVariables(trace, player), ['##f2.x = 32.25',
                                                        '##f2.y = 32.25']);
    assert.deepEqual(getGlobalVariables(trace, player), []);
    player.step();

    assert.deepEqual(getStack(trace, player), ['half4 main(float2 f2)',
                                               'half fnA()']);
    assert.equal(player.getCurrentLineInStackFrame(0), 8);
    assert.equal(player.getCurrentLineInStackFrame(1), 5);
    assert.deepEqual(getLocalVariables(trace, player), []);
    assert.deepEqual(getGlobalVariables(trace, player), []);
    player.step();

    assert.deepEqual(getStack(trace, player), ['half4 main(float2 f2)',
                                               'half fnA()',
                                               'half fnB()']);
    assert.equal(player.getCurrentLineInStackFrame(0), 8);
    assert.equal(player.getCurrentLineInStackFrame(1), 5);
    assert.equal(player.getCurrentLineInStackFrame(2), 2);
    assert.deepEqual(getLocalVariables(trace, player), []);
    assert.deepEqual(getGlobalVariables(trace, player), []);
    player.step();

    assert.deepEqual(getStack(trace, player), ['half4 main(float2 f2)',
                                               'half fnA()']);
    assert.deepEqual(getLocalVariables(trace, player), ['##[fnB].result = 0.5']);
    assert.deepEqual(getGlobalVariables(trace, player), []);
    player.step();

    assert.deepEqual(getStack(trace, player), ['half4 main(float2 f2)']);
    assert.deepEqual(getLocalVariables(trace, player), ['##[fnA].result = 0.5',
                                                        'f2.x = 32.25',
                                                        'f2.y = 32.25']);
    assert.deepEqual(getGlobalVariables(trace, player), []);

    player.step();
    assert.isTrue(player.traceHasCompleted());
    assert.deepEqual(getGlobalVariables(trace, player), ['##[main].result.x = 0',
                                                         '##[main].result.y = 0.5',
                                                         '##[main].result.z = 0',
                                                         '##[main].result.w = 1']);
  });

  it('variable display', () => {
    const trace: DebugTrace = Convert.toDebugTrace(variablesShader);
    const player = new DebugTracePlayer();
    player.reset(trace);

    assert.deepEqual(player.getLineNumbersReached(), new Map([[3, 1], [4, 1], [7, 1],
                                                              [8, 1], [9, 1], [10, 1],
                                                              [11, 1], [12, 1]]));
    player.step();

    assert.equal(player.getCurrentLine(), 7);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 p)']);
    assert.deepEqual(getLocalVariables(trace, player), ['##p.x = 32.25', '##p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 8);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 p)']);
    assert.deepEqual(getLocalVariables(trace, player), ['##a = 123', 'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 9);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 p)']);
    assert.deepEqual(getLocalVariables(trace, player),
                     ['##b = true', 'a = 123', 'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 3);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 p)', 'float func()']);
    assert.deepEqual(getLocalVariables(trace, player), []);
    player.step();

    assert.equal(player.getCurrentLine(), 4);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 p)', 'float func()']);
    assert.deepEqual(getLocalVariables(trace, player), ['##z = 456']);
    player.step();

    assert.equal(player.getCurrentLine(), 9);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 p)']);
    assert.deepEqual(getLocalVariables(trace, player),
                     ['##[func].result = 456', 'b = true', 'a = 123',
                      'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 10);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 p)']);
    assert.deepEqual(getLocalVariables(trace, player),
                     ['b = true', 'a = 123', 'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 11);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 p)']);
    assert.deepEqual(getLocalVariables(trace, player),
                     ['##c.x = 0', '##c.y = 0.5', '##c.z = 1', '##c.w = -1', 'b = true', 'a = 123',
                      'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 12);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 p)']);
    assert.deepEqual(getLocalVariables(trace, player),
                     ['##d[0][0] = 2', '##d[0][1] = 0', '##d[0][2] = 0',
                      '##d[1][0] = 0', '##d[1][1] = 2', '##d[1][2] = 0',
                      '##d[2][0] = 0', '##d[2][1] = 0', '##d[2][2] = 2',
                      'c.x = 0', 'c.y = 0.5', 'c.z = 1', 'c.w = -1', 'b = true', 'a = 123',
                      'p.x = 32.25', 'p.y = 32.25']);

    player.step();
    assert.isTrue(player.traceHasCompleted());
    assert.deepEqual(getStack(trace, player), []);
    assert.deepEqual(getGlobalVariables(trace, player),
                     ['##[main].result.x = 0', '##[main].result.y = 0.5',
                      '##[main].result.z = 1', '##[main].result.w = 1']);
  });

  it('variable groups', () => {
    const trace: DebugTrace = Convert.toDebugTrace(variableGroupsShader);
    const player = new DebugTracePlayer();
    player.reset(trace);
    player.step();

    assert.equal(player.getCurrentLine(), 3);
    assert.deepEqual(getStack(trace, player), ['vec4 main(vec2 p)']);
    assert.deepEqual(getLocalVariables(trace, player),
                     ['##p.x = 32.25', '##p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 4);
    assert.deepEqual(getLocalVariables(trace, player),
                     ['##s.x = 0', '##s.y = 0', '##s.z = 0', 'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 5);
    assert.deepEqual(getLocalVariables(trace, player),
                     ['##arr[0] = 0', '##arr[1] = 0', '##arr[2] = 0',
                      's.x = 0', 's.y = 0', 's.z = 0', 'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 6);
    assert.deepEqual(getLocalVariables(trace, player),
                     ['s.x = 0', '##s.y = 1', 's.z = 0', 'arr[0] = 0', 'arr[1] = 0', 'arr[2] = 0',
                      'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 7);
    assert.deepEqual(getLocalVariables(trace, player),
                     ['arr[0] = 0', '##arr[1] = 2', 'arr[2] = 0', 's.x = 0', 's.y = 1', 's.z = 0',
                      'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 8);
    assert.deepEqual(getLocalVariables(trace, player),
                     ['##s.x = 3', 's.y = 1', 's.z = 0', 'arr[0] = 0', 'arr[1] = 2', 'arr[2] = 0',
                      'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 9);
    assert.deepEqual(getLocalVariables(trace, player),
                     ['arr[0] = 0', 'arr[1] = 2', '##arr[2] = 4', 's.x = 3', 's.y = 1', 's.z = 0',
                      'p.x = 32.25', 'p.y = 32.25']);
  });

  it('if-statement flow control', () => {
    const trace: DebugTrace = Convert.toDebugTrace(ifStatementShader);
    const player = new DebugTracePlayer();
    player.reset(trace);

    assert.deepEqual(player.getLineNumbersReached(), new Map([[3, 1], [4, 1], [5, 1], [6, 1],
                                                              [10, 1], [14, 1], [16, 1]]));
    player.step();

    assert.equal(player.getCurrentLine(), 3);
    assert.deepEqual(getLocalVariables(trace, player), ['##p.x = 32.25', '##p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 4);
    assert.deepEqual(getLocalVariables(trace, player), ['##val = 0', 'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 5);
    assert.deepEqual(getLocalVariables(trace, player), ['val = 0', 'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 6);
    assert.deepEqual(getLocalVariables(trace, player),
                     ['##temp = 1', 'val = 0', 'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    // We skip over the false-branch.
    assert.equal(player.getCurrentLine(), 10);
    assert.deepEqual(getLocalVariables(trace, player), ['##val = 1', 'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    // We skip over the true-branch.
    assert.equal(player.getCurrentLine(), 14);
    assert.deepEqual(getLocalVariables(trace, player), ['val = 1', 'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 16);
    assert.deepEqual(getLocalVariables(trace, player), ['##val = 4', 'p.x = 32.25', 'p.y = 32.25']);
    player.step();

    assert.isTrue(player.traceHasCompleted());
    assert.deepEqual(getGlobalVariables(trace, player),
                     ['##[main].result.x = 4', '##[main].result.y = 4',
                      '##[main].result.z = 4', '##[main].result.w = 4']);
  });

  it('for-loop flow control', () => {
    const trace: DebugTrace = Convert.toDebugTrace(forLoopShader);
    const player = new DebugTracePlayer();
    player.reset(trace);

    assert.deepEqual(player.getLineNumbersReached(), new Map([[3, 1], [4, 3], [5, 2], [7, 1]]));
    player.step();

    assert.equal(player.getCurrentLine(), 3);
    assert.deepEqual(player.getLineNumbersReached(), new Map([[3, 0], [4, 3], [5, 2], [7, 1]]));
    assert.deepEqual(getLocalVariables(trace, player), ['##p.x = 32.25', '##p.y = 32.25']);
    player.step();

    assert.equal(player.getCurrentLine(), 4);
    assert.deepEqual(player.getLineNumbersReached(), new Map([[3, 0], [4, 2], [5, 2], [7, 1]]));
    assert.deepEqual(getLocalVariables(trace, player), ['##p.x = 0', '##p.y = 0']);
    player.step();

    assert.equal(player.getCurrentLine(), 5);
    assert.deepEqual(player.getLineNumbersReached(), new Map([[3, 0], [4, 2], [5, 1], [7, 1]]));
    assert.deepEqual(getLocalVariables(trace, player), ['##x = 1', 'p.x = 0', 'p.y = 0']);
    player.step();

    assert.equal(player.getCurrentLine(), 4);
    assert.deepEqual(player.getLineNumbersReached(), new Map([[3, 0], [4, 1], [5, 1], [7, 1]]));
    assert.deepEqual(getLocalVariables(trace, player), ['p.x = 0', '##p.y = 1', 'x = 1']);
    player.step();

    assert.equal(player.getCurrentLine(), 5);
    assert.deepEqual(player.getLineNumbersReached(), new Map([[3, 0], [4, 1], [5, 0], [7, 1]]));
    assert.deepEqual(getLocalVariables(trace, player), ['##x = 2', 'p.x = 0', 'p.y = 1']);
    player.step();

    assert.equal(player.getCurrentLine(), 4);
    assert.deepEqual(player.getLineNumbersReached(), new Map([[3, 0], [4, 0], [5, 0], [7, 1]]));
    assert.deepEqual(getLocalVariables(trace, player), ['p.x = 0', '##p.y = 2', 'x = 2']);
    player.step();

    assert.equal(player.getCurrentLine(), 7);
    assert.deepEqual(player.getLineNumbersReached(), new Map([[3, 0], [4, 0], [5, 0], [7, 0]]));
    assert.deepEqual(getLocalVariables(trace, player), ['p.x = 0', 'p.y = 2']);
    player.step();

    assert.isTrue(player.traceHasCompleted());
    assert.deepEqual(getGlobalVariables(trace, player),
                     ['##[main].result.x = 0', '##[main].result.y = 2',
                      '##[main].result.z = 0', '##[main].result.w = 1']);
  });

  it('step out from a function', () => {
    const trace: DebugTrace = Convert.toDebugTrace(stepOutShader);
    const player = new DebugTracePlayer();
    player.reset(trace);
    assert.deepEqual(player.getLineNumbersReached(), new Map([[3, 1], [4, 1], [5, 1],
                                                              [6, 1], [7, 1], [10, 1]]));
    player.step();

    // We should now be inside main.
    assert.equal(player.getCurrentLine(), 10);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 p)']);
    assert.deepEqual(getLocalVariables(trace, player), ['##p.x = 32.25', '##p.y = 32.25']);
    player.step();

    // We should now be inside fn.
    assert.equal(player.getCurrentLine(), 3);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 p)', 'half fn()']);
    player.step();

    assert.equal(player.getCurrentLine(), 4);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 p)', 'half fn()']);
    assert.deepEqual(getLocalVariables(trace, player), ['##a = 11']);
    player.step();

    assert.equal(player.getCurrentLine(), 5);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 p)', 'half fn()']);
    assert.deepEqual(getLocalVariables(trace, player), ['##b = 22', 'a = 11']);
    player.stepOut();

    // We should now be back inside main(), right where we left off.
    assert.equal(player.getCurrentLine(), 10);
    assert.deepEqual(getStack(trace, player), ['half4 main(float2 p)']);
    assert.deepEqual(getLocalVariables(trace, player),
                     ['##[fn].result = 44', 'p.x = 32.25', 'p.y = 32.25']);
    player.stepOut();

    assert.isTrue(player.traceHasCompleted());
    assert.deepEqual(getGlobalVariables(trace, player),
                     ['##[main].result.x = 44', '##[main].result.y = 44',
                      '##[main].result.z = 44', '##[main].result.w = 1']);
  });

  it('variables fall out of scope', () => {
    const trace: DebugTrace = Convert.toDebugTrace(varScopeShader);
    const player = new DebugTracePlayer();
    player.reset(trace);
    player.step();

    assert.equal(player.getCurrentLine(), 23);
    player.step();

    // We should now be inside fn().
    assert.equal(player.getCurrentLine(), 3);
    assert.deepEqual(getLocalVariables(trace, player), []);
    player.step();

    assert.equal(player.getCurrentLine(), 5);
    assert.deepEqual(getLocalVariables(trace, player), ['##a = 1']);
    player.step();

    assert.equal(player.getCurrentLine(), 7);
    assert.deepEqual(getLocalVariables(trace, player), ['##b = 2', 'a = 1']);
    player.step();

    assert.equal(player.getCurrentLine(), 9);
    assert.deepEqual(getLocalVariables(trace, player), ['b = 2', 'a = 1']);
    player.step();

    assert.equal(player.getCurrentLine(), 11);
    assert.deepEqual(getLocalVariables(trace, player), ['a = 1']);
    player.step();

    assert.equal(player.getCurrentLine(), 13);
    assert.deepEqual(getLocalVariables(trace, player), ['##e = 5', 'a = 1']);
    player.step();

    assert.equal(player.getCurrentLine(), 15);
    assert.deepEqual(getLocalVariables(trace, player), ['##f = 6', 'e = 5', 'a = 1']);
    player.step();

    assert.equal(player.getCurrentLine(), 17);
    assert.deepEqual(getLocalVariables(trace, player), ['f = 6', 'e = 5', 'a = 1']);
    player.step();

    assert.equal(player.getCurrentLine(), 19);
    assert.deepEqual(getLocalVariables(trace, player), ['e = 5', 'a = 1']);
    player.step();

    assert.equal(player.getCurrentLine(), 20);
    assert.deepEqual(getLocalVariables(trace, player), ['##i = 9', 'e = 5', 'a = 1']);
    player.stepOut();
    player.stepOut();
    assert.isTrue(player.traceHasCompleted());
  });

  it('breakpoints fire during run', () => {
    const trace: DebugTrace = Convert.toDebugTrace(breakpointShader);
    const player = new DebugTracePlayer();
    player.reset(trace);

    // Run the simulation with a variety of breakpoints set.
    player.setBreakpoints(new Set([8, 13, 20]));
    player.run();
    assert.equal(player.getCurrentLine(), 8);

    player.run();
    assert.equal(player.getCurrentLine(), 8);

    player.addBreakpoint(1);
    player.removeBreakpoint(13);
    player.addBreakpoint(4);
    player.removeBreakpoint(20);
    player.run();
    assert.equal(player.getCurrentLine(), 8);

    player.run();
    assert.equal(player.getCurrentLine(), 4);

    player.setBreakpoints(new Set([4, 12, 14]));
    player.run();
    assert.equal(player.getCurrentLine(), 4);

    player.run();
    assert.equal(player.getCurrentLine(), 12);

    player.run();
    assert.isTrue(player.traceHasCompleted());

    // Run the simulation again with no breakpoints set. We should reach the end of the trace
    // instantly.
    player.reset(trace);
    player.setBreakpoints(new Set());
    assert.isFalse(player.traceHasCompleted());

    player.run();
    assert.isTrue(player.traceHasCompleted());
  });

  it('breakpoints fire during step-over', () => {
    // Try stepping over with no breakpoint set; we will step over.
    const trace: DebugTrace = Convert.toDebugTrace(stepOutShader);
    const player = new DebugTracePlayer();
    player.reset(trace);
    player.step();
    assert.equal(player.getCurrentLine(), 10);

    player.stepOver();
    assert.isTrue(player.traceHasCompleted());

    // Try stepping over with a breakpoint set; we will stop at the breakpoint.
    player.reset(trace);
    player.addBreakpoint(5);
    player.step();
    assert.equal(player.getCurrentLine(), 10);

    player.stepOver();
    assert.equal(player.getCurrentLine(), 5);
  });

  it('breakpoints fire during step-out', () => {
    // Try stepping out with no breakpoint set; we will step out.
    const trace: DebugTrace = Convert.toDebugTrace(stepOutShader);
    const player = new DebugTracePlayer();
    player.reset(trace);
    player.step();
    assert.equal(player.getCurrentLine(), 10);

    player.step();
    assert.equal(player.getCurrentLine(), 3);

    player.stepOut();
    assert.equal(player.getCurrentLine(), 10);

    // Try stepping out with a breakpoint set; we will stop at the breakpoint.
    player.reset(trace);
    player.addBreakpoint(6);
    player.step();
    assert.equal(player.getCurrentLine(), 10);

    player.step();
    assert.equal(player.getCurrentLine(), 3);

    player.stepOut();
    assert.equal(player.getCurrentLine(), 6);
  });
});
