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);
  });
});
