Skip to content

Commit 4eb43f6

Browse files
committed
Use fix for the math.js counterpart of trunc
1 parent db1895b commit 4eb43f6

8 files changed

Lines changed: 16 additions & 11 deletions

File tree

src/core/propertyUtils/equationConversion.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ const FN1 = {
9292
round: 'round',
9393
sign: 'sign',
9494
sgn: 'sign',
95-
trunc: 'trunc',
95+
trunc: 'fix',
9696
abs: 'abs'
9797
};
9898

@@ -480,7 +480,7 @@ class TexExprParser {
480480
if (cmd === 'mathrm') {
481481
const raw = this.readBraceGroupRaw().trim();
482482
if (raw !== 'trunc') this.throwUnexpected();
483-
return this.parseFnCall('trunc', 'trunc');
483+
return this.parseFnCall('fix', 'trunc');
484484
}
485485

486486
if (Object.prototype.hasOwnProperty.call(GREEK_SYMBOL, cmd)) {
@@ -678,7 +678,7 @@ export function mathJSToLatex(mathJSStr) {
678678
return '\\operatorname{floor}\\left(' + args[0].toTex(options) + '\\right)';
679679
case 'ceil':
680680
return '\\operatorname{ceil}\\left(' + args[0].toTex(options) + '\\right)';
681-
case 'trunc':
681+
case 'fix':
682682
return '\\operatorname{trunc}\\left(' + args[0].toTex(options) + '\\right)';
683683
case 'round':
684684
return '\\operatorname{round}\\left(' + args[0].toTex(options) + '\\right)';

src/core/sceneObjs/BaseCustomSurface.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ import Simulator from '../Simulator.js';
4545
class BaseCustomSurface extends BaseSceneObj {
4646

4747
static getPropertySchema(objData, scene) {
48-
const outRaysInfo = '<ul><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.mathjs') + '<br><code>+ - * / ^ sqrt sin cos tan sec csc cot sinh cosh tanh log exp asin acos atan asinh acosh atanh floor round ceil max min abs sign</code></li><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.customFunctions') + '</li><li>' + i18next.t('simulator:sceneObjs.BaseCustomSurface.info.angles', { theta_0: 'θ<sub>0</sub> (<code>theta_0</code>)', theta_j: 'θ<sub>j</sub>' }) + '</li><li>' + i18next.t('simulator:sceneObjs.BaseCustomSurface.info.brightnesses', { P_0: 'P<sub>0</sub> (<code>P_0</code>)', P_j: 'P<sub>j</sub>' }) + '</li><li>' + i18next.t('simulator:sceneObjs.BaseCustomSurface.info.previousFormulas') + '</li><li>' + i18next.t('simulator:sceneObjs.BaseCustomSurface.info.otherParams', { lambda: '<code>lambda</code>', p: '<code>p</code>' }) + '</li><li>' + i18next.t(`simulator:sceneObjs.${objData.type}.info.incidentPos`, { t: '<code>t</code>' }) + '</li><li>' + i18next.t('simulator:sceneObjs.BaseCustomSurface.info.coating', { n_0: '<code>n_0</code>', n_1: '<code>n_1</code>' }) + '</li><li>' + i18next.t('simulator:sceneObjs.BaseCustomSurface.info.twoSides') + '</li></ul>';
48+
const outRaysInfo = '<ul><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.mathjs') + '<br><code>+ - * / ^ sqrt sin cos tan sec csc cot sinh cosh tanh log exp asin acos atan asinh acosh atanh floor round ceil fix max min abs sign</code></li><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.customFunctions') + '</li><li>' + i18next.t('simulator:sceneObjs.BaseCustomSurface.info.angles', { theta_0: 'θ<sub>0</sub> (<code>theta_0</code>)', theta_j: 'θ<sub>j</sub>' }) + '</li><li>' + i18next.t('simulator:sceneObjs.BaseCustomSurface.info.brightnesses', { P_0: 'P<sub>0</sub> (<code>P_0</code>)', P_j: 'P<sub>j</sub>' }) + '</li><li>' + i18next.t('simulator:sceneObjs.BaseCustomSurface.info.previousFormulas') + '</li><li>' + i18next.t('simulator:sceneObjs.BaseCustomSurface.info.otherParams', { lambda: '<code>lambda</code>', p: '<code>p</code>' }) + '</li><li>' + i18next.t(`simulator:sceneObjs.${objData.type}.info.incidentPos`, { t: '<code>t</code>' }) + '</li><li>' + i18next.t('simulator:sceneObjs.BaseCustomSurface.info.coating', { n_0: '<code>n_0</code>', n_1: '<code>n_1</code>' }) + '</li><li>' + i18next.t('simulator:sceneObjs.BaseCustomSurface.info.twoSides') + '</li></ul>';
4949

5050
return [
5151
...super.getPropertySchema(objData, scene),

src/core/sceneObjs/BaseGrinGlass.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class BaseGrinGlass extends BaseGlass {
5353
static getPropertySchema(objData, scene) {
5454
const refIndexFnInfo = '<ul><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.mathjs') + '<br><code>+ - * / ^ sqrt sin cos tan sec csc cot sinh cosh tanh log asin acos atan asinh acosh atanh</code></li><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.customFunctions') + '</li><li>' + i18next.t('simulator:sceneObjs.BaseGrinGlass.refIndexFnInfo.lambda', { lambda: '<code>lambda</code>' }) + '</li><li>' + i18next.t('simulator:sceneObjs.BaseGrinGlass.refIndexFnInfo.diff') + '</li></ul>';
5555

56-
const absorptionFnInfo = '<ul><li>' + i18next.t('simulator:sceneObjs.BaseGrinGlass.absorptionFnInfo.absorption') + '</li><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.mathjs') + '<br><code>+ - * / ^ sqrt sin cos tan sec csc cot sinh cosh tanh log exp asin acos atan asinh acosh atanh floor round ceil max min abs sign</code></li><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.customFunctions') + '</li></ul>';
56+
const absorptionFnInfo = '<ul><li>' + i18next.t('simulator:sceneObjs.BaseGrinGlass.absorptionFnInfo.absorption') + '</li><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.mathjs') + '<br><code>+ - * / ^ sqrt sin cos tan sec csc cot sinh cosh tanh log exp asin acos atan asinh acosh atanh floor round ceil fix max min abs sign</code></li><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.customFunctions') + '</li></ul>';
5757

