sku-pg
Version:
Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!
292 lines (225 loc) • 6.78 kB
HTML
<html>
<!--
Copyright 2006 The Closure Library Authors. All Rights Reserved.
Use of this source code is governed by the Apache License, Version 2.0.
See the COPYING file for details.
-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Closure Unit Tests - goog.structs.Pool</title>
<script src="../base.js"></script>
<script>
goog.require('goog.structs');
goog.require('goog.structs.Pool');
goog.require('goog.testing.MockClock');
goog.require('goog.testing.jsunit');
</script>
</head>
<body>
<script>
// Implementation of the Pool class with isObjectDead() always returning TRUE,
// so that the the Pool will not reuse any objects.
function NoObjectReusePool(opt_min, opt_max) {
goog.structs.Pool.call(this, opt_min, opt_max);
};
goog.inherits(NoObjectReusePool, goog.structs.Pool);
NoObjectReusePool.prototype.objectCanBeReused = function(obj) {
return false;
};
function testExceedMax1() {
var p = new goog.structs.Pool(0, 3);
var obj1 = p.getObject();
var obj2 = p.getObject();
var obj3 = p.getObject();
var obj4 = p.getObject();
var obj5 = p.getObject();
assertNotUndefined(obj1);
assertNotUndefined(obj2);
assertNotUndefined(obj3);
assertUndefined(obj4);
assertUndefined(obj5);
}
function testExceedMax2() {
var p = new goog.structs.Pool(0, 1);
var obj1 = p.getObject();
var obj2 = p.getObject();
var obj3 = p.getObject();
var obj4 = p.getObject();
var obj5 = p.getObject();
assertNotUndefined(obj1);
assertUndefined(obj2);
assertUndefined(obj3);
assertUndefined(obj4);
assertUndefined(obj5);
}
function testExceedMax3() {
var p = new goog.structs.Pool(); // default: 10
var objs = [];
for (var i = 0; i < 12; i++) {
objs[i] = p.getObject();
}
for (var i = 0; i < 10; i++) {
assertNotNull('First 10 should be not null', objs[i]);
}
assertUndefined(objs[10]);
assertUndefined(objs[11]);
}
function testReleaseAndGet1() {
var p = new goog.structs.Pool(0, 10);
var o = p.getObject();
assertEquals(1, p.getCount());
assertEquals(1, p.getInUseCount());
assertEquals(0, p.getFreeCount());
assertTrue('Result should be true', p.releaseObject(o));
assertEquals(1, p.getCount());
assertEquals(0, p.getInUseCount());
assertEquals(1, p.getFreeCount());
}
function testReleaseAndGet2() {
var p = new NoObjectReusePool(0, 10);
var o = p.getObject();
assertEquals(1, p.getCount());
assertEquals(1, p.getInUseCount());
assertEquals(0, p.getFreeCount());
assertTrue('Result should be true', p.releaseObject(o));
assertEquals(0, p.getCount());
assertEquals(0, p.getInUseCount());
assertEquals(0, p.getFreeCount());
}
function testReleaseAndGet3() {
var p = new goog.structs.Pool(0, 10);
var o1 = p.getObject();
var o2 = p.getObject();
var o3 = p.getObject();
var o4 = {};
assertEquals(3, p.getCount());
assertEquals(3, p.getInUseCount());
assertEquals(0, p.getFreeCount());
assertTrue('Result should be true', p.releaseObject(o1));
assertTrue('Result should be true', p.releaseObject(o2));
assertFalse('Result should be false', p.releaseObject(o4));
assertEquals(3, p.getCount());
assertEquals(1, p.getInUseCount());
assertEquals(2, p.getFreeCount());
}
function testReleaseAndGet4() {
var p = new NoObjectReusePool(0, 10);
var o1 = p.getObject();
var o2 = p.getObject();
var o3 = p.getObject();
var o4 = {};
assertEquals(3, p.getCount());
assertEquals(3, p.getInUseCount());
assertEquals(0, p.getFreeCount());
assertTrue('Result should be true', p.releaseObject(o1));
assertTrue('Result should be true', p.releaseObject(o2));
assertFalse('Result should be false', p.releaseObject(o4));
assertEquals(1, p.getCount());
assertEquals(1, p.getInUseCount());
assertEquals(0, p.getFreeCount());
}
function testIsInPool1() {
var p = new goog.structs.Pool();
var o1 = p.getObject();
var o2 = p.getObject();
var o3 = p.getObject();
var o4 = {};
var o5 = {};
var o6 = o1;
assertTrue(p.contains(o1));
assertTrue(p.contains(o2));
assertTrue(p.contains(o3));
assertFalse(p.contains(o4));
assertFalse(p.contains(o5));
assertTrue(p.contains(o6));
}
function testSetMin1() {
var p = new goog.structs.Pool(0, 10);
assertEquals(0, p.getCount());
assertEquals(0, p.getInUseCount());
assertEquals(0, p.getFreeCount());
p.setMinimumCount(10);
assertEquals(10, p.getCount());
assertEquals(0, p.getInUseCount());
assertEquals(10, p.getFreeCount());
}
function testSetMin2() {
var p = new goog.structs.Pool(0, 10);
assertEquals(0, p.getCount());
assertEquals(0, p.getInUseCount());
assertEquals(0, p.getFreeCount());
var o1 = p.getObject();
assertEquals(1, p.getCount());
assertEquals(1, p.getInUseCount());
assertEquals(0, p.getFreeCount());
p.setMinimumCount(10);
assertEquals(10, p.getCount());
assertEquals(1, p.getInUseCount());
assertEquals(9, p.getFreeCount());
}
function testSetMax1() {
var p = new goog.structs.Pool(0, 10);
assertEquals(0, p.getCount());
assertEquals(0, p.getInUseCount());
assertEquals(0, p.getFreeCount());
var o1 = p.getObject();
var o2 = p.getObject();
var o3 = p.getObject();
var o4 = p.getObject();
var o5 = p.getObject();
assertEquals(5, p.getCount());
assertEquals(5, p.getInUseCount());
assertEquals(0, p.getFreeCount());
assertTrue('Result should be true', p.releaseObject(o5));
assertEquals(5, p.getCount());
assertEquals(4, p.getInUseCount());
assertEquals(1, p.getFreeCount());
p.setMaximumCount(4);
assertEquals(4, p.getCount());
assertEquals(4, p.getInUseCount());
assertEquals(0, p.getFreeCount());
}
function testInvalidMinMax1() {
var p = new goog.structs.Pool(0, 10);
assertEquals(0, p.getCount());
assertEquals(0, p.getInUseCount());
assertEquals(0, p.getFreeCount());
assertThrows(function() {
p.setMinimumCount(11);
});
}
function testInvalidMinMax2() {
var p = new goog.structs.Pool(5, 10);
assertEquals(5, p.getCount());
assertEquals(0, p.getInUseCount());
assertEquals(5, p.getFreeCount());
assertThrows(function() {
p.setMaximumCount(4);
});
}
function testInvalidMinMax3() {
assertThrows(function() {
new goog.structs.Pool(10, 1);
});
}
function testRateLimiting() {
var clock = new goog.testing.MockClock();
clock.install();
var p = new goog.structs.Pool(0, 3);
p.setDelay(100);
assertNotUndefined(p.getObject());
assertUndefined(p.getObject());
clock.tick(100);
assertNotUndefined(p.getObject());
assertUndefined(p.getObject());
clock.tick(100);
assertNotUndefined(p.getObject());
assertUndefined(p.getObject());
clock.tick(100);
assertUndefined(p.getObject());
goog.dispose(clock);
}
</script>
</body>
</html>