mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 14:54:07 +10:00
Merged standard and timer, resolved #48
This commit is contained in:
1603
repl/lib_compound.c
1603
repl/lib_compound.c
File diff suppressed because it is too large
Load Diff
@@ -1,6 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "toy_interpreter.h"
|
|
||||||
|
|
||||||
int Toy_hookCompound(Toy_Interpreter* interpreter, Toy_Literal identifier, Toy_Literal alias);
|
|
||||||
|
|
||||||
1539
repl/lib_standard.c
1539
repl/lib_standard.c
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,7 @@
|
|||||||
#include "repl_tools.h"
|
#include "repl_tools.h"
|
||||||
#include "lib_about.h"
|
#include "lib_about.h"
|
||||||
#include "lib_compound.h"
|
|
||||||
#include "lib_standard.h"
|
#include "lib_standard.h"
|
||||||
#include "lib_runner.h"
|
#include "lib_runner.h"
|
||||||
// #include "lib_timer.h"
|
|
||||||
|
|
||||||
#include "toy_console_colors.h"
|
#include "toy_console_colors.h"
|
||||||
|
|
||||||
@@ -30,10 +28,8 @@ void repl(const char* initialInput) {
|
|||||||
|
|
||||||
//inject the libs
|
//inject the libs
|
||||||
Toy_injectNativeHook(&interpreter, "about", Toy_hookAbout);
|
Toy_injectNativeHook(&interpreter, "about", Toy_hookAbout);
|
||||||
Toy_injectNativeHook(&interpreter, "compound", Toy_hookCompound);
|
|
||||||
Toy_injectNativeHook(&interpreter, "standard", Toy_hookStandard);
|
Toy_injectNativeHook(&interpreter, "standard", Toy_hookStandard);
|
||||||
Toy_injectNativeHook(&interpreter, "runner", Toy_hookRunner);
|
Toy_injectNativeHook(&interpreter, "runner", Toy_hookRunner);
|
||||||
// Toy_injectNativeHook(&interpreter, "timer", Toy_hookTimer);
|
|
||||||
|
|
||||||
for(;;) {
|
for(;;) {
|
||||||
if (!initialInput) {
|
if (!initialInput) {
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
#include "repl_tools.h"
|
#include "repl_tools.h"
|
||||||
#include "lib_about.h"
|
#include "lib_about.h"
|
||||||
#include "lib_compound.h"
|
|
||||||
#include "lib_standard.h"
|
#include "lib_standard.h"
|
||||||
#include "lib_runner.h"
|
#include "lib_runner.h"
|
||||||
// #include "lib_timer.h"
|
|
||||||
|
|
||||||
#include "toy_console_colors.h"
|
#include "toy_console_colors.h"
|
||||||
|
|
||||||
@@ -113,10 +111,8 @@ void Toy_runBinary(const unsigned char* tb, size_t size) {
|
|||||||
|
|
||||||
//inject the libs
|
//inject the libs
|
||||||
Toy_injectNativeHook(&interpreter, "about", Toy_hookAbout);
|
Toy_injectNativeHook(&interpreter, "about", Toy_hookAbout);
|
||||||
Toy_injectNativeHook(&interpreter, "compound", Toy_hookCompound);
|
|
||||||
Toy_injectNativeHook(&interpreter, "standard", Toy_hookStandard);
|
Toy_injectNativeHook(&interpreter, "standard", Toy_hookStandard);
|
||||||
Toy_injectNativeHook(&interpreter, "runner", Toy_hookRunner);
|
Toy_injectNativeHook(&interpreter, "runner", Toy_hookRunner);
|
||||||
// Toy_injectNativeHook(&interpreter, "timer", Toy_hookTimer);
|
|
||||||
|
|
||||||
Toy_runInterpreter(&interpreter, tb, (int)size);
|
Toy_runInterpreter(&interpreter, tb, (int)size);
|
||||||
Toy_freeInterpreter(&interpreter);
|
Toy_freeInterpreter(&interpreter);
|
||||||
|
|||||||
@@ -1,317 +0,0 @@
|
|||||||
import compound;
|
|
||||||
|
|
||||||
//test concat
|
|
||||||
{
|
|
||||||
//test array concat
|
|
||||||
{
|
|
||||||
var a = [1, 2, 3];
|
|
||||||
var b = [4, 5, 6];
|
|
||||||
|
|
||||||
var c = a.concat(b).concat(b);
|
|
||||||
|
|
||||||
assert c == [1, 2, 3, 4, 5, 6, 4, 5, 6], "array.concat() failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
//test dictionary concat
|
|
||||||
{
|
|
||||||
var a = ["one" : 1, "two": 2, "three": 3];
|
|
||||||
var b = ["four" : 4, "five": 5, "six": 6];
|
|
||||||
|
|
||||||
var c = a.concat(b);
|
|
||||||
|
|
||||||
assert c.length() == 6, "dictionary.concat().length() failed";
|
|
||||||
|
|
||||||
assert c == ["one" : 1, "two": 2, "three": 3, "four" : 4, "five": 5, "six": 6], "dictionary.concat() comparison failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
//test dictionary concat with clashing keys
|
|
||||||
{
|
|
||||||
var a = ["one" : 1, "two": 2, "three": 3, "random": 1];
|
|
||||||
var b = ["four" : 4, "five": 5, "six": 6, "random": 2];
|
|
||||||
|
|
||||||
var c = a.concat(b);
|
|
||||||
|
|
||||||
assert c["random"] == 1, "dictionary.concat() clashing keys failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
//test string concat
|
|
||||||
{
|
|
||||||
var a = "foo";
|
|
||||||
var b = "bar";
|
|
||||||
|
|
||||||
var c = a.concat(b);
|
|
||||||
|
|
||||||
assert c == "foobar", "string.concat() failed";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test containsKey
|
|
||||||
{
|
|
||||||
var d = ["one": 1, "two": 2];
|
|
||||||
|
|
||||||
assert d.containsKey("one") == true, "dictionary.containsKey() == true failed";
|
|
||||||
assert d.containsKey("three") == false, "dictionary.containsKey() == false failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test containsValue
|
|
||||||
{
|
|
||||||
var a = [1, 2, 3];
|
|
||||||
var d = ["one": 1, "two": 2];
|
|
||||||
|
|
||||||
assert a.containsValue(1) == true, "array.containsValue() == true failed";
|
|
||||||
assert a.containsValue(5) == false, "array.containsValue() == false failed";
|
|
||||||
assert d.containsValue(1) == true, "dictionary.containsValue() == true failed";
|
|
||||||
assert d.containsValue(3) == false, "dictionary.containsValue() == false failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test every
|
|
||||||
{
|
|
||||||
var a = [1, 2, 3];
|
|
||||||
var d = ["one": 1, "two": 2];
|
|
||||||
|
|
||||||
var counter = 0;
|
|
||||||
fn f(k, v) {
|
|
||||||
counter++;
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert a.every(f) == true, "array.every() == true failed";
|
|
||||||
assert d.every(f) == true, "dictionary.every() == true failed";
|
|
||||||
|
|
||||||
assert counter == 5, "Unexpected number of calls for _every() == true";
|
|
||||||
|
|
||||||
counter = 0;
|
|
||||||
a[1] = false;
|
|
||||||
d["two"] = false;
|
|
||||||
|
|
||||||
assert a.every(f) == false, "array.every() == false failed";
|
|
||||||
assert d.every(f) == false, "dictionary.every() == false failed";
|
|
||||||
|
|
||||||
assert counter == 4, "Unexpected number of calls for _every() == false";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test filter
|
|
||||||
{
|
|
||||||
var a = [1, 2, 3, 4];
|
|
||||||
var d = ["one": 1, "two": 2, "three": 3, "four": 4];
|
|
||||||
|
|
||||||
fn f(k, v) {
|
|
||||||
return v % 2 == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert a.filter(f) == [2, 4], "array.filter() failed";
|
|
||||||
assert d.filter(f) == ["two": 2, "four": 4], "dictionary.filter() failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test forEach
|
|
||||||
{
|
|
||||||
var counter = 0;
|
|
||||||
|
|
||||||
fn p(k, v) {
|
|
||||||
counter++;
|
|
||||||
print string k + ": " + string v;
|
|
||||||
}
|
|
||||||
|
|
||||||
var a = ["a", "b"];
|
|
||||||
var d = ["foo": 1, "bar": 2, "bazz": 3, "fizz": 4];
|
|
||||||
|
|
||||||
a.forEach(p);
|
|
||||||
assert counter == 2, "forEach ran an unusual number of times";
|
|
||||||
|
|
||||||
counter = 0;
|
|
||||||
d.forEach(p);
|
|
||||||
assert counter == 4, "forEach ran an unusual number of times";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test getKeys
|
|
||||||
{
|
|
||||||
var d = ["foo": 1, "bar": 2];
|
|
||||||
|
|
||||||
var a = d.getKeys();
|
|
||||||
|
|
||||||
assert a.length() == 2, "_getKeys() length failed";
|
|
||||||
|
|
||||||
//NOTE: dependant on hash algorithm
|
|
||||||
assert a == ["bar", "foo"], "_getKeys() result failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test getValues
|
|
||||||
{
|
|
||||||
var d = ["foo": 1, "bar": 2];
|
|
||||||
|
|
||||||
var a = d.getValues();
|
|
||||||
|
|
||||||
assert a.length() == 2, "_getValues() length failed";
|
|
||||||
|
|
||||||
//NOTE: dependant on hash algorithm
|
|
||||||
assert a == [2, 1], "_getValues() result failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test indexOf
|
|
||||||
{
|
|
||||||
var a = [1, 2, 42, 3];
|
|
||||||
|
|
||||||
//results are zero-indexed
|
|
||||||
assert a.indexOf(42) == 2, "_indexOf() failed";
|
|
||||||
assert a.indexOf(4) == null, "_indexOf() == null failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test map
|
|
||||||
{
|
|
||||||
//test map with toy functions
|
|
||||||
{
|
|
||||||
fn increment(k, v) {
|
|
||||||
return v + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
var a = [1, 2, 3];
|
|
||||||
var d = ["four": 4, "five": 5, "six": 6];
|
|
||||||
|
|
||||||
assert a.map(increment).map(increment).map(increment) == [4,5,6], "array.map() failed";
|
|
||||||
assert d.map(increment).map(increment).map(increment) == [8,9,7], "dictionary.map() failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
//test map with native functions
|
|
||||||
{
|
|
||||||
//TODO: write some native functions for use with map
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test reduce
|
|
||||||
{
|
|
||||||
var a = [1, 2, 3, 4];
|
|
||||||
var d = ["one": 1, "two": 2, "three": 3, "four": 4];
|
|
||||||
|
|
||||||
fn f(acc, k, v) {
|
|
||||||
return acc + v;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert a.reduce(0, f) == 10, "array.reduce() failed";
|
|
||||||
assert d.reduce(0, f) == 10, "dictionary.reduce() failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test some
|
|
||||||
{
|
|
||||||
var a = [false, false, false];
|
|
||||||
var d = ["one": false, "two": false];
|
|
||||||
|
|
||||||
var counter = 0;
|
|
||||||
fn f(k, v) {
|
|
||||||
counter++;
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert a.some(f) == false, "array.some() == false failed";
|
|
||||||
assert d.some(f) == false, "dictionary.some() == false failed";
|
|
||||||
|
|
||||||
assert counter == 5, "Unexpected number of calls for _some() == false";
|
|
||||||
|
|
||||||
counter = 0;
|
|
||||||
a[1] = true;
|
|
||||||
d["two"] = true;
|
|
||||||
|
|
||||||
assert a.some(f) == true, "array.some() == true failed";
|
|
||||||
assert d.some(f) == true, "dictionary.some() == true failed";
|
|
||||||
|
|
||||||
assert counter == 4, "Unexpected number of calls for _some() == true";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test sort
|
|
||||||
{
|
|
||||||
fn less(a, b) {
|
|
||||||
return a < b;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn greater(a, b) {
|
|
||||||
return a > b;
|
|
||||||
}
|
|
||||||
|
|
||||||
var a = [7, 2, 1, 8, 6, 3, 5, 4];
|
|
||||||
var b = [7, 2, 1, 4, 6, 3, 5, 8];
|
|
||||||
var c = [1, 2, 3, 4, 5, 6, 7, 8];
|
|
||||||
var d = [7, 2, 1, 8, 6, 3, 5, 4];
|
|
||||||
|
|
||||||
a = a.sort(less);
|
|
||||||
b = b.sort(less);
|
|
||||||
c = c.sort(less);
|
|
||||||
d = d.sort(greater);
|
|
||||||
|
|
||||||
assert a == [1, 2, 3, 4, 5, 6, 7, 8], "array.sort(less) failed";
|
|
||||||
assert b == [1, 2, 3, 4, 5, 6, 7, 8], "array.sort(less) with pivot high failed";
|
|
||||||
assert c == [1, 2, 3, 4, 5, 6, 7, 8], "array.sort(less) pre-sorted array failed";
|
|
||||||
assert d == [8, 7, 6, 5, 4, 3, 2, 1], "array.sort(greater) failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test toLower
|
|
||||||
{
|
|
||||||
assert "Hello World".toLower() == "hello world", "_toLower() failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test toString
|
|
||||||
{
|
|
||||||
var a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
|
|
||||||
|
|
||||||
var s = a.toString();
|
|
||||||
|
|
||||||
assert s == "[[1,2,3],[4,5,6],[7,8,9]]", "array._toString() failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test toUpper
|
|
||||||
{
|
|
||||||
assert "Hello World".toUpper() == "HELLO WORLD", "_toUpper() failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//test trim defaults
|
|
||||||
{
|
|
||||||
{
|
|
||||||
//test a bunch
|
|
||||||
fn test(s, pass) {
|
|
||||||
var result = s.trim();
|
|
||||||
assert result == pass, "_trim(" + result + ") failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
test("hello world", "hello world");
|
|
||||||
test(" hello world", "hello world");
|
|
||||||
test("hello world ", "hello world");
|
|
||||||
test(" hello world ", "hello world");
|
|
||||||
test(" hello world", "hello world");
|
|
||||||
test("hello world ", "hello world");
|
|
||||||
test(" hello world ", "hello world");
|
|
||||||
test(" hello world", "hello world");
|
|
||||||
test("hello world ", "hello world");
|
|
||||||
test(" hello world ", "hello world");
|
|
||||||
|
|
||||||
//one for goot luck
|
|
||||||
assert " hello world ".trim() == "hello world", "hello world.trim() failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
//test trim custom values
|
|
||||||
{
|
|
||||||
var chars = "heliod";
|
|
||||||
|
|
||||||
assert "hello world".trim(chars) == " wor", "custom _trim() failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
//test trimBegin() & trimEnd()
|
|
||||||
assert " foo ".trimBegin() == "foo ", "string.trimBegin() failed";
|
|
||||||
assert " foo ".trimEnd() == " foo", "string.trimBegin() failed";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
print "All good";
|
|
||||||
@@ -1,9 +1,323 @@
|
|||||||
//test the standard library
|
|
||||||
{
|
|
||||||
import standard;
|
import standard;
|
||||||
|
|
||||||
|
//test clock
|
||||||
|
{
|
||||||
//this depends on external factors, so only check the length
|
//this depends on external factors, so only check the length
|
||||||
assert clock().length() == 24, "clock() import failed";
|
assert clock().length() == 24, "clock().length() failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test concat
|
||||||
|
{
|
||||||
|
//test array concat
|
||||||
|
{
|
||||||
|
var a = [1, 2, 3];
|
||||||
|
var b = [4, 5, 6];
|
||||||
|
|
||||||
|
var c = a.concat(b).concat(b);
|
||||||
|
|
||||||
|
assert c == [1, 2, 3, 4, 5, 6, 4, 5, 6], "array.concat() failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//test dictionary concat
|
||||||
|
{
|
||||||
|
var a = ["one" : 1, "two": 2, "three": 3];
|
||||||
|
var b = ["four" : 4, "five": 5, "six": 6];
|
||||||
|
|
||||||
|
var c = a.concat(b);
|
||||||
|
|
||||||
|
assert c.length() == 6, "dictionary.concat().length() failed";
|
||||||
|
|
||||||
|
assert c == ["one" : 1, "two": 2, "three": 3, "four" : 4, "five": 5, "six": 6], "dictionary.concat() comparison failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//test dictionary concat with clashing keys
|
||||||
|
{
|
||||||
|
var a = ["one" : 1, "two": 2, "three": 3, "random": 1];
|
||||||
|
var b = ["four" : 4, "five": 5, "six": 6, "random": 2];
|
||||||
|
|
||||||
|
var c = a.concat(b);
|
||||||
|
|
||||||
|
assert c["random"] == 1, "dictionary.concat() clashing keys failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//test string concat
|
||||||
|
{
|
||||||
|
var a = "foo";
|
||||||
|
var b = "bar";
|
||||||
|
|
||||||
|
var c = a.concat(b);
|
||||||
|
|
||||||
|
assert c == "foobar", "string.concat() failed";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test containsKey
|
||||||
|
{
|
||||||
|
var d = ["one": 1, "two": 2];
|
||||||
|
|
||||||
|
assert d.containsKey("one") == true, "dictionary.containsKey() == true failed";
|
||||||
|
assert d.containsKey("three") == false, "dictionary.containsKey() == false failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test containsValue
|
||||||
|
{
|
||||||
|
var a = [1, 2, 3];
|
||||||
|
var d = ["one": 1, "two": 2];
|
||||||
|
|
||||||
|
assert a.containsValue(1) == true, "array.containsValue() == true failed";
|
||||||
|
assert a.containsValue(5) == false, "array.containsValue() == false failed";
|
||||||
|
assert d.containsValue(1) == true, "dictionary.containsValue() == true failed";
|
||||||
|
assert d.containsValue(3) == false, "dictionary.containsValue() == false failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test every
|
||||||
|
{
|
||||||
|
var a = [1, 2, 3];
|
||||||
|
var d = ["one": 1, "two": 2];
|
||||||
|
|
||||||
|
var counter = 0;
|
||||||
|
fn f(k, v) {
|
||||||
|
counter++;
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert a.every(f) == true, "array.every() == true failed";
|
||||||
|
assert d.every(f) == true, "dictionary.every() == true failed";
|
||||||
|
|
||||||
|
assert counter == 5, "Unexpected number of calls for _every() == true";
|
||||||
|
|
||||||
|
counter = 0;
|
||||||
|
a[1] = false;
|
||||||
|
d["two"] = false;
|
||||||
|
|
||||||
|
assert a.every(f) == false, "array.every() == false failed";
|
||||||
|
assert d.every(f) == false, "dictionary.every() == false failed";
|
||||||
|
|
||||||
|
assert counter == 4, "Unexpected number of calls for _every() == false";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test filter
|
||||||
|
{
|
||||||
|
var a = [1, 2, 3, 4];
|
||||||
|
var d = ["one": 1, "two": 2, "three": 3, "four": 4];
|
||||||
|
|
||||||
|
fn f(k, v) {
|
||||||
|
return v % 2 == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert a.filter(f) == [2, 4], "array.filter() failed";
|
||||||
|
assert d.filter(f) == ["two": 2, "four": 4], "dictionary.filter() failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test forEach
|
||||||
|
{
|
||||||
|
var counter = 0;
|
||||||
|
|
||||||
|
fn p(k, v) {
|
||||||
|
counter++;
|
||||||
|
print string k + ": " + string v;
|
||||||
|
}
|
||||||
|
|
||||||
|
var a = ["a", "b"];
|
||||||
|
var d = ["foo": 1, "bar": 2, "bazz": 3, "fizz": 4];
|
||||||
|
|
||||||
|
a.forEach(p);
|
||||||
|
assert counter == 2, "forEach ran an unusual number of times";
|
||||||
|
|
||||||
|
counter = 0;
|
||||||
|
d.forEach(p);
|
||||||
|
assert counter == 4, "forEach ran an unusual number of times";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test getKeys
|
||||||
|
{
|
||||||
|
var d = ["foo": 1, "bar": 2];
|
||||||
|
|
||||||
|
var a = d.getKeys();
|
||||||
|
|
||||||
|
assert a.length() == 2, "_getKeys() length failed";
|
||||||
|
|
||||||
|
//NOTE: dependant on hash algorithm
|
||||||
|
assert a == ["bar", "foo"], "_getKeys() result failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test getValues
|
||||||
|
{
|
||||||
|
var d = ["foo": 1, "bar": 2];
|
||||||
|
|
||||||
|
var a = d.getValues();
|
||||||
|
|
||||||
|
assert a.length() == 2, "_getValues() length failed";
|
||||||
|
|
||||||
|
//NOTE: dependant on hash algorithm
|
||||||
|
assert a == [2, 1], "_getValues() result failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test indexOf
|
||||||
|
{
|
||||||
|
var a = [1, 2, 42, 3];
|
||||||
|
|
||||||
|
//results are zero-indexed
|
||||||
|
assert a.indexOf(42) == 2, "_indexOf() failed";
|
||||||
|
assert a.indexOf(4) == null, "_indexOf() == null failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test map
|
||||||
|
{
|
||||||
|
//test map with toy functions
|
||||||
|
{
|
||||||
|
fn increment(k, v) {
|
||||||
|
return v + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
var a = [1, 2, 3];
|
||||||
|
var d = ["four": 4, "five": 5, "six": 6];
|
||||||
|
|
||||||
|
assert a.map(increment).map(increment).map(increment) == [4,5,6], "array.map() failed";
|
||||||
|
assert d.map(increment).map(increment).map(increment) == [8,9,7], "dictionary.map() failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//test map with native functions
|
||||||
|
{
|
||||||
|
//TODO: write some native functions for use with map
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test reduce
|
||||||
|
{
|
||||||
|
var a = [1, 2, 3, 4];
|
||||||
|
var d = ["one": 1, "two": 2, "three": 3, "four": 4];
|
||||||
|
|
||||||
|
fn f(acc, k, v) {
|
||||||
|
return acc + v;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert a.reduce(0, f) == 10, "array.reduce() failed";
|
||||||
|
assert d.reduce(0, f) == 10, "dictionary.reduce() failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test some
|
||||||
|
{
|
||||||
|
var a = [false, false, false];
|
||||||
|
var d = ["one": false, "two": false];
|
||||||
|
|
||||||
|
var counter = 0;
|
||||||
|
fn f(k, v) {
|
||||||
|
counter++;
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert a.some(f) == false, "array.some() == false failed";
|
||||||
|
assert d.some(f) == false, "dictionary.some() == false failed";
|
||||||
|
|
||||||
|
assert counter == 5, "Unexpected number of calls for _some() == false";
|
||||||
|
|
||||||
|
counter = 0;
|
||||||
|
a[1] = true;
|
||||||
|
d["two"] = true;
|
||||||
|
|
||||||
|
assert a.some(f) == true, "array.some() == true failed";
|
||||||
|
assert d.some(f) == true, "dictionary.some() == true failed";
|
||||||
|
|
||||||
|
assert counter == 4, "Unexpected number of calls for _some() == true";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test sort
|
||||||
|
{
|
||||||
|
fn less(a, b) {
|
||||||
|
return a < b;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn greater(a, b) {
|
||||||
|
return a > b;
|
||||||
|
}
|
||||||
|
|
||||||
|
var a = [7, 2, 1, 8, 6, 3, 5, 4];
|
||||||
|
var b = [7, 2, 1, 4, 6, 3, 5, 8];
|
||||||
|
var c = [1, 2, 3, 4, 5, 6, 7, 8];
|
||||||
|
var d = [7, 2, 1, 8, 6, 3, 5, 4];
|
||||||
|
|
||||||
|
a = a.sort(less);
|
||||||
|
b = b.sort(less);
|
||||||
|
c = c.sort(less);
|
||||||
|
d = d.sort(greater);
|
||||||
|
|
||||||
|
assert a == [1, 2, 3, 4, 5, 6, 7, 8], "array.sort(less) failed";
|
||||||
|
assert b == [1, 2, 3, 4, 5, 6, 7, 8], "array.sort(less) with pivot high failed";
|
||||||
|
assert c == [1, 2, 3, 4, 5, 6, 7, 8], "array.sort(less) pre-sorted array failed";
|
||||||
|
assert d == [8, 7, 6, 5, 4, 3, 2, 1], "array.sort(greater) failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test toLower
|
||||||
|
{
|
||||||
|
assert "Hello World".toLower() == "hello world", "_toLower() failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test toString
|
||||||
|
{
|
||||||
|
var a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
|
||||||
|
|
||||||
|
var s = a.toString();
|
||||||
|
|
||||||
|
assert s == "[[1,2,3],[4,5,6],[7,8,9]]", "array._toString() failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test toUpper
|
||||||
|
{
|
||||||
|
assert "Hello World".toUpper() == "HELLO WORLD", "_toUpper() failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//test trim defaults
|
||||||
|
{
|
||||||
|
{
|
||||||
|
//test a bunch
|
||||||
|
fn test(s, pass) {
|
||||||
|
var result = s.trim();
|
||||||
|
assert result == pass, "_trim(" + result + ") failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
test("hello world", "hello world");
|
||||||
|
test(" hello world", "hello world");
|
||||||
|
test("hello world ", "hello world");
|
||||||
|
test(" hello world ", "hello world");
|
||||||
|
test(" hello world", "hello world");
|
||||||
|
test("hello world ", "hello world");
|
||||||
|
test(" hello world ", "hello world");
|
||||||
|
test(" hello world", "hello world");
|
||||||
|
test("hello world ", "hello world");
|
||||||
|
test(" hello world ", "hello world");
|
||||||
|
|
||||||
|
//one for goot luck
|
||||||
|
assert " hello world ".trim() == "hello world", "hello world.trim() failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//test trim custom values
|
||||||
|
{
|
||||||
|
var chars = "heliod";
|
||||||
|
|
||||||
|
assert "hello world".trim(chars) == " wor", "custom _trim() failed";
|
||||||
|
}
|
||||||
|
|
||||||
|
//test trimBegin() & trimEnd()
|
||||||
|
assert " foo ".trimBegin() == "foo ", "string.trimBegin() failed";
|
||||||
|
assert " foo ".trimEnd() == " foo", "string.trimBegin() failed";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,8 @@
|
|||||||
#include "../repl/repl_tools.h"
|
#include "../repl/repl_tools.h"
|
||||||
|
|
||||||
#include "../repl/lib_about.h"
|
#include "../repl/lib_about.h"
|
||||||
#include "../repl/lib_compound.h"
|
|
||||||
#include "../repl/lib_runner.h"
|
#include "../repl/lib_runner.h"
|
||||||
#include "../repl/lib_standard.h"
|
#include "../repl/lib_standard.h"
|
||||||
// #include "../repl/lib_timer.h"
|
|
||||||
|
|
||||||
//supress the print output
|
//supress the print output
|
||||||
static void noPrintFn(const char* output) {
|
static void noPrintFn(const char* output) {
|
||||||
@@ -64,9 +62,7 @@ void runBinaryQuietly(const unsigned char* tb, size_t size) {
|
|||||||
|
|
||||||
//inject the libs
|
//inject the libs
|
||||||
Toy_injectNativeHook(&interpreter, "about", Toy_hookAbout);
|
Toy_injectNativeHook(&interpreter, "about", Toy_hookAbout);
|
||||||
Toy_injectNativeHook(&interpreter, "compound", Toy_hookCompound);
|
|
||||||
Toy_injectNativeHook(&interpreter, "standard", Toy_hookStandard);
|
Toy_injectNativeHook(&interpreter, "standard", Toy_hookStandard);
|
||||||
// Toy_injectNativeHook(&interpreter, "timer", Toy_hookTimer);
|
|
||||||
Toy_injectNativeHook(&interpreter, "runner", Toy_hookRunner);
|
Toy_injectNativeHook(&interpreter, "runner", Toy_hookRunner);
|
||||||
|
|
||||||
Toy_runInterpreter(&interpreter, tb, size);
|
Toy_runInterpreter(&interpreter, tb, size);
|
||||||
@@ -96,10 +92,8 @@ int main() {
|
|||||||
Payload payloads[] = {
|
Payload payloads[] = {
|
||||||
{"interactions.toy", "standard", Toy_hookStandard}, //interactions needs standard
|
{"interactions.toy", "standard", Toy_hookStandard}, //interactions needs standard
|
||||||
{"about.toy", "about", Toy_hookAbout},
|
{"about.toy", "about", Toy_hookAbout},
|
||||||
{"compound.toy", "compound", Toy_hookCompound},
|
|
||||||
{"runner.toy", "runner", Toy_hookRunner},
|
|
||||||
{"standard.toy", "standard", Toy_hookStandard},
|
{"standard.toy", "standard", Toy_hookStandard},
|
||||||
// {"timer.toy", "timer", Toy_hookTimer},
|
{"runner.toy", "runner", Toy_hookRunner},
|
||||||
{NULL, NULL, NULL}
|
{NULL, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user