| 
									
										
										
										
											2020-10-06 00:52:05 +03:00
										 |  |  | #!/usr/bin/env node
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2020-10-06 01:32:33 +03:00
										 |  |  | **********************************************/  /* c8 ignore next 2 */ | 
					
						
							| 
									
										
										
										
											2020-10-06 00:52:05 +03:00
										 |  |  | ((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define) | 
					
						
							|  |  |  | (function(require){ var module={} // make module AMD/node compatible...
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var colors = require('colors') | 
					
						
							|  |  |  | var test = require('ig-test') | 
					
						
							| 
									
										
										
										
											2020-10-06 03:09:44 +03:00
										 |  |  | var object = require('ig-object') | 
					
						
							| 
									
										
										
										
											2020-10-06 00:52:05 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | var types = require('./main') | 
					
						
							|  |  |  | var containers = require('./containers') | 
					
						
							| 
									
										
										
										
											2020-11-05 16:40:41 +03:00
										 |  |  | var promise = require('./Promise') | 
					
						
							| 
									
										
										
										
											2020-10-06 00:52:05 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //---------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-07 03:03:41 +03:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2020-10-06 00:52:05 +03:00
										 |  |  | var setups = test.Setups({ | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var modifiers = test.Modifiers({ | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var tests = test.Tests({ | 
					
						
							|  |  |  | }) | 
					
						
							| 
									
										
										
										
											2020-10-07 03:03:41 +03:00
										 |  |  | //*/
 | 
					
						
							| 
									
										
										
										
											2020-10-06 00:52:05 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var cases = test.Cases({ | 
					
						
							| 
									
										
										
										
											2020-10-06 03:09:44 +03:00
										 |  |  | 	// Object.js
 | 
					
						
							| 
									
										
										
										
											2020-10-08 15:09:21 +03:00
										 |  |  | 	//
 | 
					
						
							| 
									
										
										
										
											2020-10-06 03:09:44 +03:00
										 |  |  | 	Object: function(assert){ | 
					
						
							|  |  |  | 		var o = Object.assign( | 
					
						
							|  |  |  | 			Object.create({ | 
					
						
							|  |  |  | 				x: 111, | 
					
						
							|  |  |  | 				y: 222, | 
					
						
							|  |  |  | 			}), { | 
					
						
							|  |  |  | 				y: 333, | 
					
						
							|  |  |  | 				z: 444, | 
					
						
							|  |  |  | 			}) | 
					
						
							| 
									
										
										
										
											2020-10-07 16:46:59 +03:00
										 |  |  | 		var oo = assert(Object.flatCopy(o), 'Object.flatCopy(..)') | 
					
						
							| 
									
										
										
										
											2020-10-06 03:09:44 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-07 16:46:59 +03:00
										 |  |  | 		assert(Object.match(oo, {x: 111, y: 333, z: 444}), 'Object.match(..)') | 
					
						
							| 
									
										
										
										
											2020-10-08 15:09:21 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		var k = ['z', 'x', 'y'] | 
					
						
							|  |  |  | 		assert(Object.keys(Object.sort(oo, k)).cmp(k), 'Object.sort(,,)') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(Object.keys(Object.sort(oo)).cmp(k.slice().sort()), 'Object.sort(,,)') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var cmp = function(a, b){ | 
					
						
							|  |  |  | 			return a == 'y' ? | 
					
						
							|  |  |  | 					1 | 
					
						
							|  |  |  | 				: a == 'z' ? | 
					
						
							|  |  |  | 					-1 | 
					
						
							|  |  |  | 				: 0 } | 
					
						
							|  |  |  | 		assert(Object.keys(Object.sort(oo, cmp)).cmp(k.slice().sort(cmp)), 'Object.sort(,,)') | 
					
						
							| 
									
										
										
										
											2020-10-06 03:09:44 +03:00
										 |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2020-10-06 03:36:40 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-06 02:43:16 +03:00
										 |  |  | 	// Array.js
 | 
					
						
							| 
									
										
										
										
											2020-10-09 05:55:53 +03:00
										 |  |  | 	// 	- flat (???)
 | 
					
						
							|  |  |  | 	// 	- includes (???)
 | 
					
						
							| 
									
										
										
										
											2020-10-06 02:43:16 +03:00
										 |  |  | 	// 	- first
 | 
					
						
							|  |  |  | 	// 	- last
 | 
					
						
							|  |  |  | 	// 	- compact
 | 
					
						
							|  |  |  | 	// 	- len
 | 
					
						
							|  |  |  | 	// 	- unique
 | 
					
						
							|  |  |  | 	// 	- tailUnique
 | 
					
						
							|  |  |  | 	// 	- cmp
 | 
					
						
							|  |  |  | 	// 	- setCmp
 | 
					
						
							|  |  |  | 	// 	- sortAs
 | 
					
						
							|  |  |  | 	// 	- mapChunks
 | 
					
						
							|  |  |  | 	// 	- filterChunks
 | 
					
						
							|  |  |  | 	// 	- reduceChunks
 | 
					
						
							| 
									
										
										
										
											2020-10-09 05:55:53 +03:00
										 |  |  | 	// 	- toKeys
 | 
					
						
							|  |  |  | 	// 	- toMap
 | 
					
						
							| 
									
										
										
										
											2020-10-06 02:43:16 +03:00
										 |  |  | 	Array: function(assert){ | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2020-10-07 03:53:10 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Set.js
 | 
					
						
							|  |  |  | 	// 	- unite
 | 
					
						
							|  |  |  | 	// 	- intersect
 | 
					
						
							|  |  |  | 	// 	- subtract
 | 
					
						
							| 
									
										
										
										
											2020-10-08 15:09:21 +03:00
										 |  |  | 	// 	- sort
 | 
					
						
							|  |  |  | 	Set: function(assert){ | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	// Map.js
 | 
					
						
							|  |  |  | 	// 	- sort
 | 
					
						
							|  |  |  | 	Map: function(assert){ | 
					
						
							| 
									
										
										
										
											2020-10-07 03:53:10 +03:00
										 |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2020-10-06 02:43:16 +03:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2020-10-07 03:53:10 +03:00
										 |  |  | 	String: function(assert){ | 
					
						
							|  |  |  | 		assert(''.capitalize() == '') | 
					
						
							|  |  |  | 		assert('a'.capitalize() == 'A') | 
					
						
							|  |  |  | 		assert('abc'.capitalize() == 'Abc') | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	RegExp: function(assert){ | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-03 16:58:59 +03:00
										 |  |  | 	Promise: function(assert){ | 
					
						
							| 
									
										
										
										
											2020-11-05 16:40:41 +03:00
										 |  |  | 		var p = assert(Promise.cooperative(), '.cooperative()') | 
					
						
							|  |  |  | 		//var p = assert(promise._CooperativePromise())
 | 
					
						
							| 
									
										
										
										
											2020-11-03 16:58:59 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-03 17:04:30 +03:00
										 |  |  | 		assert(!p.isSet, '.isSet is false') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-03 16:58:59 +03:00
										 |  |  | 		var RESOLVE = 123 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var then | 
					
						
							|  |  |  | 		p.then(function(v){ | 
					
						
							| 
									
										
										
										
											2020-11-05 16:40:41 +03:00
										 |  |  | 			// XXX this does not get printed for some reason...
 | 
					
						
							|  |  |  | 			console.log('!!!!!!!!!!! then') | 
					
						
							|  |  |  | 			// XXX this seems not to work/print/count a fail...
 | 
					
						
							|  |  |  | 			assert(false, 'test fail') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			then = v }) | 
					
						
							| 
									
										
										
										
											2020-11-03 16:58:59 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-03 17:04:30 +03:00
										 |  |  | 		assert(!p.isSet, '.isSet is false') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-03 16:58:59 +03:00
										 |  |  | 		var fin | 
					
						
							|  |  |  | 		p.finally(function(){ | 
					
						
							|  |  |  | 			fin = true }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-03 17:04:30 +03:00
										 |  |  | 		assert(!p.isSet, '.isSet is false') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 16:40:41 +03:00
										 |  |  | 		p.set(RESOLVE) | 
					
						
							| 
									
										
										
										
											2020-11-03 16:58:59 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-03 17:04:30 +03:00
										 |  |  | 		assert(p.isSet, '.isSet') | 
					
						
							| 
									
										
										
										
											2020-11-05 16:40:41 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// XXX without setTimeout(..) these are run before the 
 | 
					
						
							|  |  |  | 		// 		.then(..) / .finally(..) have a chance to run...
 | 
					
						
							|  |  |  | 		// 		...not yet sure how I feel about this...
 | 
					
						
							|  |  |  | 		// XXX with setTimeout(..) these appear not to have ANY effect, 
 | 
					
						
							|  |  |  | 		// 		as if setTimeout(..) did not run...
 | 
					
						
							|  |  |  | 		setTimeout(function(){ | 
					
						
							|  |  |  | 			assert(false, 'test fail') | 
					
						
							|  |  |  | 			assert(then == RESOLVE, '.then(..)') | 
					
						
							|  |  |  | 			assert(fin, '.finally(..)') | 
					
						
							|  |  |  | 		}, 0) | 
					
						
							| 
									
										
										
										
											2020-11-03 16:58:59 +03:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-06 02:43:16 +03:00
										 |  |  | 	// Date.js
 | 
					
						
							| 
									
										
										
										
											2020-10-06 03:36:40 +03:00
										 |  |  | 	Date: function(assert){ | 
					
						
							|  |  |  | 		var d = new Date() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var ts = assert(d.getTimeStamp(), '.getTimeStamp()') | 
					
						
							|  |  |  | 		var tsm = assert(d.getTimeStamp(true), '.getTimeStamp(true)') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var dd = assert(Date.fromTimeStamp(tsm), '.fromTimeStamp(..)') | 
					
						
							|  |  |  | 		var dds = assert(Date.fromTimeStamp(ts), '.fromTimeStamp(..)') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(d.toString() == dd.toString(), 'timestamp reversable') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(d.toShortDate() == dd.toShortDate(), '.toShortDate()') | 
					
						
							|  |  |  | 		assert(d.toShortDate() == dds.toShortDate(), '.toShortDate()') | 
					
						
							|  |  |  | 		assert(d.toShortDate(true) == dd.toShortDate(true), '.toShortDate(true)') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var a = Date.timeStamp() | 
					
						
							|  |  |  | 		var b = Date.timeStamp(true) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(a == Date.fromTimeStamp(a).getTimeStamp()) | 
					
						
							|  |  |  | 		assert(a + '000' == Date.fromTimeStamp(a).getTimeStamp(true)) | 
					
						
							|  |  |  | 		assert(b == Date.fromTimeStamp(b).getTimeStamp(true)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-07 03:03:41 +03:00
										 |  |  | 		assert(Date.str2ms('1') == 1, 'Date.str2ms("1")') | 
					
						
							|  |  |  | 		assert(Date.str2ms(1) == 1, 'Date.str2ms(1)') | 
					
						
							|  |  |  | 		assert(Date.str2ms('1ms') == 1, 'Date.str2ms("1ms")') | 
					
						
							|  |  |  | 		assert(Date.str2ms('1s') == 1000, 'Date.str2ms("1s")') | 
					
						
							|  |  |  | 		assert(Date.str2ms('1m') == 60*1000, 'Date.str2ms("1m")') | 
					
						
							|  |  |  | 		assert(Date.str2ms('1h') == 60*60*1000, 'Date.str2ms("1h")') | 
					
						
							|  |  |  | 		assert(Date.str2ms('1d') == 24*60*60*1000, 'Date.str2ms("1d")') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(Date.str2ms('5 sec') == 5000, 'Date.str2ms("1 sec")') | 
					
						
							|  |  |  | 		assert(Date.str2ms('5 second') == 5000, 'Date.str2ms("1 second")') | 
					
						
							|  |  |  | 		assert(Date.str2ms('5 seconds') == 5000, 'Date.str2ms("1 seconds")') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(Date.str2ms('2hour') == 2*60*60*1000, 'Date.str2ms("1hour")') | 
					
						
							|  |  |  | 		assert(Date.str2ms('2 Hour') == 2*60*60*1000, 'Date.str2ms("1 Hour")') | 
					
						
							|  |  |  | 		assert(Date.str2ms('2 hours') == 2*60*60*1000, 'Date.str2ms("1 hours")') | 
					
						
							| 
									
										
										
										
											2020-10-07 03:53:10 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		assert(Number.isNaN(Date.str2ms('moo')), 'Date.str2ms("moo")') | 
					
						
							|  |  |  | 		assert(Number.isNaN(Date.str2ms('123 moo')), 'Date.str2ms("moo")') | 
					
						
							| 
									
										
										
										
											2020-10-06 03:36:40 +03:00
										 |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2020-10-06 02:43:16 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// containers.js
 | 
					
						
							| 
									
										
										
										
											2020-10-17 02:25:17 +03:00
										 |  |  | 	// XXX move this out to a separate test set...
 | 
					
						
							| 
									
										
										
										
											2020-10-06 00:52:05 +03:00
										 |  |  | 	UniqueKeyMap: function(assert){ | 
					
						
							|  |  |  | 		var a = assert(containers.UniqueKeyMap(), '') | 
					
						
							|  |  |  | 		var b = assert(containers.UniqueKeyMap([]), '') | 
					
						
							|  |  |  | 		var c = assert(containers.UniqueKeyMap([ | 
					
						
							|  |  |  | 			['a', 111], | 
					
						
							|  |  |  | 			['b', 222], | 
					
						
							|  |  |  | 			['a', 333], | 
					
						
							|  |  |  | 		]), '') | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		assert(a.size == 0) | 
					
						
							|  |  |  | 		assert(b.size == 0) | 
					
						
							|  |  |  | 		assert(c.size == 3) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(c.get('a') == 111) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(c.has('a (1)')) | 
					
						
							|  |  |  | 		assert(c.get('a (1)') == 333) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var n | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert((n = c.set('a', 444, true)) == 'a (2)') | 
					
						
							|  |  |  | 		assert(c.get(n) == 444) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(c.reset(n, 555)) | 
					
						
							|  |  |  | 		assert(c.get(n) == 555) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(c.delete('a (1)')) | 
					
						
							|  |  |  | 		assert(!c.has('a (1)')) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert((n = c.set('a', 222, true)) == 'a (1)') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(c.keysOf(222).sort().cmp(['b', 'a'].sort())) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-07 07:33:58 +03:00
										 |  |  | 		var k = [...c.keys()] | 
					
						
							| 
									
										
										
										
											2020-10-08 15:09:21 +03:00
										 |  |  | 		k[k.indexOf('a')] = 'b (1)' | 
					
						
							| 
									
										
										
										
											2020-10-07 07:33:58 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-06 00:52:05 +03:00
										 |  |  | 		assert((n = c.rename('a', 'b', true)) == 'b (1)') | 
					
						
							| 
									
										
										
										
											2020-10-07 07:33:58 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-08 15:09:21 +03:00
										 |  |  | 		// check order...
 | 
					
						
							|  |  |  | 		// XXX since we are using Array's .cmp(..) would be nice to be 
 | 
					
						
							|  |  |  | 		// 		able to fail this test if that fails to test correctly...
 | 
					
						
							|  |  |  | 		// 		...not sure how to do this though...
 | 
					
						
							|  |  |  | 		assert(k.cmp([...c.keys()]), '.rename(..) order') | 
					
						
							| 
									
										
										
										
											2020-10-06 00:52:05 +03:00
										 |  |  | 	}, | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-17 02:25:17 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 16:40:41 +03:00
										 |  |  | //---------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var PromiseTests = test.TestSet() | 
					
						
							|  |  |  | test.Case('PromiseTests', PromiseTests) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PromiseTests.setups({ | 
					
						
							|  |  |  | 	cooperative: function(assert){ | 
					
						
							|  |  |  | 		return { | 
					
						
							|  |  |  | 			a: assert(Promise.cooperative(), '.cooperative()') | 
					
						
							|  |  |  | 		} }, | 
					
						
							|  |  |  | 	experimental: function(assert){ | 
					
						
							|  |  |  | 		return { | 
					
						
							|  |  |  | 			a: assert(promise._CooperativePromise(), 'experimental') | 
					
						
							|  |  |  | 		} }, | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PromiseTests.modifiers({ | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PromiseTests.tests({ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-17 02:25:17 +03:00
										 |  |  | //---------------------------------------------------------------------
 | 
					
						
							|  |  |  | // UniqueKeyMap testing...
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-17 03:11:59 +03:00
										 |  |  | var UniqueKeyMap = test.TestSet() | 
					
						
							|  |  |  | test.Case('UniqueKeyMap-new', UniqueKeyMap) | 
					
						
							| 
									
										
										
										
											2020-10-17 02:25:17 +03:00
										 |  |  | 	 | 
					
						
							|  |  |  | // XXX
 | 
					
						
							| 
									
										
										
										
											2020-10-17 03:11:59 +03:00
										 |  |  | UniqueKeyMap.setups({ | 
					
						
							|  |  |  | 	empty: function(assert){ | 
					
						
							|  |  |  | 		return { | 
					
						
							|  |  |  | 			value: assert(containers.UniqueKeyMap()), | 
					
						
							|  |  |  | 			// metadata...
 | 
					
						
							|  |  |  | 			size: 0, | 
					
						
							|  |  |  | 		}}, | 
					
						
							|  |  |  | 	'empty-input': function(assert){ | 
					
						
							|  |  |  | 		return { | 
					
						
							|  |  |  | 			value: assert(containers.UniqueKeyMap([])),  | 
					
						
							|  |  |  | 			// metadata...
 | 
					
						
							|  |  |  | 			size: 0, | 
					
						
							|  |  |  | 		}}, | 
					
						
							|  |  |  | 	// XXX non-empty input...
 | 
					
						
							|  |  |  | 	// XXX intersecting unput...
 | 
					
						
							| 
									
										
										
										
											2020-10-17 02:25:17 +03:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // XXX
 | 
					
						
							| 
									
										
										
										
											2020-10-17 03:11:59 +03:00
										 |  |  | UniqueKeyMap.modifiers({ | 
					
						
							|  |  |  | 	set: function(assert, e, k='a', o){ | 
					
						
							|  |  |  | 		o = o || {} | 
					
						
							|  |  |  | 		var n | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var exists = e.value.has(k) | 
					
						
							|  |  |  | 		var expected = e.value.uniqieKey(k) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(n = e.value.set(k, o, true), '.set(..)') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// key update...
 | 
					
						
							|  |  |  | 		assert(n.startsWith(k), 'key prefix') | 
					
						
							|  |  |  | 		assert(n == expected, 'unexpected key') | 
					
						
							|  |  |  | 		exists | 
					
						
							|  |  |  | 			|| assert(n == k, 'key unexpectedly changed') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// size...
 | 
					
						
							|  |  |  | 		e.size += 1 | 
					
						
							|  |  |  | 		assert(e.value.size == e.size, 'inc size') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return e }, | 
					
						
							|  |  |  | 	reset: function(assert, e, k='a', o){ | 
					
						
							|  |  |  | 		o = o || {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var exists = e.value.has(k) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(e.value.reset(k, o)) | 
					
						
							|  |  |  | 		assert(e.value.get(k) === o) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// size...
 | 
					
						
							|  |  |  | 		exists | 
					
						
							|  |  |  | 			|| (e.size += 1) | 
					
						
							|  |  |  | 		assert(e.value.size == e.size) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return e }, | 
					
						
							|  |  |  | 	delete: function(assert, e, k='a'){ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var exists = e.value.has(k) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(e.value.delete(k) == exists, '.delete(..)') | 
					
						
							|  |  |  | 		assert(!e.value.has(k), 'delete successful') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// size...
 | 
					
						
							|  |  |  | 		exists | 
					
						
							|  |  |  | 			&& (e.size -= 1) | 
					
						
							|  |  |  | 		assert(e.value.size == e.size) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return e }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	'set-set': function(assert, e){ | 
					
						
							|  |  |  | 		this.set(assert, e, 'x') | 
					
						
							|  |  |  | 		this.set(assert, e, 'y') | 
					
						
							|  |  |  | 		this.set(assert, e, 'x') | 
					
						
							|  |  |  | 		return e }, | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // XXX
 | 
					
						
							|  |  |  | UniqueKeyMap.tests({ | 
					
						
							|  |  |  | 	consistent: function(assert, e){ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		assert(e.value.size == e.size, '.size') | 
					
						
							|  |  |  | 		assert([...e.value.keys()].length == e.value.size, '.keys() same size as .size') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return e } | 
					
						
							| 
									
										
										
										
											2020-10-17 02:25:17 +03:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-06 00:52:05 +03:00
										 |  |  | //---------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typeof(__filename) != 'undefined' | 
					
						
							|  |  |  | 	&& __filename == (require.main || {}).filename | 
					
						
							|  |  |  | 	&& test.run() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							|  |  |  | * vim:set ts=4 sw=4 :                               */ return module }) |