UNPKG

copious-little-searcher

Version:

A small Search Server for finding assets pubished on a particular blog

230 lines (181 loc) 6.47 kB
let {QueryResult,Searching} = require('../lib/searching.js') let {uuid,sleeper,qnd_assert,dump_test_results} = require('./helpers.js') function is_sorted_by_score(elems) { let n = elems.length let prev_score = elems[0].item_ref.score for ( let i = 0; i < n; i++ ) { let score = elems[i].item_ref.score if ( score > prev_score ) return(false) prev_score = score } return(true) } function is_sorted_by_date(elems) { let n = elems.length let prev_ud = elems[0].item_ref.update_date for ( let i = 0; i < n; i++ ) { let ud = elems[i].item_ref.update_date if ( ud > prev_ud ) return(false) prev_ud = ud } return(true) } // ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- // ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- // function run_with_new_queries() { let query_list = [ "any", "cat | update_date", ` ${encodeURIComponent("some stuff > that | | | can make sense")} | update_date `, ` ${encodeURIComponent("that can't make sense")} | score`, `${encodeURIComponent("what ? can't | | | make sense ||")} | create_date`, `what >= 3945739| | () | has sense || | update_date `, `${encodeURIComponent("what ? can't | | | make sense ||")} | other` ] let results = [ "any|create_date", "cat|update_date", "some stuff > that can make sense|update_date", "that can't make sense|score", "what ? can't make sense|create_date", "what >= 3945739 () has sense|update_date", "what ? can't make sense|other", ] let n = query_list.length for ( let i = 0; i < n; i++ ) { let qry = query_list[i] let QR = new QueryResult(qry) qnd_assert((QR.query === results[i],"run_with_new_queries"),__function) } let qry = query_list[0] let QR = new QueryResult(qry) QR.set_data([,1,2,3,4,5,6,7]) QR.clear() qnd_assert(QR.stored_data.length === 0,__function) } function run_with_prepped_data() { let test_data = [] let fake_date = Date.now() let tossed_count = 0 for ( let i = 0; i < 100; i++ ) { let tossit = (Math.random() > 0.68) if ( tossit ) { tossed_count++ test_data.push({ "update_date" : fake_date, "score" : Math.random(), "_tracking" : false, "_xxzz_removed" : true }) } else { test_data.push({ "update_date" : fake_date, "score" : Math.random(), "_tracking" : uuid(), "_xxzz_removed" : false }) } fake_date++ } // let QR1 = new QueryResult("butter|score") test_data.forEach(el => { QR1.inject(el,"score") }) let data = QR1.stored_data qnd_assert(is_sorted_by_score(data),__function) qnd_assert(test_data.length === data.length,__function) let QR2 = new QueryResult("butter") test_data.forEach(el => { QR2.inject(el,"update_date") }) data = QR2.stored_data qnd_assert(is_sorted_by_date(data),__function) let results = QR1.access(10,10) qnd_assert((results.length <= 10),__function) results = QR2.access(10,10) qnd_assert((results.length <= 10),__function) console.log(tossed_count) } // async function test_searching_class() { // let conf = { shrinkage : 1.0, search_backup_file : "./test_search.json" } let t_searcher = new Searching(conf) // // let test_data = [] let fake_date = Date.now() let fake_creation = Date.now() let tossed_count = 0 for ( let i = 0; i < 100; i++ ) { let tossit = (Math.random() > 0.68) if ( tossit ) { tossed_count++ test_data.push({ "creation_date" : fake_creation, "update_date" : fake_date, "score" : Math.random(), "_tracking" : false, "_xxzz_removed" : true }) } else { test_data.push({ "creation_date" : fake_creation, "update_date" : fake_date, "score" : Math.random(), "_tracking" : uuid(), "_xxzz_removed" : false }) } fake_date += 2 fake_creation++ } // let test_data_map = {} t_searcher.set_global_file_list_refs(test_data,test_data_map) t_searcher.update_global_file_list_quotes_by() // prove that they are sorted by dates... // await t_searcher.get_search("any|creation_date",5,4) await t_searcher.get_search("bugs|update_date",5,4) await t_searcher.backup_searches(false) let tmap = t_searcher.global_tracking_map await t_searcher.restore_searches() let all_q = t_searcher.local_active_searches let fail_count = 0 for ( let qry in all_q ) { let QR = all_q[qry] let data = QR.stored_data for ( let ref of data ) { let tracking = ref.item_ref._tracking if ( !tracking ) { fail_count++; continue } if ( tmap[tracking] === undefined ) fail_count++; } } qnd_assert(fail_count===0,__function) await sleeper(1) let possible_count = Object.keys(t_searcher.local_active_searches).length let count = t_searcher.prune(0) console.log(possible_count + " " + count ) qnd_assert(possible_count===count,__function) await t_searcher.restore_searches() let s_count = Object.keys(t_searcher.local_active_searches).length console.log(s_count + " " + count ) qnd_assert((s_count > 0),__function) t_searcher.clear("bugs|update_date") let b_count = Object.keys(t_searcher.local_active_searches).length console.log(b_count + " " + count ) qnd_assert((b_count < s_count),__function) // let track_nums = [] for ( let i = 0; i < 5; i++ ) { let u = uuid() track_nums.push(u) let f_obj = { "_tracking" : u } t_searcher.add_just_one(f_obj,false) } // for ( let tnum of track_nums ) { t_searcher.remove_just_one(tnum) } qnd_assert(true,__function) } async function all_tests_this_module() { // run_with_new_queries() run_with_prepped_data() await test_searching_class() // } module.exports = all_tests_this_module if ( require.main.filename === __filename ) { // (async () => { await all_tests_this_module() console.log("test_searching") dump_test_results() })() // }