UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

106 lines (80 loc) 3.1 kB
import { describe, expect, it, vi } from 'vitest'; import { MAX_SEED, generateUniqueSeeds } from './number'; describe('number utilities', () => { describe('MAX_SEED constant', () => { it('should be 2^31 - 1', () => { expect(MAX_SEED).toBe(2147483647); expect(MAX_SEED).toBe(2 ** 31 - 1); }); }); describe('generateUniqueSeeds', () => { it('should generate the correct number of seeds', () => { const seedCount = 5; const seeds = generateUniqueSeeds(seedCount); expect(seeds).toHaveLength(seedCount); }); it('should generate unique seeds', () => { const seedCount = 10; const seeds = generateUniqueSeeds(seedCount); // Convert to Set to check uniqueness const uniqueSeeds = new Set(seeds); expect(uniqueSeeds.size).toBe(seedCount); }); it('should generate seeds within valid range', () => { const seedCount = 20; const seeds = generateUniqueSeeds(seedCount); seeds.forEach((seed) => { expect(seed).toBeGreaterThanOrEqual(0); expect(seed).toBeLessThanOrEqual(MAX_SEED); expect(Number.isInteger(seed)).toBe(true); }); }); it('should handle edge case of 0 seeds', () => { const seeds = generateUniqueSeeds(0); expect(seeds).toHaveLength(0); expect(Array.isArray(seeds)).toBe(true); }); it('should handle edge case of 1 seed', () => { const seeds = generateUniqueSeeds(1); expect(seeds).toHaveLength(1); expect(seeds[0]).toBeGreaterThanOrEqual(0); expect(seeds[0]).toBeLessThanOrEqual(MAX_SEED); }); it('should generate different results on different calls', () => { const seedCount = 5; // Generate seeds at different times to ensure different timestamps const seeds1 = generateUniqueSeeds(seedCount); // Add a small delay to ensure different timestamp vi.useFakeTimers(); vi.advanceTimersByTime(1); const seeds2 = generateUniqueSeeds(seedCount); vi.useRealTimers(); // The arrays should not be identical (very low probability of collision) expect(seeds1).not.toEqual(seeds2); }); it('should handle larger seed counts', () => { const seedCount = 100; const seeds = generateUniqueSeeds(seedCount); expect(seeds).toHaveLength(seedCount); // Verify uniqueness const uniqueSeeds = new Set(seeds); expect(uniqueSeeds.size).toBe(seedCount); // Verify all are in valid range seeds.forEach((seed) => { expect(seed).toBeGreaterThanOrEqual(0); expect(seed).toBeLessThanOrEqual(MAX_SEED); }); }); it('should use current timestamp as initial seed', () => { const mockTimestamp = 1234567890123; vi.useFakeTimers(); vi.setSystemTime(mockTimestamp); // Mock Date.now to verify it's being used const dateSpy = vi.spyOn(Date, 'now').mockReturnValue(mockTimestamp); generateUniqueSeeds(3); expect(dateSpy).toHaveBeenCalled(); dateSpy.mockRestore(); vi.useRealTimers(); }); }); });