import { describe, it, expect } from 'vitest';
import { timingSafeEqualStr } from './timing-safe.js';

describe('timingSafeEqualStr', () => {
  it('returns true for equal strings', () => {
    expect(timingSafeEqualStr('hunter2-secret', 'hunter2-secret')).toBe(true);
  });
  it('returns false for equal-length different strings', () => {
    expect(timingSafeEqualStr('hunter2-secret', 'hunter2-secreX')).toBe(false);
  });
  it('returns false for different-length strings (no early return)', () => {
    expect(timingSafeEqualStr('short', 'a-much-longer-secret')).toBe(false);
  });
  it('returns false when one side is empty', () => {
    expect(timingSafeEqualStr('', 'nonempty')).toBe(false);
    expect(timingSafeEqualStr('nonempty', '')).toBe(false);
  });
  it('returns true for two empty strings', () => {
    expect(timingSafeEqualStr('', '')).toBe(true);
  });
});
