Skip to content
This repository was archived by the owner on Dec 12, 2022. It is now read-only.

Code Examples

Derk Norton edited this page Jan 23, 2019 · 52 revisions

Contents

Elements

Angles

// import the framework module
const bali = require('bali-component-framework');

// constructors
const zero = new bali.Angle();  // defaults to zero
const pi = bali.parse('~pi');  // default units are radians
const piOver4 = new bali.Angle(bali.precision.PI/4);  // from raw value
const fortyFive = bali.Angle.fromLiteral('~45', bali.degrees);  // explicit declaration of units
const oneEighty = bali.parse('~180($units: $degrees)');  // from full source string
const minusPi = bali.Angle.fromLiteral('~-pi');  // normalized to ~pi

// conversions
zero.toBoolean();  // returns false
zero.toNumber();  // returns 0
pi.toBoolean();  // returns true
bali.format(pi);  // returns '~pi'
piOver4.toBoolean();  // returns true
fortyFive.toLiteral(bali.degrees);  // returns '~45'
oneEighty.toString();  // returns '~180($units: $degrees)'

// comparisons
piOver4.isEqualTo(fortyFive);  // returns true
zero.comparedTo(piOver4);  // return -1
oneEighty.comparedTo(fortyFive);  // return 1
minusPi.isEqualTo(pi);  // returns true because of the normalization

// angular operations
bali.Angle.inverse(fortyFive).toLiteral(bali.degrees);  // returns '~-135'
bali.Angle.complement(zero).toLiteral(bali.degrees);  // returns '~90'
bali.Angle.supplement(pi).toNumber();  // returns 0
bali.Angle.conjugate(fortyFive).toLiteral(bali.degrees);  // returns '~-45'

// arithmetic operations
bali.Angle.sum(fortyFive, fortyFive).toLiteral(bali.degrees);  // returns '~90'
bali.Angle.difference(pi, fortyFive).toLiteral(bali.degrees);  // returns '~135'
bali.Angle.scaled(fortyFive, 4).toLiteral();  // returns '~pi'

// trigonometric operations
bali.Angle.sine(pi);  // returns 0
bali.Angle.cosine(fortyFive);  // returns 0.7071067811865476
bali.Angle.tangent(fortyFive);  // returns 1
bali.Angle.arcsine(-1).toLiteral(bali.degrees);  // returns '~-90'
bali.Angle.arccosine(1).toLiteral(bali.degrees);  // returns '~0'
bali.Angle.arctangent(1, -1).toLiteral(bali.degrees);  // returns '~135'

Binaries

// import the framework module
const bali = require('bali-component-framework');

// constructors
const empty = new bali.Binary();  // defaults to an empty base 32 binary string
const d27159 = bali.Binary.fromLiteral("'0110101000010111'", bali.base2);  // base 2 binary string
const d50350 = bali.Binary.fromLiteral("'1100010010101110'", bali.base2);  // base 2 binary string
const h6A17 = bali.Binary.fromLiteral("'6A17'", bali.base16);  // base 16 binary string
const r32 = bali.Binary.fromRandom(40);  // a new random 40 byte base 32 binary string
const jpeg = bali.parse("'\n" +
    "2OGj/83okC3Ic/Qd7sWqTDCbAKUoNNsnpD1ccS1C8Vg4AWlr5v23ekPsPJai\n" +
    "LWpNINAvKZjSiugx3Yp/iOidbolTexeVRt1etX+nem9ozwG5eG4wN7ul8edO\n" +
    "QJvxWZ2KVkBqqWp1gqEo6gSfy5DXL3N/OPJIM/iVuWv49irzowhliOCW7NrO\n" +
    "a6hbC6o4P+yA2AnUeaNwRwYgB6Wu1P4aJe3eWDBRo8lsh6Aq9nR5XHo3hcj1\n" +
    "BIVadYxy+fV9LQN0S8rIXg1MBIymT3KVdgEGUmNX5I+g9t5rOEFANMrma5Sv\n" +
    "uPs6YHNa9Mq3qWlnMyw2mzAVTaK5Q5DTvDaC0A8fwg==\n" +
"'($base: 64, $mediatype: \"image/jpeg\")");  // base 64 binary string with mediatype

