// Copyright 2008 The Closure Library Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS-IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. goog.provide('goog.structs.InversionMapTest'); goog.setTestOnly('goog.structs.InversionMapTest'); goog.require('goog.structs.InversionMap'); goog.require('goog.testing.jsunit'); function testInversionWithDelta() { var alphabetNames = new goog.structs.InversionMap( [0, 97, 1, 1, 1, 20, 1, 1, 1], [null, 'LATIN SMALL LETTER A', 'LATIN SMALL LETTER B', 'LATIN SMALL LETTER C', null, 'LATIN SMALL LETTER X', 'LATIN SMALL LETTER Y', 'LATIN SMALL LETTER Z', null], true); assertEquals('LATIN SMALL LETTER A', alphabetNames.at(97)); assertEquals('LATIN SMALL LETTER Y', alphabetNames.at(121)); assertEquals(null, alphabetNames.at(140)); assertEquals(null, alphabetNames.at(0)); } function testInversionWithoutDelta() { var alphabetNames = new goog.structs.InversionMap( [0, 97, 98, 99, 100, 120, 121, 122, 123], [null, 'LATIN SMALL LETTER A', 'LATIN SMALL LETTER B', 'LATIN SMALL LETTER C', null, 'LATIN SMALL LETTER X', 'LATIN SMALL LETTER Y', 'LATIN SMALL LETTER Z', null], false); assertEquals('LATIN SMALL LETTER A', alphabetNames.at(97)); assertEquals('LATIN SMALL LETTER Y', alphabetNames.at(121)); assertEquals(null, alphabetNames.at(140)); assertEquals(null, alphabetNames.at(0)); } function testInversionWithoutDeltaNoOpt() { var alphabetNames = new goog.structs.InversionMap( [0, 97, 98, 99, 100, 120, 121, 122, 123], [null, 'LATIN SMALL LETTER A', 'LATIN SMALL LETTER B', 'LATIN SMALL LETTER C', null, 'LATIN SMALL LETTER X', 'LATIN SMALL LETTER Y', 'LATIN SMALL LETTER Z', null]); assertEquals('LATIN SMALL LETTER A', alphabetNames.at(97)); assertEquals('LATIN SMALL LETTER Y', alphabetNames.at(121)); assertEquals(null, alphabetNames.at(140)); assertEquals(null, alphabetNames.at(0)); } function testInversionMapSplice1() { var alphabetNames = newAsciiMap(); alphabetNames.spliceInversion( [99, 105, 114], ['XXX', 'YYY', 'ZZZ']); assertEquals('LATIN SMALL LETTER B', alphabetNames.at(98)); assertEquals('XXX', alphabetNames.at(100)); assertEquals('ZZZ', alphabetNames.at(114)); assertEquals('ZZZ', alphabetNames.at(119)); assertEquals('LATIN SMALL LETTER X', alphabetNames.at(120)); } function testInversionMapSplice2() { var alphabetNames = newAsciiMap(); alphabetNames.spliceInversion( [105, 114, 121], ['XXX', 'YYY', 'ZZZ']); assertEquals(null, alphabetNames.at(104)); assertEquals('XXX', alphabetNames.at(105)); assertEquals('YYY', alphabetNames.at(120)); assertEquals('ZZZ', alphabetNames.at(121)); assertEquals('LATIN SMALL LETTER Z', alphabetNames.at(122)); } function testInversionMapSplice3() { var alphabetNames = newAsciiMap(); alphabetNames.spliceInversion( [98, 99], ['CHANGED LETTER B', 'CHANGED LETTER C']); assertEquals('LATIN SMALL LETTER A', alphabetNames.at(97)); assertEquals('CHANGED LETTER B', alphabetNames.at(98)); assertEquals('CHANGED LETTER C', alphabetNames.at(99)); assertEquals('LATIN SMALL LETTER D', alphabetNames.at(100)); assertEquals(null, alphabetNames.at(101)); } function testInversionMapSplice4() { var alphabetNames = newAsciiMap(); alphabetNames.spliceInversion( [98, 1], ['CHANGED LETTER B', 'CHANGED LETTER C'], true /* delta mode */); assertEquals('LATIN SMALL LETTER A', alphabetNames.at(97)); assertEquals('CHANGED LETTER B', alphabetNames.at(98)); assertEquals('CHANGED LETTER C', alphabetNames.at(99)); assertEquals('LATIN SMALL LETTER D', alphabetNames.at(100)); assertEquals(null, alphabetNames.at(101)); } function testInversionMapSplice5() { var map = new goog.structs.InversionMap( [0, 97, 98, 99], [null, 'LATIN SMALL LETTER A', 'LATIN SMALL LETTER B', 'LATIN SMALL LETTER C']); map.spliceInversion( [98], ['CHANGED LETTER B']); assertEquals('LATIN SMALL LETTER A', map.at(97)); assertEquals('CHANGED LETTER B', map.at(98)); assertEquals('LATIN SMALL LETTER C', map.at(99)); assertArrayEquals([0, 97, 98, 99], map.rangeArray); } function newAsciiMap() { return new goog.structs.InversionMap( [0, 97, 98, 99, 100, 101, 120, 121, 122, 123], [null, 'LATIN SMALL LETTER A', 'LATIN SMALL LETTER B', 'LATIN SMALL LETTER C', 'LATIN SMALL LETTER D', null, 'LATIN SMALL LETTER X', 'LATIN SMALL LETTER Y', 'LATIN SMALL LETTER Z', null]); }