export let total_tests: number = 0; export let failed_tests: number = 0; export let passed_tests: number = 0; export function test_assert(condition: boolean, test_name: string): boolean { total_tests++; if (condition) { passed_tests++; console.log(`\x1B[32mTEST PASS\x1B[m ${test_name}`); return true; } else { failed_tests++; console.log(`\x1B[31mTEST FAIL\x1B[m ${test_name}`); return false; } } //items will probably be strings or numbers, //but any object that is comparable after a JSON.stringify() should be fine export function test_assert_equal(first_item: any, second_item: any, test_name: string, silent: boolean=false) { if (typeof first_item !== typeof second_item) { throw Error("Cannot compare two items of different types!"); } //if the items are objects (including arrays) if (typeof first_item === "object") { first_item = JSON.stringify(first_item); second_item = JSON.stringify(second_item); } let passed = test_assert(first_item === second_item, test_name); if (!silent && !passed) { //log info for debugging purposes //log both items console.log(`${test_name}:\n========\n${first_item}\n========\n${second_item}\n========`); } } export function log_test_results() { console.log(`Total Passed: \x1B[32m${passed_tests}/${total_tests}\x1B[m\nTotal Failed: \x1B[31m${failed_tests}/${total_tests}\x1B[m`); }