time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

builtin.ts (3005B)


      1 import { makeDefinition } from "../library/registry/fnDefinition.js";
      2 import {
      3   frAny,
      4   frArray,
      5   frBool,
      6   frNumber,
      7   frString,
      8 } from "../library/registry/frTypes.js";
      9 import { FnFactory } from "../library/registry/helpers.js";
     10 import { vArray, vBool, vString, isEqual } from "../value/index.js";
     11 
     12 const maker = new FnFactory({
     13   nameSpace: "", // no namespaced versions
     14   requiresNamespace: false,
     15 });
     16 
     17 export const library = [
     18   maker.nn2n({ name: "add", fn: (x, y) => x + y }), // infix + (see Reducer/Reducer_Peggy/helpers.ts)
     19   maker.ss2s({ name: "add", fn: (x, y) => x + y }), // infix + on strings
     20   maker.nn2n({ name: "subtract", fn: (x, y) => x - y }), // infix -
     21   maker.nn2n({ name: "multiply", fn: (x, y) => x * y }), // infix *
     22   maker.nn2n({ name: "divide", fn: (x, y) => x / y }), // infix /
     23   maker.nn2n({ name: "pow", fn: (x, y) => Math.pow(x, y) }), // infix ^
     24   maker.nn2b({ name: "smaller", fn: (x, y) => x < y }), // infix <
     25   maker.nn2b({ name: "smallerEq", fn: (x, y) => x <= y }), // infix <=
     26   maker.nn2b({ name: "larger", fn: (x, y) => x > y }), // infix >
     27   maker.nn2b({ name: "largerEq", fn: (x, y) => x >= y }), // infix >=
     28   maker.bb2b({ name: "or", fn: (x, y) => x || y }), // infix ||
     29   maker.bb2b({ name: "and", fn: (x, y) => x && y }), // infix &&
     30   maker.n2n({ name: "unaryMinus", fn: (x) => -x }), // unary prefix -
     31   maker.make({
     32     name: "not",
     33     definitions: [
     34       makeDefinition([frNumber], ([x]) => {
     35         // unary prefix !
     36         return vBool(x !== 0);
     37       }),
     38       makeDefinition([frBool], ([x]) => {
     39         // unary prefix !
     40         return vBool(!x);
     41       }),
     42     ],
     43   }),
     44   maker.make({
     45     name: "concat",
     46     definitions: [
     47       makeDefinition([frString, frString], ([a, b]) => {
     48         return vString(a + b);
     49       }),
     50       makeDefinition([frArray(frAny), frArray(frAny)], ([a, b]) => {
     51         return vArray([...a, ...b]);
     52       }),
     53       makeDefinition([frString, frAny], ([a, b]) => {
     54         return vString(a + b.toString());
     55       }),
     56     ],
     57   }),
     58   maker.make({
     59     name: "add",
     60     definitions: [
     61       makeDefinition([frString, frAny], ([a, b]) => {
     62         return vString(a + b.toString());
     63       }),
     64     ],
     65   }),
     66   maker.make({
     67     name: "equal",
     68     definitions: [
     69       makeDefinition([frAny, frAny], ([a, b]) => {
     70         return vBool(isEqual(a, b));
     71       }),
     72     ],
     73   }),
     74   maker.make({
     75     name: "unequal",
     76     definitions: [
     77       makeDefinition([frAny, frAny], ([a, b]) => {
     78         return vBool(!isEqual(a, b));
     79       }),
     80     ],
     81   }),
     82   maker.make({
     83     name: "typeOf",
     84     definitions: [
     85       makeDefinition([frAny], ([v]) => {
     86         return vString(v.publicName);
     87       }),
     88     ],
     89   }),
     90   maker.make({
     91     name: "inspect",
     92     definitions: [
     93       makeDefinition([frAny], ([value]) => {
     94         console.log(value);
     95         return value;
     96       }),
     97       makeDefinition([frAny, frString], ([value, label]) => {
     98         console.log(`${label}: ${value.toString()}`);
     99         return value;
    100       }),
    101     ],
    102   }),
    103 ];