// conversions
empty.toBoolean();  // returns false
r32.toBoolean();  // returns true
d27159.toLiteral();  // returns "'D8BH'"
h6A17.toLiteral(bali.base2);  // returns "'0110101000010111'"
jpeg.toLiteral();  // returns '
//    V3HT7ZYDX282VK3LYHFYXJDA9HR9P05550TDP9X47NF72BA2Y5C3H0B9DGLG
//    VDVT8GP3S5N25NN4T86H5WMSJMMAX0RXV2LZJ3M9TVM9ADXJG5A6VNGBAZX7
//    G9QPJLR1Q5W6WC1QQFKZ3STF82DZ2PCXJ9B40TN9D9TR5898X829ZKWHTWQQ
//    6ZSRY9437Y4NQ5NZJXJAYFJHHSC8W2BFSPPFDFM5P2XA70ZYS06R17A7L8VH
//    8W3201X5NVAGW6J5XQG5HC2JMG4PS1X05BV78YAWG8VRBK7N0K2NMXCCFBWZ
//    AZ9D0DT4QKP8BR6MR14CMS7Q55BP04354RTQWK7T1XPYDCW42H1MSBL6Q55G
//    Q3XLMR3LBBTCNDX9D5LL6B1PLCR1ALD2Q51S1MXW6T1D03RZR8
//' in the default base 32
r32.toBase2();  // returns the random binary string in base 2
r32.toBase16();  // returns the random binary string in base 16
r32.toBase32();  // returns the random binary string in base 32
r32.toBase64();  // returns the random binary string in base 64

// comparisons
d27159.isEqualTo(h6A17);  // returns true
empty.isEmpty();  // returns true
empty.comparedTo(r32);  // return -1
r32.getSize();  // return 40 (bytes)

// logical operations
bali.Binary.not(d27159).toLiteral(bali.base2);  // returns "'1001010111101000'"
bali.Binary.and(d27159, d50350).toLiteral(bali.base2);  // returns "'0100000000000110'"
bali.Binary.sans(d27159, d50350).toLiteral(bali.base2);  // returns "'0010101000010001'"
bali.Binary.or(d27159, d50350).toLiteral(bali.base2);  // returns "'1110111010111111'"
bali.Binary.xor(d27159, d50350).toLiteral(bali.base2);  // returns "'1010111010111001'"

// chaining operations
bali.Binary.concatenation(d27159, d50350).toLiteral(bali.base2);  // returns "'01101010000101111100010010101110'"

// iteration
const iterator = r32.getIterator();
while (iterator.hasNext()) {
    var byte = iterator.getNext();
    // do something with the byte
}

Durations

Moments

Numbers

// import the framework module
const bali = require('bali-component-framework');

// constructors
const zero = new bali.Number(-0);  // -0 = 0 (on the complex Riemann Sphere)
const integer = new bali.Number(42);
const infinity = new bali.Number(-Infinity);  // -infinity = infinity (on the complex Riemann Sphere)
const indefinite = new bali.Number(0/0);  // not even on the sphere!
const real = new bali.Number(1.23E-45);
const imaginary = bali.Number.fromLiteral('137i');
const rectangular1 = new bali.Number(3, 4);  // real and imaginary parts
const rectangular2 = bali.Number.fromLiteral('(3, -4i)');
const polar1 = new bali.Number(1, new bali.Angle(bali.precision.PI/3));  // magnitude and phase
const polar2 = bali.Number.fromLiteral('(-1 e^~1.0471975511965976 i)');

// accessors
infinity.getReal();  // returns Infinity
indefinite.getImaginary();  // returns NaN
imaginary.getReal();  // returns 0
imaginary.getMagnitude();  // returns 137
rectangular1.getImaginary();  // returns 4
rectangular1.getMagnitude();  // returns sqrt(3^2 + 4^2) = 5
real.getPhase();  // returns ~0
polar1.getPhase();  // returns ~PI/3 = ~1.047197551196598

