michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: /* michael@0: * Date: 07 May 2001 michael@0: * michael@0: * SUMMARY: Testing the switch statement michael@0: * michael@0: * See ECMA3 Section 12.11, "The switch Statement" michael@0: */ michael@0: //----------------------------------------------------------------------------- michael@0: var UBound = 0; michael@0: var BUGNUMBER = '(none)'; michael@0: var summary = 'Testing the switch statement'; michael@0: var cnMatch = 'Match'; michael@0: var cnNoMatch = 'NoMatch'; michael@0: var status = ''; michael@0: var statusitems = [ ]; michael@0: var actual = ''; michael@0: var actualvalues = [ ]; michael@0: var expect= ''; michael@0: var expectedvalues = [ ]; michael@0: michael@0: michael@0: status = 'Section A of test'; michael@0: actual = match(17, f(fInverse(17)), f, fInverse); michael@0: expect = cnMatch; michael@0: addThis(); michael@0: michael@0: status = 'Section B of test'; michael@0: actual = match(17, 18, f, fInverse); michael@0: expect = cnNoMatch; michael@0: addThis(); michael@0: michael@0: status = 'Section C of test'; michael@0: actual = match(1, 1, Math.exp, Math.log); michael@0: expect = cnMatch; michael@0: addThis(); michael@0: michael@0: status = 'Section D of test'; michael@0: actual = match(1, 2, Math.exp, Math.log); michael@0: expect = cnNoMatch; michael@0: addThis(); michael@0: michael@0: status = 'Section E of test'; michael@0: actual = match(1, 1, Math.sin, Math.cos); michael@0: expect = cnNoMatch; michael@0: addThis(); michael@0: michael@0: michael@0: michael@0: //--------------------------------------------------------------------------------- michael@0: test(); michael@0: //--------------------------------------------------------------------------------- michael@0: michael@0: michael@0: michael@0: /* michael@0: * If F,G are inverse functions and x==y, this should return cnMatch - michael@0: */ michael@0: function match(x, y, F, G) michael@0: { michael@0: switch (x) michael@0: { michael@0: case F(G(y)): michael@0: return cnMatch; michael@0: michael@0: default: michael@0: return cnNoMatch; michael@0: } michael@0: } michael@0: michael@0: michael@0: function addThis() michael@0: { michael@0: statusitems[UBound] = status; michael@0: actualvalues[UBound] = actual; michael@0: expectedvalues[UBound] = expect; michael@0: UBound++; michael@0: } michael@0: michael@0: michael@0: function test() michael@0: { michael@0: enterFunc ('test'); michael@0: printBugNumber(BUGNUMBER); michael@0: printStatus (summary); michael@0: michael@0: for (var i = 0; i < UBound; i++) michael@0: { michael@0: reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); michael@0: } michael@0: michael@0: exitFunc ('test'); michael@0: } michael@0: michael@0: michael@0: function f(m) michael@0: { michael@0: return 2*(m+1); michael@0: } michael@0: michael@0: michael@0: function fInverse(n) michael@0: { michael@0: return (n-2)/2; michael@0: }