init geek calc
Some checks failed
Deploy to GitHub Pages / build-and-deploy (push) Has been cancelled
Some checks failed
Deploy to GitHub Pages / build-and-deploy (push) Has been cancelled
This commit is contained in:
79
tests/unit/rpn-calculator.test.js
Normal file
79
tests/unit/rpn-calculator.test.js
Normal file
@@ -0,0 +1,79 @@
|
||||
// Contract test for RPN Calculator API
|
||||
// This test should fail initially since the rpn-calculator module doesn't exist yet
|
||||
|
||||
// Define expected interface for RPN calculator module
|
||||
const expectedRPNCalculatorInterface = [
|
||||
'push',
|
||||
'pop',
|
||||
'operate',
|
||||
'clear',
|
||||
'getStack',
|
||||
'evaluate'
|
||||
];
|
||||
|
||||
// Test if RPN calculator module exists and has expected interface
|
||||
function testRPNCalculatorInterface() {
|
||||
try {
|
||||
// This will fail since rpn-calculator.js doesn't exist yet
|
||||
const rpnCalc = new RPNCalculator();
|
||||
|
||||
// Check if all expected methods exist
|
||||
for (const method of expectedRPNCalculatorInterface) {
|
||||
if (typeof rpnCalc[method] !== 'function') {
|
||||
throw new Error(`Method ${method} does not exist on RPNCalculator`);
|
||||
}
|
||||
}
|
||||
|
||||
// Test basic RPN functionality
|
||||
// Push should add value to stack
|
||||
rpnCalc.push(3);
|
||||
const stackAfterPush = rpnCalc.getStack();
|
||||
if (stackAfterPush.length !== 1 || stackAfterPush[0] !== 3) {
|
||||
throw new Error('RPN calculator push method does not work correctly');
|
||||
}
|
||||
|
||||
// Pop should remove and return top value from stack
|
||||
const poppedValue = rpnCalc.pop();
|
||||
if (poppedValue !== 3) {
|
||||
throw new Error('RPN calculator pop method does not return correct value');
|
||||
}
|
||||
|
||||
// Stack should be empty after pop
|
||||
if (rpnCalc.getStack().length !== 0) {
|
||||
throw new Error('RPN calculator stack not empty after pop');
|
||||
}
|
||||
|
||||
// Clear should empty the stack
|
||||
rpnCalc.push(1);
|
||||
rpnCalc.push(2);
|
||||
rpnCalc.clear();
|
||||
if (rpnCalc.getStack().length !== 0) {
|
||||
throw new Error('RPN calculator clear method does not empty the stack');
|
||||
}
|
||||
|
||||
// Operate should perform operation on stack values
|
||||
rpnCalc.push(2);
|
||||
rpnCalc.push(3);
|
||||
const result = rpnCalc.operate('+');
|
||||
if (result !== 5) {
|
||||
throw new Error('RPN calculator operate method does not return correct result for addition');
|
||||
}
|
||||
|
||||
// Evaluate should handle RPN expressions
|
||||
const evalResult = rpnCalc.evaluate('2 3 +');
|
||||
if (evalResult !== 5) {
|
||||
throw new Error('RPN calculator evaluate method does not return correct result');
|
||||
}
|
||||
|
||||
return true; // All tests passed
|
||||
} catch (error) {
|
||||
return { error: error.message };
|
||||
}
|
||||
}
|
||||
|
||||
// Add test to global test collection
|
||||
if (typeof addTest !== 'undefined') {
|
||||
addTest('RPN Calculator Interface Contract', testRPNCalculatorInterface);
|
||||
} else {
|
||||
console.log('Test harness not loaded. Run with test runner.');
|
||||
}
|
||||
Reference in New Issue
Block a user