// conversions
zero.toNumber();  // returns 0
infinity.toLiteral();  // returns 'infinity'
infinity.toNumber();  // returns Infinity
indefinite.toLiteral();  // returns 'undefined'
imaginary.toNumber();  // returns 137 (the magnitude)
rectangular1.toLiteral();  // returns '(3, 4i)'
rectangular2.toPolar();  // returns '(5 e^~-0.9272952180016122i)'
polar1.toLiteral();  // returns '(0.5, 0.8660254037844386i)'
polar2.toRectangular();  // returns '(-0.5, -0.8660254037844383i)'

// comparisons
zero.isZero();  // returns true
indefinite.isUndefined();  // returns true
infinity.isUndefined();  // returns false
infinity.isInfinite();  // returns true
rectangular1.comparedTo(rectangular2);  // returns 1
polar1.comparedTo(polar2);  // returns 1
zero.comparedTo(rectangular2);  // return -1
polar1.comparedTo(infinity);  // return -1

// numerical operations
bali.Number.inverse(rectangular1).toRectangular();  // returns '(-3, -4i)'
bali.Number.reciprocal(polar1).toPolar();  // returns '(1 e^~-1.047197551196598i)'
bali.Number.conjugate(rectangular2).isEqualTo(rectangular1);  // returns true

bali.Number.sum(rectangular1, rectangular2).toLiteral();  // returns '3'
bali.Number.difference(rectangular1, rectangular2).toLiteral();  // returns '(3, 8i)'
bali.Number.scaled(polar1, 3).toPolar();  // returns '(3 e^~1i)'
bali.Number.product(polar1, polar2).toLiteral();  // returns '(0.5, -0.8660254037844394i)'
bali.Number.quotient(polar1, polar1).toLiteral();  // returns '1'

const exp = bali.Number.exponential(rectangular1, polar1);
exp.toRectangular();  // returns '(-0.28322440499, 0.96078349272i)'
const log = bali.Number.logarithm(rectangular1, exp);
log.toPolar();  // returns '(1 e^~1.047197551204799i)'
polar1.isEqualTo(log);  // returns true

Patterns

Percentages

Probabilities

// import the framework module
const bali = require('bali-component-framework');

// constructors
const p1 = bali.Probability.fromLiteral('true');
const p2 = new bali.Probability(1);
const p3 = new bali.Probability(0.75);
const p4 = bali.Probability.fromLiteral('false');
const p5 = bali.Probability.fromLiteral('.25');  // no leading zero for probabilities
const p6 = bali.Probability.not(p3);  // p6 = 1 - 0.75 = 0.25

// conversions
p1.toNumber();  // returns 1
p2.toLiteral();  // returns 'true'
p3.toBoolean();  // returns true since 0.75 >= 0.5
p4.toNumber();  // returns 0
p5.toBoolean();  // returns false since 0.25 < 0.5
p6.toLiteral();  // returns '.25' because probabilities don't have a leading zero

// comparisons
p1.isEqualTo(p2);  // returns true because true is the same as the probability one
p3.comparedTo(p2);  // returns -1 because 0.75 < 1 (true)
p4.comparedTo(p1);  // returns -1 because 0 (false) < 1 (true)
p5.isEqualTo(p6);  // returns true

// weighted coin tosses
bali.Probability.coinToss(p2);  // returns true 100% of the time
bali.Probability.coinToss(p3);  // returns true 75% of the time
bali.Probability.coinToss(p4);  // returns false 100% of the time

// logical operations
bali.Probability.not(p1).isEqualTo(p4);  // returns true since not true = false
bali.Probability.and(p3, p6).toNumber();  // returns 0.75 * 0.25 = 0.19
bali.Probability.sans(p3, p6).toNumber();  // returns 0.75 * (1 - 0.25) = 0.56
bali.Probability.or(p3, p6).toNumber();  // returns 0.75 + 0.25 - 0.75 * 0.25 = 0.81
bali.Probability.xor(p3, p6).toNumber();  // returns 0.75 + 0.25 - 2*(0.75 * 0.25) = 0.62

References

Symbols

Tags

Texts

Versions

Composites

Catalogs

Lists

Queues

Ranges

Sets

Stacks

Clone this wiki locally