mirror of
https://github.com/amark/gun.git
synced 2025-06-05 13:46:43 +00:00
notes & tests
This commit is contained in:
parent
328ae52c2c
commit
efd055c2b0
@ -274,7 +274,7 @@
|
||||
if(u === o.start && u === o.end){ return tree }
|
||||
if(atomic(tree)){ return tree }
|
||||
var sub = Radix();
|
||||
Radix.map(tree, function(v,k){
|
||||
Radix.map(tree, function(v,k){ // ONLY PLACE THAT TAKES TREE, maybe reduce API for better perf?
|
||||
sub(k,v);
|
||||
}, o);
|
||||
return sub('');
|
||||
|
13
lib/radix.js
13
lib/radix.js
@ -51,23 +51,24 @@
|
||||
return radix;
|
||||
};
|
||||
|
||||
Radix.map = function map(radix, cb, opt, pre){ pre = pre || []; // TODO: BUG: most out-of-memory crashes come from here.
|
||||
Radix.map = function rap(radix, cb, opt, pre){ pre = pre || []; // TODO: BUG: most out-of-memory crashes come from here.
|
||||
var t = ('function' == typeof radix)? radix.$ || {} : radix;
|
||||
//!opt && console.log("WHAT IS T?", JSON.stringify(t).length);
|
||||
if(!t){ return }
|
||||
var keys = (t[_]||no).sort || (t[_] = function $(){ $.sort = Object.keys(t).sort(); return $ }()).sort, rev;
|
||||
var keys = (t[_]||no).sort || (t[_] = function $(){ $.sort = Object.keys(t).sort(); return $ }()).sort, rev; // ONLY 17% of ops are pre-sorted!
|
||||
//var keys = Object.keys(t).sort();
|
||||
opt = (true === opt)? {branch: true} : (opt || {});
|
||||
if(rev = opt.reverse){ keys = keys.slice().reverse() }
|
||||
if(rev = opt.reverse){ keys = keys.slice(0).reverse() }
|
||||
var start = opt.start, end = opt.end, END = '\uffff';
|
||||
var i = 0, l = keys.length;
|
||||
for(;i < l; i++){ var key = keys[i], tree = t[key], tmp, p, pt;
|
||||
if(!tree || '' === key || _ === key){ continue }
|
||||
p = pre.slice(); p.push(key);
|
||||
p = pre.slice(0); p.push(key);
|
||||
pt = p.join('');
|
||||
if(u !== start && pt < (start||'').slice(0,pt.length)){ continue }
|
||||
if(u !== end && (end || END) < pt){ continue }
|
||||
if(rev){ // children must be checked first when going in reverse.
|
||||
tmp = map(tree, cb, opt, p);
|
||||
tmp = rap(tree, cb, opt, p);
|
||||
if(u !== tmp){ return tmp }
|
||||
}
|
||||
if(u !== (tmp = tree[''])){
|
||||
@ -85,7 +86,7 @@
|
||||
}
|
||||
pre = p;
|
||||
if(!rev){
|
||||
tmp = map(tree, cb, opt, pre);
|
||||
tmp = rap(tree, cb, opt, pre);
|
||||
if(u !== tmp){ return tmp }
|
||||
}
|
||||
pre.pop();
|
||||
|
@ -102,7 +102,7 @@ Gun.on('create', function(root){
|
||||
if(o.atom){
|
||||
data = u;
|
||||
} else {
|
||||
Radix.map(data, each)
|
||||
Radix.map(data, each); // IS A RADIX TREE, NOT FUNCTION!
|
||||
}
|
||||
}
|
||||
if(!graph && data){ each(data, '') }
|
||||
|
@ -38,7 +38,7 @@
|
||||
console.log('async?', Gun.debug);
|
||||
}
|
||||
var run = mocha.run(function(a,b,c){
|
||||
//document.body.prepend("MARK! REMEMBER TO REMOVE RETURN!");return;
|
||||
document.body.prepend("MARK! REMEMBER TO REMOVE RETURN!");return;
|
||||
var yes = confirm("REFRESH BROWSER FOR ASYNC TESTS?");
|
||||
if(yes){
|
||||
if(location.search){
|
||||
|
@ -16,11 +16,105 @@
|
||||
stool.run();
|
||||
},1);
|
||||
stool.setup(window.setup = function(){
|
||||
window.BigText = Gun.text.random(1024, 'abcdef');
|
||||
window.MedText = Gun.text.random(200, 'abcdef');
|
||||
window.jsonText = JSON.stringify(window.BigText);
|
||||
window.radText = Radisk.encode(window.BigText);
|
||||
//window.BigText = Gun.text.random(1024, 'abcdef');
|
||||
//window.MedText = Gun.text.random(200, 'abcdef');
|
||||
//window.jsonText = JSON.stringify(window.BigText);
|
||||
//window.radText = Radisk.encode(window.BigText);
|
||||
|
||||
window.namez = ["Adalard","Adora","Aia","Albertina","Alfie","Allyn","Amabil","Ammamaria","Andy","Anselme","Ardeen","Armand","Ashelman","Aube","Averyl","Baker","Barger","Baten","Bee","Benia","Bernat","Bevers","Bittner","Bobbe","Bonny","Boyce","Breech","Brittaney","Bryn","Burkitt","Cadmann","Campagna","Carlee","Carver","Cavallaro","Chainey","Chaunce","Ching","Cianca","Claudina","Clyve","Colon","Cooke","Corrina","Crawley","Cullie","Dacy","Daniela","Daryn","Deedee","Denie","Devland","Dimitri","Dolphin","Dorinda","Dream","Dunham","Eachelle","Edina","Eisenstark","Elish","Elvis","Eng","Erland","Ethan","Evelyn","Fairman","Faus","Fenner","Fillander","Flip","Foskett","Fredette","Fullerton","Gamali","Gaspar","Gemina","Germana","Gilberto","Giuditta","Goer","Gotcher","Greenstein","Grosvenor","Guthrey","Haldane","Hankins","Harriette","Hayman","Heise","Hepsiba","Hewie","Hiroshi","Holtorf","Howlond","Hurless","Ieso","Ingold","Isidora","Jacoba","Janelle","Jaye","Jennee","Jillana","Johnson","Josy","Justinian","Kannan","Kast","Keeley","Kennett","Kho","Kiran","Knowles","Koser","Kroll","LaMori","Lanctot","Lasky","Laverna","Leff","Leonanie","Lewert","Lilybel","Lissak","Longerich","Lou","Ludeman","Lyman","Madai","Maia","Malvina","Marcy","Maris","Martens","Mathilda","Maye","McLain","Melamie","Meras","Micco","Millburn","Mittel","Montfort","Moth","Mutz","Nananne","Nazler","Nesta","Nicolina","Noellyn","Nuli","Ody","Olympie","Orlena","Other","Pain","Parry","Paynter","Pentheas","Pettifer","Phyllida","Plath","Posehn","Proulx","Quinlan","Raimes","Ras","Redmer","Renelle","Ricard","Rior","Rocky","Ron","Rosetta","Rubia","Ruttger","Salbu","Sandy","Saw","Scholz","Secor","September","Shanleigh","Shenan","Sholes","Sig","Sisely","Soble","Spanos","Stanwinn","Stevie","Stu","Suzanne","Tacy","Tanney","Tekla","Thackeray","Thomasin","Tilla","Tomas","Tracay","Tristis","Ty","Urana","Valdis","Vasta","Vezza","Vitoria","Wait","Warring","Weissmann","Whetstone","Williamson","Wittenburg","Wymore","Yoho","Zamir","Zimmermann"];
|
||||
window.radiz = window.radiz || Radix();
|
||||
window.arr = []; var i = 1000; while(--i){ arr.push(Math.random()) }
|
||||
window.arrs = arr.slice(0).sort();
|
||||
});
|
||||
/* TEMPORARY COPY OF RADIX UNIT TESTS TO BOOST SPEED */
|
||||
/* THESE ARE PROBABLY STALE AND NEED TO BE COPIED FROM UNIT TESTS AGAIN */
|
||||
stool.add('1', function(){
|
||||
var rad = Radix();
|
||||
rad('asdf.pub', 'yum');
|
||||
rad('ablah', 'cool');
|
||||
rad('node/circle.bob', 'awesome');
|
||||
|
||||
(rad('asdf.').pub[''] !== 'yum') && bad1;
|
||||
(rad('nv/foo.bar') !== undefined) && bad2;
|
||||
});
|
||||
stool.add('2', function(){
|
||||
var all = {};
|
||||
namez.forEach(function(v,i){
|
||||
v = v.toLowerCase();
|
||||
all[v] = v;
|
||||
radiz(v, i)
|
||||
});
|
||||
(Gun.obj.empty(all) === true) && bad3;
|
||||
Radix.map(radiz, function(v,k){
|
||||
delete all[k];
|
||||
});
|
||||
(Gun.obj.empty(all) !== true) && bad4;
|
||||
});
|
||||
stool.add('3', function(){
|
||||
var all = {};
|
||||
namez.forEach(function(v,i){
|
||||
v = v.toLowerCase();
|
||||
all[v] = v;
|
||||
//rad(v, i)
|
||||
});
|
||||
(Gun.obj.empty(all) === true) && bad5;
|
||||
Radix.map(radiz, function(v,k){
|
||||
delete all[k];
|
||||
});
|
||||
(Gun.obj.empty(all) !== true) && bad6;
|
||||
});
|
||||
stool.add('4', function(){
|
||||
var all = {}, start = 'Warring'.toLowerCase(), end = 'Zamir'.toLowerCase();
|
||||
namez.forEach(function(v,i){
|
||||
v = v.toLowerCase();
|
||||
if(v < start){ return }
|
||||
if(end < v){ return }
|
||||
all[v] = v;
|
||||
//rad(v, i)
|
||||
});
|
||||
(Gun.obj.empty(all) === true) && bad7;
|
||||
Radix.map(radiz, function(v,k, a,b){
|
||||
//if(!all[k]){ throw "out of range!" }
|
||||
delete all[k];
|
||||
}, {start: start, end: end});
|
||||
(Gun.obj.empty(all) !== true) && bad8;
|
||||
});
|
||||
stool.add('5', function(){
|
||||
var all = {}, start = 'Warrinf'.toLowerCase(), end = 'Zamis'.toLowerCase();
|
||||
namez.forEach(function(v,i){
|
||||
v = v.toLowerCase();
|
||||
if(v < start){ return }
|
||||
if(end < v){ return }
|
||||
all[v] = v;
|
||||
//rad(v, i)
|
||||
});
|
||||
(Gun.obj.empty(all) === true) && bad9;
|
||||
Radix.map(radiz, function(v,k, a,b){
|
||||
//if(!all[k]){ throw "out of range!" }
|
||||
delete all[k];
|
||||
}, {start: start, end: end});
|
||||
(Gun.obj.empty(all) !== true) && bad10;
|
||||
});
|
||||
stool.add('6', function(){
|
||||
var r = Radix(), tmp;
|
||||
r('alice', 1);r('bob', 2);r('carl', 3);r('carlo',4);
|
||||
r('dave', 5);r('zach',6);r('zachary',7);
|
||||
var by = ['alice','bob','carl','carlo','dave','zach','zachary'];
|
||||
Gun.obj.map(by, function(k,i){
|
||||
r(k,i);
|
||||
});
|
||||
Radix.map(r, function(v,k, a,b){
|
||||
(by.pop() !== k) && bad11;
|
||||
tmp = v;
|
||||
}, {reverse: 1});
|
||||
(tmp !== 1) && bad12;
|
||||
(by.length !== 0) && bad13;
|
||||
Radix.map(r, function(v,k, a,b){
|
||||
tmp = v;
|
||||
});
|
||||
(tmp !== 7) && bad14;
|
||||
});
|
||||
return;
|
||||
stool.add('JSON encode string', function(){
|
||||
JSON.stringify(window.BigText);
|
||||
});
|
||||
|
@ -43,8 +43,19 @@ var names = ["Adalard","Adora","Aia","Albertina","Alfie","Allyn","Amabil","Ammam
|
||||
|
||||
//console.log("HYPER TEST");var z = 10000; while(--z){ names.push(Gun.text.random(7)) }this.timeout(9000);
|
||||
|
||||
describe('Radix', function(){
|
||||
describe.only('Radix', function(){
|
||||
var radix = Radix();
|
||||
|
||||
it('unit', function(){
|
||||
var rad = Radix();
|
||||
rad('asdf.pub', 'yum');
|
||||
rad('ablah', 'cool');
|
||||
rad('node/circle.bob', 'awesome');
|
||||
|
||||
expect(rad('asdf.')).to.be.eql({pub: {'': 'yum'}});
|
||||
expect(rad('nv/foo.bar')).to.be(undefined);
|
||||
});
|
||||
|
||||
it('radix write read', function(done){
|
||||
var all = {};
|
||||
names.forEach(function(v,i){
|
||||
|
@ -3,7 +3,7 @@ var expect = global.expect = require("./expect");
|
||||
var Radix = require('../lib/radix');
|
||||
var _ = String.fromCharCode(29);
|
||||
|
||||
describe('Radix', function(){
|
||||
describe('Radix', function(){ // moved to ./rad/rad.js
|
||||
it('read', function(){
|
||||
var rad = Radix();
|
||||
rad('asdf.pub', 'yum');
|
||||
|
Loading…
x
Reference in New Issue
Block a user