MCP Rand

import { generateGaussianHandler } from '../generate-gaussian.handler.js'; import { CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js'; type CallToolRequest = typeof CallToolRequestSchema._output; describe('generateGaussianHandler', () => { it('should generate a number between 0 and 1', async () => { const request: CallToolRequest = { method: 'tools/call', params: { name: 'generate_gaussian', arguments: {} } }; const result = await generateGaussianHandler(request); const number = parseFloat(result.content[0].text as string); expect(number).toBeGreaterThanOrEqual(0); expect(number).toBeLessThanOrEqual(1); }); it('should generate different numbers on subsequent calls', async () => { const request: CallToolRequest = { method: 'tools/call', params: { name: 'generate_gaussian', arguments: {} } }; const result1 = await generateGaussianHandler(request); const result2 = await generateGaussianHandler(request); expect(result1.content[0].text).not.toBe(result2.content[0].text); }); it('should follow a normal distribution', async () => { const request: CallToolRequest = { method: 'tools/call', params: { name: 'generate_gaussian', arguments: {} } }; // Generate a large sample to test distribution properties const samples = []; for (let i = 0; i < 1000; i++) { const result = await generateGaussianHandler(request); samples.push(parseFloat(result.content[0].text as string)); } // Calculate mean (should be close to 0.5) const mean = samples.reduce((a, b) => a + b) / samples.length; expect(mean).toBeGreaterThan(0.4); expect(mean).toBeLessThan(0.6); // Calculate standard deviation (should be reasonable for normalized distribution) const variance = samples.reduce((a, b) => a + Math.pow(b - mean, 2), 0) / samples.length; const stdDev = Math.sqrt(variance); expect(stdDev).toBeGreaterThan(0.1); expect(stdDev).toBeLessThan(0.3); }); });