notes & tests

This commit is contained in:
Mark Nadal 2020-02-03 14:25:41 -08:00
parent 328ae52c2c
commit efd055c2b0
7 changed files with 121 additions and 15 deletions

View File

@ -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('');

View File

@ -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();

View File

@ -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, '') }

View File

@ -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){

View File

@ -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);
});

View File

@ -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){

View File

@ -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');