All files / domain ReplayCursor.res.mjs

92.85% Statements 26/28
71.42% Branches 10/14
100% Functions 8/8
92.85% Lines 26/28

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96      1x           3x       4x       8x       3x   3x 1x   2x         3x 3x 3x             2x           2x 2x 2x                   2x 2x 2x 2x 3x 3x 3x       3x   2x 2x                   1x                            
// Generated by ReScript, PLEASE EDIT WITH CARE
 
 
let initial = {
  nextIndex: 0,
  virtualNowMs: 0
};
 
function position(state) {
  return state.nextIndex;
}
 
function virtualNowMs(state) {
  return state.virtualNowMs;
}
 
function done(state, timestamps) {
  return state.nextIndex >= timestamps.length;
}
 
function timestampBefore(timestamps, index) {
  Iif (timestamps.length === 0) {
    return 0;
  } else if (index <= 0) {
    return timestamps[0];
  } else {
    return timestamps[index - 1 | 0];
  }
}
 
function seekTo(timestamps, index) {
  let bounded = index < 0 ? 0 : index;
  let nextIndex = bounded > timestamps.length ? timestamps.length : bounded;
  return {
    nextIndex: nextIndex,
    virtualNowMs: timestampBefore(timestamps, nextIndex)
  };
}
 
function stepOne(state, timestamps) {
  Iif (done(state, timestamps)) {
    return [
      state,
      undefined
    ];
  }
  let index = state.nextIndex;
  let timestamp = timestamps[index];
  return [
    {
      nextIndex: index + 1 | 0,
      virtualNowMs: timestamp
    },
    index
  ];
}
 
function advanceTo(state, timestamps, targetMs) {
  let target = targetMs < state.virtualNowMs ? state.virtualNowMs : targetMs;
  let cursor = state;
  let emitted = [];
  while (!done(cursor, timestamps) && timestamps[cursor.nextIndex] <= target) {
    let index = cursor.nextIndex;
    let timestamp = timestamps[index];
    cursor = {
      nextIndex: index + 1 | 0,
      virtualNowMs: timestamp
    };
    emitted.push(index);
  };
  let init = cursor;
  return [
    {
      nextIndex: init.nextIndex,
      virtualNowMs: target
    },
    emitted
  ];
}
 
function reset(param) {
  return initial;
}
 
export {
  initial,
  reset,
  position,
  virtualNowMs,
  done,
  seekTo,
  stepOne,
  advanceTo,
}
/* No side effect */