Added electrical units and unit tests

This commit is contained in:
Eric 2015-08-06 12:50:48 +00:00
parent b9614dd9c2
commit dfbc575bc1
2 changed files with 215 additions and 16 deletions

View File

@ -1136,6 +1136,33 @@ function factory (type, config, load, typed) {
PRESSURE: {
dimensions: [1, -1, -2, 0, 0, 0, 0, 0, 0]
},
ELECTRIC_CHARGE: {
dimensions: [0, 0, 1, 1, 0, 0, 0, 0, 0]
},
ELECTRIC_CAPACITANCE: {
dimensions: [-1, -2, 4, 2, 0, 0, 0, 0, 0]
},
ELECTRIC_POTENTIAL: {
dimensions: [1, 2, -3, -1, 0, 0, 0, 0, 0]
},
ELECTRIC_RESISTANCE: {
dimensions: [1, 2, -3, -2, 0, 0, 0, 0, 0]
},
ELECTRIC_INDUCTANCE: {
dimensions: [1, 2, -2, -2, 0, 0, 0, 0, 0]
},
ELECTRIC_CONDUCTANCE: {
dimensions: [-1, -2, 3, 2, 0, 0, 0, 0, 0]
},
MAGNETIC_FLUX: {
dimensions: [1, 2, -2, -1, 0, 0, 0, 0, 0]
},
MAGNETIC_FLUX_DENSITY: {
dimensions: [1, 0, -2, -1, 0, 0, 0, 0, 0]
},
ANGLE: {
dimensions: [0, 0, 0, 0, 0, 0, 0, 1, 0]
},
@ -1964,6 +1991,21 @@ function factory (type, config, load, typed) {
value: 1055.05585262,
offset: 0
},
eV: {
name: 'eV',
base: BASE_UNITS.ENERGY,
prefixes: PREFIXES.SHORT,
value: 1.602176565e-19,
offset: 0
},
electronvolt: {
name: 'electronvolt',
base: BASE_UNITS.ENERGY,
prefixes: PREFIXES.LONG,
value: 1.602176565e-19,
offset: 0
},
// Power
W: {
@ -2004,6 +2046,129 @@ function factory (type, config, load, typed) {
offset: 0
},
// Electric charge
coulomb: {
name: 'coulomb',
base: BASE_UNITS.ELECTRIC_CHARGE,
prefixes: PREFIXES.LONG,
value: 1,
offset: 0,
},
C: {
name: 'C',
base: BASE_UNITS.ELECTRIC_CHARGE,
prefixes: PREFIXES.SHORT,
value: 1,
offset: 0
},
// Electric capacitance
farad: {
name: 'farad',
base: BASE_UNITS.ELECTRIC_CAPACITANCE,
prefixes: PREFIXES.LONG,
value: 1,
offset: 0
},
F: {
name: 'F',
base: BASE_UNITS.ELECTRIC_CAPACITANCE,
prefixes: PREFIXES.SHORT,
value: 1,
offset: 0
},
// Electric potential
volt: {
name: 'volt',
base: BASE_UNITS.ELECTRIC_POTENTIAL,
prefixes: PREFIXES.LONG,
value: 1,
offset: 0
},
V: {
name: 'V',
base: BASE_UNITS.ELECTRIC_POTENTIAL,
prefixes: PREFIXES.SHORT,
value: 1,
offset: 0
},
// Electric resistance
ohm: {
name: 'ohm',
base: BASE_UNITS.ELECTRIC_RESISTANCE,
prefixes: PREFIXES.LONG,
value: 1,
offset: 0
},
/*
Ω: {
name: 'Ω',
base: BASE_UNITS.ELECTRIC_RESISTANCE,
prefixes: PREFIXES.SHORT,
value: 1,
offset: 0
},
*/
// Electric inductance
henry: {
name: 'henry',
base: BASE_UNITS.ELECTRIC_INDUCTANCE,
prefixes: PREFIXES.LONG,
value: 1,
offset: 0
},
H: {
name: 'H',
base: BASE_UNITS.ELECTRIC_INDUCTANCE,
prefixes: PREFIXES.SHORT,
value: 1,
offset: 0
},
// Electric conductance
siemens: {
name: 'siemens',
base: BASE_UNITS.ELECTRIC_CONDUCTANCE,
prefixes: PREFIXES.LONG,
value: 1,
offset: 0
},
S: {
name: 'S',
base: BASE_UNITS.ELECTRIC_CONDUCTANCE,
prefixes: PREFIXES.SHORT,
value: 1,
offset: 0
},
// Magnetic flux
weber: {
name: 'weber',
base: BASE_UNITS.MAGNETIC_FLUX,
prefixes: PREFIXES.LONG,
value: 1,
offset: 0
},
Wb: {
name: 'Wb',
base: BASE_UNITS.MAGNETIC_FLUX,
prefixes: PREFIXES.SHORT,
value: 1,
offset: 0
},
// Magnetic flux density
tesla: {
name: 'tesla',
base: BASE_UNITS.MAGNETIC_FLUX_DENSITY,
prefixes: PREFIXES.LONG,
value: 1,
offset: 0
},
T: {
name: 'T',
base: BASE_UNITS.MAGNETIC_FLUX_DENSITY,
prefixes: PREFIXES.SHORT,
value: 1,
offset: 0
},
// Binary
b: {
name: 'b',
@ -2083,8 +2248,20 @@ function factory (type, config, load, typed) {
gradients: 'grad',
cycles: 'cycle',
joules: 'joule',
watts: 'watt',
BTUs: 'BTU',
amperes: 'ampere',
moles: 'mole'
coulombs: 'coulomb',
volts: 'volts',
ohms: 'ohm',
farads: 'farad',
webers: 'weber',
teslas: 'tesla',
electronvolts: 'electronvolt',
moles: 'mole'
};
/**
@ -2095,22 +2272,30 @@ function factory (type, config, load, typed) {
var UNIT_SYSTEMS = {
si: {
// Base units
NONE: {unit: UNIT_NONE, prefix: PREFIXES.NONE['']},
LENGTH: {unit: UNITS.m, prefix: PREFIXES.SHORT['']},
MASS: {unit: UNITS.g, prefix: PREFIXES.SHORT['k']},
TIME: {unit: UNITS.s, prefix: PREFIXES.SHORT['']},
CURRENT: {unit: UNITS.A, prefix: PREFIXES.SHORT['']},
TEMPERATURE: {unit: UNITS.K, prefix: PREFIXES.SHORT['']},
LUMINOUS_INTENSITY: {unit: UNITS.cd, prefix: PREFIXES.SHORT['']},
AMOUNT_OF_SUBSTANCE: {unit: UNITS.mol, prefix: PREFIXES.SHORT['']},
ANGLE: {unit: UNITS.rad, prefix: PREFIXES.SHORT['']},
BIT: {unit: UNITS.bit, prefix: PREFIXES.SHORT['']},
NONE: {unit: UNIT_NONE, prefix: PREFIXES.NONE['']},
LENGTH: {unit: UNITS.m, prefix: PREFIXES.SHORT['']},
MASS: {unit: UNITS.g, prefix: PREFIXES.SHORT['k']},
TIME: {unit: UNITS.s, prefix: PREFIXES.SHORT['']},
CURRENT: {unit: UNITS.A, prefix: PREFIXES.SHORT['']},
TEMPERATURE: {unit: UNITS.K, prefix: PREFIXES.SHORT['']},
LUMINOUS_INTENSITY: {unit: UNITS.cd, prefix: PREFIXES.SHORT['']},
AMOUNT_OF_SUBSTANCE: {unit: UNITS.mol, prefix: PREFIXES.SHORT['']},
ANGLE: {unit: UNITS.rad, prefix: PREFIXES.SHORT['']},
BIT: {unit: UNITS.bit, prefix: PREFIXES.SHORT['']},
// Derived units
FORCE: {unit: UNITS.N, prefix: PREFIXES.SHORT['']},
ENERGY: {unit: UNITS.J, prefix: PREFIXES.SHORT['']},
POWER: {unit: UNITS.W, prefix: PREFIXES.SHORT['']},
PRESSURE: {unit: UNITS.Pa, prefix: PREFIXES.SHORT['']},
FORCE: {unit: UNITS.N, prefix: PREFIXES.SHORT['']},
ENERGY: {unit: UNITS.J, prefix: PREFIXES.SHORT['']},
POWER: {unit: UNITS.W, prefix: PREFIXES.SHORT['']},
PRESSURE: {unit: UNITS.Pa, prefix: PREFIXES.SHORT['']},
ELECTRIC_CHARGE: {unit: UNITS.C, prefix: PREFIXES.SHORT['']},
ELECTRIC_CAPACITANCE: {unit: UNITS.F, prefix: PREFIXES.SHORT['']},
ELECTRIC_POTENTIAL: {unit: UNITS.V, prefix: PREFIXES.SHORT['']},
ELECTRIC_RESISTANCE: {unit: UNITS.ohm, prefix: PREFIXES.SHORT['']},
ELECTRIC_INDUCTANCE: {unit: UNITS.H, prefix: PREFIXES.SHORT['']},
ELECTRIC_CONDUCTANCE: {unit: UNITS.S, prefix: PREFIXES.SHORT['']},
MAGNETIC_FLUX: {unit: UNITS.Wb, prefix: PREFIXES.SHORT['']},
MAGNETIC_FLUX_DENSITY: {unit: UNITS.T, prefix: PREFIXES.SHORT['']}
}
};
@ -2120,6 +2305,8 @@ function factory (type, config, load, typed) {
UNIT_SYSTEMS.cgs.MASS = {unit: UNITS.g, prefix: PREFIXES.SHORT['']};
UNIT_SYSTEMS.cgs.FORCE = {unit: UNITS.dyn, prefix: PREFIXES.SHORT['']};
UNIT_SYSTEMS.cgs.ENERGY = {unit: UNITS.erg, prefix: PREFIXES.NONE['']};
// there are wholly 4 unique cgs systems for electricity and magnetism,
// so let's not worry about it unless somebody complains
UNIT_SYSTEMS.us = JSON.parse(JSON.stringify(UNIT_SYSTEMS.si));
UNIT_SYSTEMS.us.LENGTH = {unit: UNITS.ft, prefix: PREFIXES.NONE['']};

View File

@ -704,5 +704,17 @@ describe('unit', function() {
});
});
// TODO: test the value of each of the available units...
describe('UNITS', function() {
it('should be of the correct value and dimension', function() {
assert.equal(new Unit(1, 's A'), new Unit(1, 'C'));
assert.equal(new Unit(1, 'W/A'), new Unit(1, 'V'));
assert.equal(new Unit(1, 'V/A'), new Unit(1, 'ohm'));
assert.equal(new Unit(1, 'C/V'), new Unit(1, 'F'));
assert.equal(new Unit(1, 'J/A'), new Unit(1, 'Wb'));
assert.equal(new Unit(1, 'Wb/m^2'), new Unit(1, 'T'));
assert.equal(new Unit(1, 'Wb/A'), new Unit(1, 'H'));
assert.equal(new Unit(1, 'ohm^-1'), new Unit(1, 'S'));
assert.equal(new Unit(1, 'eV'), new Unit(1.602176565e-19, 'J'));
});
});
});