5858
const intersectTolInfo = '<p>' + i18next.t(`simulator:sceneObjs.${objData.type}.epsInfo.units`) + '</p><p>' + i18next.t(`simulator:sceneObjs.${objData.type}.epsInfo.functions`) + '</p>';
5959

src/core/sceneObjs/ParamCurveObjMixin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export function curveTypePropertyInfoHtml() {
5555
const ParamCurveObjMixin = Base => class extends Base {
5656

5757
static getPropertySchema(objData, scene) {
58-
const info = '<ul><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.mathjs') + '<br><code>+ - * / ^ sqrt sin cos tan sec csc cot sinh cosh tanh log exp asin acos atan asinh acosh atanh floor round ceil max min abs sign</code></li><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.customFunctions') + '</li></ul>';
58+
const info = '<ul><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.mathjs') + '<br><code>+ - * / ^ sqrt sin cos tan sec csc cot sinh cosh tanh log exp asin acos atan asinh acosh atanh floor round ceil fix max min abs sign</code></li><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.customFunctions') + '</li></ul>';
5959
const curveTypeOptions = {
6060
polygonal: i18next.t('simulator:sceneObjs.ParamCurveObjMixin.curveTypes.polygonal'),
6161
smoothNormal: i18next.t('simulator:sceneObjs.ParamCurveObjMixin.curveTypes.smoothNormal'),

src/core/sceneObjs/glass/CustomGlass.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class CustomGlass extends LineObjMixin(BaseGlass) {
7979
}
8080

8181
static getPropertySchema(objData, scene) {
82-
const info = '<ul><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.mathjs') + '<br><code>+ - * / ^ sqrt sin cos tan sec csc cot sinh cosh tanh log exp asin acos atan asinh acosh atanh floor round ceil max min abs sign</code></li><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.customFunctions') + '</li></ul>';
82+
const info = '<ul><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.mathjs') + '<br><code>+ - * / ^ sqrt sin cos tan sec csc cot sinh cosh tanh log exp asin acos atan asinh acosh atanh floor round ceil fix max min abs sign</code></li><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.customFunctions') + '</li></ul>';
8383
const curveTypeOptions = {
8484
polygonal: i18next.t('simulator:sceneObjs.ParamCurveObjMixin.curveTypes.polygonal'),
8585
smoothNormal: i18next.t('simulator:sceneObjs.ParamCurveObjMixin.curveTypes.smoothNormal'),

src/core/sceneObjs/mirror/CustomMirror.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class CustomMirror extends LineObjMixin(BaseFilter) {
7979
}
8080

8181
static getPropertySchema(objData, scene) {
82-
const eqnInfo = '<ul><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.mathjs') + '<br><code>+ - * / ^ sqrt sin cos tan sec csc cot sinh cosh tanh log exp asin acos atan asinh acosh atanh floor round ceil max min abs sign</code></li><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.customFunctions') + '</li></ul>';
82+
const eqnInfo = '<ul><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.mathjs') + '<br><code>+ - * / ^ sqrt sin cos tan sec csc cot sinh cosh tanh log exp asin acos atan asinh acosh atanh floor round ceil fix max min abs sign</code></li><li>' + i18next.t('simulator:sceneObjs.common.eqnInfo.customFunctions') + '</li></ul>';
8383
const curveTypeOptions = {
8484
polygonal: i18next.t('simulator:sceneObjs.ParamCurveObjMixin.curveTypes.polygonal'),
8585
smoothNormal: i18next.t('simulator:sceneObjs.ParamCurveObjMixin.curveTypes.smoothNormal'),

src/core/sceneObjs/special/ModuleObj.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -677,7 +677,7 @@ class ModuleObj extends BaseSceneObj {
677677
case 'ceil':
678678
return '\\operatorname{ceil}\\left(' + args[0].toTex(options) + '\\right)';
679679

680-
case 'trunc':
680+
case 'fix':
681681
return '\\operatorname{trunc}\\left(' + args[0].toTex(options) + '\\right)';
682682

683683
case 'round':

test/propertyUtils/equationConversion.test.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ describe('equationConversion', () => {
124124
['sign(x)', '\\operatorname{sign}'],
125125
['max(x,y)', '\\max'],
126126
['min(x,y)', '\\min'],
127-
['trunc(x)', '\\operatorname{trunc}']
127+
['fix(x)', '\\operatorname{trunc}']
128128
];
129129

130130
it.each(cases)('%s contains %s', (expr, needle) => {
@@ -173,7 +173,8 @@ describe('equationConversion', () => {
173173
'acos(x)',
174174
'atan(x)',
175175
'abs(x)',
176-
'x + y'
176+
'x + y',
177+
'fix(x)'
177178
];
178179

179180
it.each(stable)('%s', (expr) => {
@@ -274,6 +275,10 @@ describe('equationConversion', () => {
274275
expect(latexToMathJS(mathJSToLatex('sign(x)'))).toContain('sign');
275276
});
276277

278+
it('maps \\operatorname{trunc} from MathQuill to math.js fix', () => {
279+
expect(latexToMathJS(String.raw`\operatorname{trunc}\left(x\right)`)).toBe('fix(x)');
280+
});
281+
277282
it('round-trips exp / max / min from mathJSToLatex', () => {
278283
expect(latexToMathJS(mathJSToLatex('exp(x)'))).toContain('exp');
279284
expect(latexToMathJS(mathJSToLatex('max(x,y)'))).toContain('max');

0 commit comments

Comments
 (0)