Transparent Tank
Read the API Documentation.
Npm
npm install transparent-tank
Usage
The following is an example of building a model and assigning values to its variables.
import {Model, Relation, Variable, Value, Domain} from 'transparent-tank';
let model = new Model( 'CountryCodes' );
// Variable1: Country
let country = new Variable( 'Country' );
let countries = new Domain();
countries.createValue( 'Denmark' );
countries.createValue( 'United States' );
countries.createValue( 'United Kingdom' );
countries.createValue( 'Canada' );
country.setDomain( countries );
model.addVariable( country );
// Variable2: Country Code
let countryCode = new Variable( 'CountryCode' );
let codes = new Domain();
codes.createValue( '+45' );
codes.createValue( '+1' );
codes.createValue( '+44' );
countryCode.setDomain( codes );
model.addVariable( countryCode );
// Rule: Danish Phone Numbers begin with +45
let relation = new Relation( 'DanishPhone', 'Country', [ new Value( 'Denmark' ) ],
'CountryCode', [ new Value( '+45' ) ] );
model.addRelation( relation );
// Now, Start Configuring:
let configuration = new Configuration( model );
configuration.assign( 'Country', 'Denmark' );
configuration.solve();
let countryCode = configuration.getVariable( 'CountryCode' );
// assigned by the system because of the relation:
assert.isTrue( countryCode.getValue( '+45' ).isSystemAssigned() );
Instead of relations, you can use table rules:
let table = new Table( 'CountryAndPhone' );
// Give the table some cols that it will recognize from variable names
table.setCols( 'Country', 'PhoneCountryCode' );
// Add rows where each row is a value from the variable Country or CountryCode
table.addRow( 'Denmark', '+45' );
table.addRow( 'United Kingdom', '+44' );
table.addRow( 'United States', '+1' );
table.addRow( 'Canada', '+1' );
model.addTable( table );
Build
To build this project:
npm install
npm run build
To run unit tests:
npm run test
Unit testing is performed with Mocha+Chai. To run a single test,
postfix it with .only
. To exclude a test, postfix it with .skip
.
For example:
describe.only(function () {
// these tests will run
});