```ts
/** Count the hits a key stream scores on a direct-mapped cache. */

export function slotHits(keys: number[], slots: number): number {
  if (!Number.isInteger(slots) || slots <= 0) {
    throw new Error('Invalid slot count');
  }
  const held: (number | null)[] = new Array(slots).fill(null);
  let hits = 0;
  for (const key of keys) {
    if (!Number.isInteger(key)) {
      throw new Error('Non-integer key encountered');
    }
    const index = Math.abs(key % slots);
    if (held[index] === key) {
      hits++;
    } else {
      held[index] = key;
    }
  }
  return hits;
}
```