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 Feb 15, 2019 · 52 revisions

Contents

Elements

Angles

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

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

// conversions
zero.toBoolean();  // returns false
zero.toNumber();  // returns 0
zero.toString();  // returns '~0'

pi.toBoolean();  // returns true
pi.toNumber();  // returns 3.141592653589793
pi.toString();  // returns '~pi'

oneEighty.toBoolean();  // returns true
oneEighty.toNumber();  // returns 3.141592653589793
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.literal(bali.angle.inverse(fortyFive), bali.degrees);  // returns '~-135'
bali.literal(bali.angle.complement(zero), bali.degrees);  // returns '~90'
bali.literal(bali.angle.supplement(pi));  // returns '~0'
bali.literal(bali.angle.conjugate(fortyFive), bali.degrees);  // returns '~-45'

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

// trigonometric operations
bali.angle.sine(pi);  // returns 0
bali.angle.cosine(fortyFive);  // returns 0.7071067811865476
bali.angle.tangent(fortyFive);  // returns 1
bali.literal(bali.angle.arcsine(-1), bali.degrees);  // returns '~-90'
bali.literal(bali.angle.arccosine(1), bali.degrees);  // returns '~0'
bali.literal(bali.angle.arctangent(1, -1), 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

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

// constructors
const zero = new bali.Duration();  // defaults to zero milliseconds
const duration = new bali.Duration('P2Y3M16D');  // raw ISO 8601 format
const days = bali.parse('~P7D');  // 7 days
const week = bali.parse('~P1W');  // 1 week

// conversions
zero.toBoolean();  // returns false
zero.toNumber();  // returns 0 milliseconds
duration.toBoolean();  // returns true
bali.format(duration);  // returns '~P2Y3M16D'

// comparisons
days.isEqualTo(week);  // returns true
zero.comparedTo(days);  // return -1
duration.comparedTo(week);  // return 1

// duration operations
bali.Duration.inverse(week).toLiteral();  // returns '~-P7D'
bali.Duration.sum(duration, week).toLiteral();  // returns '~P2Y3M23D'
bali.Duration.difference(duration, week).toLiteral();  // returns '~P2Y3M9D'
bali.Duration.scaled(week, 3).toLiteral();  // returns '~PT504H'

Moments

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

// constructors
const now = new bali.Moment();  // defaults to the current moment
const moment = new bali.Moment('2017-12-30T17:38:35.726');  // raw ISO 8601 format
const event = bali.parse('<2017-12-30T17:38:35.726>($city: London, $country: England)');  // parameterized

// conversions
now.toBoolean();  // returns true
now.toNumber();  // returns the number of milliseconds since UNIX EPOC
bali.format(moment);  // returns '<2017-12-30T17:38:35.726>'

// comparisons
moment.isEqualTo(event);  // returns true
now.comparedTo(moment);  // return 1

// moment operations
bali.Moment.duration(moment, now).toLiteral();  // returns the duration between moments
const weeks = bali.parse('~P3W');  // three weeks
bali.Moment.earlier(now, weeks).toLiteral();  // returns three weeks ago
bali.Moment.later(now, weeks).toLiteral();  // returns three weeks from now

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 sphere
const indefinite = new bali.Number(0/0);  // not even on the sphere!
const real = bali.parse('1.23E-45');  // from source string
const imaginary = bali.parse('137i');  // from source string
const rectangular1 = new bali.Number(3, 4);  // real and imaginary parts
const rectangular2 = bali.parse('(3, -4i)');  // from source string
const angle = new bali.Angle(bali.precision.PI/3);
const polar1 = new bali.Number(1, angle);  // magnitude and phase
const polar2 = bali.parse('(-1 e^~1.0471975511965976 i)');  // polar form

// 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().toLiteral();  // returns '~0'
polar1.getPhase().toLiteral();  // returns '~1.047197551196598' which equals ~pi/3

// conversions
zero.toNumber();  // returns 0
infinity.toLiteral();  // returns 'infinity'
infinity.toNumber();  // returns Infinity
indefinite.toLiteral();  // returns 'undefined'
imaginary.toNumber();  // returns 0 (the real part)
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 '6'
bali.Number.difference(rectangular1, rectangular2).toLiteral();  // returns '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

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

// constructors
const none = new bali.Pattern();  // default pattern is 'none'
const any = bali.parse('any');  // from source string
const pattern = bali.parse('"^[a-zA-Z]+$"?');  // regular expression

// conversions
none.toBoolean();  // returns false
none.toLiteral();  // returns 'none'
any.toBoolean();  // returns true
any.toLiteral();  // returns 'any'
pattern.toLiteral();  // returns '"^[a-zA-Z]+$"?'

// comparisons
any.isEqualTo(bali.parse('".*"?'));  // returns true
none.comparedTo(any);  // returns 1
any.comparedTo(pattern);  // returns 1

// matching
any.isMatchedBy(bali.parse('[$foo, $bar]'));  // returns true
none.isMatchedBy(none);  // returns false because 'none' never matches
pattern.isMatchedBy('abracadabra');  // returns true
pattern.isMatchedBy(none);  // returns true since none is not the pattern
pattern.isMatchedBy('$foobar');  // returns false

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