Skip to main content
Glama

Physics MCP Server

by BlinkZer0
cas.test.js6.58 kB
const { createMockWorkerClient, fixtures, testUtils } = require('../../../tests/shared/test-harness'); const { handleCAS } = require('../dist'); // Mock the worker client jest.mock('../../tools-cas/dist/worker-client.js', () => ({ getWorkerClient: () => createMockWorkerClient({ 'cas_evaluate': { success: true, result: 14 }, 'cas_diff': { success: true, result: '2*x' }, 'cas_integrate': { success: true, result: 'x**2 + 3*x' }, 'cas_solve_equation': { success: true, result: [-2, 2] } }) })); describe('CAS Tool - Comprehensive Test Suite', () => { beforeEach(() => { testUtils.mockFileSystem(); }); describe('Basic Arithmetic Operations', () => { test('2 + 3 * 4 = 14', async () => { const result = await handleCAS('cas', { action: 'evaluate', expr: '2 + 3 * 4' }); testUtils.validateToolResponse(result); expect(result.result).toBe(14); }); test('(5 + 3) * 2 = 16', async () => { const mockClient = createMockWorkerClient({ 'cas_evaluate': { success: true, result: 16 } }); jest.doMock('../../tools-cas/dist/worker-client.js', () => ({ getWorkerClient: () => mockClient })); const result = await handleCAS('cas', { action: 'evaluate', expr: '(5 + 3) * 2' }); expect(result.result).toBe(16); }); test('sqrt(16) = 4', async () => { const mockClient = createMockWorkerClient({ 'cas_evaluate': { success: true, result: 4 } }); jest.doMock('../../tools-cas/dist/worker-client.js', () => ({ getWorkerClient: () => mockClient })); const result = await handleCAS('cas', { action: 'evaluate', expr: 'sqrt(16)' }); expect(result.result).toBe(4); }); }); describe('Algebraic Expressions', () => { test('x^2 + 2x + 1 with x=3 → 16', async () => { const mockClient = createMockWorkerClient({ 'cas_evaluate': { success: true, result: 16 } }); jest.doMock('../../tools-cas/dist/worker-client.js', () => ({ getWorkerClient: () => mockClient })); const result = await handleCAS('cas', { action: 'evaluate', expr: 'x^2 + 2*x + 1', vars: { x: 3 } }); expect(result.result).toBe(16); }); test('a*b + c with a=2, b=3, c=4 → 10', async () => { const mockClient = createMockWorkerClient({ 'cas_evaluate': { success: true, result: 10 } }); jest.doMock('../../tools-cas/dist/worker-client.js', () => ({ getWorkerClient: () => mockClient })); const result = await handleCAS('cas', { action: 'evaluate', expr: 'a*b + c', vars: { a: 2, b: 3, c: 4 } }); expect(result.result).toBe(10); }); }); describe('Differentiation', () => { test('d/dx(x^2) = 2x', async () => { const result = await handleCAS('cas', { action: 'diff', expr: 'x^2', symbol: 'x' }); testUtils.validateToolResponse(result); expect(result.result).toBe('2*x'); }); test('d/dx(x^3 + 2x^2 + x + 1) = 3x^2 + 4x + 1', async () => { const mockClient = createMockWorkerClient({ 'cas_diff': { success: true, result: '3*x**2 + 4*x + 1' } }); jest.doMock('../../tools-cas/dist/worker-client.js', () => ({ getWorkerClient: () => mockClient })); const result = await handleCAS('cas', { action: 'diff', expr: 'x^3 + 2*x^2 + x + 1', symbol: 'x' }); expect(result.result).toBe('3*x**2 + 4*x + 1'); }); }); describe('Integration', () => { test('∫(2x + 3)dx = x^2 + 3x', async () => { const result = await handleCAS('cas', { action: 'integrate', expr: '2*x + 3', symbol: 'x' }); testUtils.validateToolResponse(result); expect(result.result).toBe('x**2 + 3*x'); }); test('Definite integral ∫₀²x²dx = 8/3', async () => { const mockClient = createMockWorkerClient({ 'cas_integrate': { success: true, result: 8/3 } }); jest.doMock('../../tools-cas/dist/worker-client.js', () => ({ getWorkerClient: () => mockClient })); const result = await handleCAS('cas', { action: 'integrate', expr: 'x^2', symbol: 'x', limits: [0, 2] }); expect(result.result).toBeCloseTo(8/3, 3); }); }); describe('Equation Solving', () => { test('x^2 - 4 = 0 → x = ±2', async () => { const result = await handleCAS('cas', { action: 'solve_equation', equation: 'x^2 - 4 = 0', symbol: 'x' }); testUtils.validateToolResponse(result); expect(result.result).toEqual([-2, 2]); }); test('2x + 6 = 0 → x = -3', async () => { const mockClient = createMockWorkerClient({ 'cas_solve_equation': { success: true, result: [-3] } }); jest.doMock('../../tools-cas/dist/worker-client.js', () => ({ getWorkerClient: () => mockClient })); const result = await handleCAS('cas', { action: 'solve_equation', equation: '2*x + 6 = 0', symbol: 'x' }); expect(result.result).toEqual([-3]); }); }); describe('Complex Expressions', () => { test('sqrt(16) + log(exp(2)) + sin(π/2) = 7', async () => { const mockClient = createMockWorkerClient({ 'cas_evaluate': { success: true, result: 7 } }); jest.doMock('../../tools-cas/dist/worker-client.js', () => ({ getWorkerClient: () => mockClient })); const result = await handleCAS('cas', { action: 'evaluate', expr: 'sqrt(16) + log(exp(2)) + sin(pi/2)' }); expect(result.result).toBe(7); }); test('factorial(5)/factorial(3) = 20', async () => { const mockClient = createMockWorkerClient({ 'cas_evaluate': { success: true, result: 20 } }); jest.doMock('../../tools-cas/dist/worker-client.js', () => ({ getWorkerClient: () => mockClient })); const result = await handleCAS('cas', { action: 'evaluate', expr: 'factorial(5)/factorial(3)' }); expect(result.result).toBe(20); }); }); describe('Error Handling', () => { test('Invalid expression should return error', async () => { const mockClient = createMockWorkerClient({ 'cas_evaluate': { success: false, error: 'Invalid expression' } }); jest.doMock('../../tools-cas/dist/worker-client.js', () => ({ getWorkerClient: () => mockClient })); const result = await handleCAS('cas', { action: 'evaluate', expr: 'invalid_expr(' }); expect(result.success).toBe(false); expect(result.error).toBeDefined(); }); test('Missing required parameters should return error', async () => { const result = await handleCAS('cas', { action: 'evaluate' }); // Missing expr expect(result.success).toBe(false); }); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/BlinkZer0/Phys-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server