// Copyright 2006 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.HeapTest'); goog.setTestOnly('goog.structs.HeapTest'); goog.require('goog.structs'); goog.require('goog.structs.Heap'); goog.require('goog.testing.jsunit'); function getHeap() { var h = new goog.structs.Heap(); h.insert(0, 'a'); h.insert(1, 'b'); h.insert(2, 'c'); h.insert(3, 'd'); return h; } function getHeap2() { var h = new goog.structs.Heap(); h.insert(1, 'b'); h.insert(3, 'd'); h.insert(0, 'a'); h.insert(2, 'c'); return h; } function testGetCount1() { var h = getHeap(); assertEquals('count, should be 4', h.getCount(), 4); h.remove(); assertEquals('count, should be 3', h.getCount(), 3); } function testGetCount2() { var h = getHeap(); h.remove(); h.remove(); h.remove(); h.remove(); assertEquals('count, should be 0', h.getCount(), 0); } function testKeys() { var h = getHeap(); var keys = h.getKeys(); for (var i = 0; i < 4; i++) { assertTrue('getKeys, key ' + i + ' found', goog.structs.contains(keys, i)); } assertEquals('getKeys, Should be 4 keys', goog.structs.getCount(keys), 4); } function testValues() { var h = getHeap(); var values = h.getValues(); assertTrue('getKeys, value "a" found', goog.structs.contains(values, 'a')); assertTrue('getKeys, value "b" found', goog.structs.contains(values, 'b')); assertTrue('getKeys, value "c" found', goog.structs.contains(values, 'c')); assertTrue('getKeys, value "d" found', goog.structs.contains(values, 'd')); assertEquals('getKeys, Should be 4 keys', goog.structs.getCount(values), 4); } function testContainsKey() { var h = getHeap(); for (var i = 0; i < 4; i++) { assertTrue('containsKey, key ' + i + ' found', h.containsKey(i)); } assertFalse('containsKey, value 4 not found', h.containsKey(4)); } function testContainsValue() { var h = getHeap(); assertTrue('containsValue, value "a" found', h.containsValue('a')); assertTrue('containsValue, value "b" found', h.containsValue('b')); assertTrue('containsValue, value "c" found', h.containsValue('c')); assertTrue('containsValue, value "d" found', h.containsValue('d')); assertFalse('containsValue, value "e" not found', h.containsValue('e')); } function testClone() { var h = getHeap(); var h2 = h.clone(); assertTrue('clone so it should not be empty', !h2.isEmpty()); assertTrue('clone so it should contain key 0', h2.containsKey(0)); assertTrue('clone so it should contain value "a"', h2.containsValue('a')); } function testClear() { var h = getHeap(); h.clear(); assertTrue('cleared so it should be empty', h.isEmpty()); } function testIsEmpty() { var h = getHeap(); assertFalse('4 values so should not be empty', h.isEmpty()); h.remove(); h.remove(); h.remove(); assertFalse('1 values so should not be empty', h.isEmpty()); h.remove(); assertTrue('0 values so should be empty', h.isEmpty()); } function testPeek1() { var h = getHeap(); assertEquals('peek, Should be "a"', h.peek(), 'a'); } function testPeek2() { var h = getHeap2(); assertEquals('peek, Should be "a"', h.peek(), 'a'); } function testPeek3() { var h = getHeap(); h.clear(); assertEquals('peek, Should be "undefined"', h.peek(), undefined); } function testPeekKey1() { var h = getHeap(); assertEquals('peekKey, Should be "0"', h.peekKey(), 0); } function testPeekKey2() { var h = getHeap2(); assertEquals('peekKey, Should be "0"', h.peekKey(), 0); } function testPeekKey3() { var h = getHeap(); h.clear(); assertEquals('peekKey, Should be "undefined"', h.peekKey(), undefined); } function testRemove1() { var h = getHeap(); assertEquals('remove, Should be "a"', h.remove(), 'a'); assertEquals('remove, Should be "b"', h.remove(), 'b'); assertEquals('remove, Should be "c"', h.remove(), 'c'); assertEquals('remove, Should be "d"', h.remove(), 'd'); } function testRemove2() { var h = getHeap2(); assertEquals('remove, Should be "a"', h.remove(), 'a'); assertEquals('remove, Should be "b"', h.remove(), 'b'); assertEquals('remove, Should be "c"', h.remove(), 'c'); assertEquals('remove, Should be "d"', h.remove(), 'd'); } function testInsertPeek1() { var h = new goog.structs.Heap(); h.insert(3, 'd'); assertEquals('peek, Should be "d"', h.peek(), 'd'); h.insert(2, 'c'); assertEquals('peek, Should be "c"', h.peek(), 'c'); h.insert(1, 'b'); assertEquals('peek, Should be "b"', h.peek(), 'b'); h.insert(0, 'a'); assertEquals('peek, Should be "a"', h.peek(), 'a'); } function testInsertPeek2() { var h = new goog.structs.Heap(); h.insert(1, 'b'); assertEquals('peak, Should be "b"', h.peek(), 'b'); h.insert(3, 'd'); assertEquals('peak, Should be "b"', h.peek(), 'b'); h.insert(0, 'a'); assertEquals('peak, Should be "a"', h.peek(), 'a'); h.insert(2, 'c'); assertEquals('peak, Should be "a"', h.peek(), 'a'); }