diff --git a/VERSION.txt b/VERSION.txt index 7c9c4fdb0..453a6881f 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -0.20260211.0 +0.20260226.0 diff --git a/src/sed/sedinstancetask.cpp b/src/sed/sedinstancetask.cpp index e529a982d..9ba421118 100644 --- a/src/sed/sedinstancetask.cpp +++ b/src/sed/sedinstancetask.cpp @@ -25,6 +25,18 @@ limitations under the License. namespace libOpenCOR { +#ifdef __EMSCRIPTEN__ +static emscripten::val toFloat64Array(const Doubles &data) +{ + auto view {emscripten::typed_memory_view(data.size(), data.data())}; + auto res {emscripten::val::global("Float64Array").new_(data.size())}; + + res.call("set", view); + + return res; +} +#endif + SedInstanceTaskPtr SedInstanceTask::Impl::create(const SedAbstractTaskPtr &pTask) { auto res {SedInstanceTaskPtr {new SedInstanceTask {pTask}}}; @@ -527,7 +539,7 @@ Doubles SedInstanceTask::voi() const #ifdef __EMSCRIPTEN__ emscripten::val SedInstanceTask::voiAsArray() const { - return emscripten::val::array(voi()); + return toFloat64Array(voi()); } #endif @@ -554,7 +566,7 @@ Doubles SedInstanceTask::state(size_t pIndex) const #ifdef __EMSCRIPTEN__ emscripten::val SedInstanceTask::stateAsArray(size_t pIndex) const { - return emscripten::val::array(state(pIndex)); + return toFloat64Array(state(pIndex)); } #endif @@ -581,7 +593,7 @@ Doubles SedInstanceTask::rate(size_t pIndex) const #ifdef __EMSCRIPTEN__ emscripten::val SedInstanceTask::rateAsArray(size_t pIndex) const { - return emscripten::val::array(rate(pIndex)); + return toFloat64Array(rate(pIndex)); } #endif @@ -608,7 +620,7 @@ Doubles SedInstanceTask::constant(size_t pIndex) const #ifdef __EMSCRIPTEN__ emscripten::val SedInstanceTask::constantAsArray(size_t pIndex) const { - return emscripten::val::array(constant(pIndex)); + return toFloat64Array(constant(pIndex)); } #endif @@ -635,7 +647,7 @@ Doubles SedInstanceTask::computedConstant(size_t pIndex) const #ifdef __EMSCRIPTEN__ emscripten::val SedInstanceTask::computedConstantAsArray(size_t pIndex) const { - return emscripten::val::array(computedConstant(pIndex)); + return toFloat64Array(computedConstant(pIndex)); } #endif @@ -662,7 +674,7 @@ Doubles SedInstanceTask::algebraicVariable(size_t pIndex) const #ifdef __EMSCRIPTEN__ emscripten::val SedInstanceTask::algebraicVariableAsArray(size_t pIndex) const { - return emscripten::val::array(algebraicVariable(pIndex)); + return toFloat64Array(algebraicVariable(pIndex)); } #endif diff --git a/tests/bindings/javascript/res/index.html b/tests/bindings/javascript/res/index.html index f952de655..22454274d 100644 --- a/tests/bindings/javascript/res/index.html +++ b/tests/bindings/javascript/res/index.html @@ -47,13 +47,14 @@
- Choose a CellML / SED-ML file or a COMBINE archive, + Choose a CellML / SED-ML file or a COMBINE archive, - or drag and drop such a file here. + or drag and drop such a file here.

- Note:only CellML files with no imports can (currently) be processed. + Note: + only CellML files with no imports can (currently) be processed.

@@ -95,9 +96,7 @@ -
- -
+
diff --git a/tests/bindings/javascript/sed.coverage.test.js b/tests/bindings/javascript/sed.coverage.test.js index ad4ba922a..673e905f5 100644 --- a/tests/bindings/javascript/sed.coverage.test.js +++ b/tests/bindings/javascript/sed.coverage.test.js @@ -22,6 +22,7 @@ import * as utils from './utils.js'; import { assertIssues, assertValues } from './utils.js'; const loc = await libOpenCOR(); +const emptyFloat64Array = new Float64Array(); test.describe('Sed coverage tests', () => { test.beforeEach(() => { @@ -377,15 +378,15 @@ test.describe('Sed coverage tests', () => { assert.strictEqual(instance.task(1), null); assert.strictEqual(instanceTask.voi.size(), 0); - assert.deepStrictEqual(instanceTask.voiAsArray, []); + assert.deepStrictEqual(instanceTask.voiAsArray, emptyFloat64Array); assert.strictEqual(instanceTask.voiName, 'environment/time'); assert.strictEqual(instanceTask.voiUnit, 'millisecond'); assert.strictEqual(instanceTask.stateCount, 4); assert.strictEqual(instanceTask.state(0).size(), 0); - assert.deepStrictEqual(instanceTask.stateAsArray(0), []); + assert.deepStrictEqual(instanceTask.stateAsArray(0), emptyFloat64Array); assert.strictEqual(instanceTask.state(4).size(), 0); - assert.deepStrictEqual(instanceTask.stateAsArray(4), []); + assert.deepStrictEqual(instanceTask.stateAsArray(4), emptyFloat64Array); assert.strictEqual(instanceTask.stateName(0), 'membrane/V'); assert.strictEqual(instanceTask.stateName(4), ''); assert.strictEqual(instanceTask.stateUnit(0), 'millivolt'); @@ -393,9 +394,9 @@ test.describe('Sed coverage tests', () => { assert.strictEqual(instanceTask.rateCount, 4); assert.strictEqual(instanceTask.rate(0).size(), 0); - assert.deepStrictEqual(instanceTask.rateAsArray(0), []); + assert.deepStrictEqual(instanceTask.rateAsArray(0), emptyFloat64Array); assert.strictEqual(instanceTask.rate(4).size(), 0); - assert.deepStrictEqual(instanceTask.rateAsArray(4), []); + assert.deepStrictEqual(instanceTask.rateAsArray(4), emptyFloat64Array); assert.strictEqual(instanceTask.rateName(0), "membrane/V'"); assert.strictEqual(instanceTask.rateName(4), ''); assert.strictEqual(instanceTask.rateUnit(0), 'millivolt/millisecond'); @@ -403,9 +404,9 @@ test.describe('Sed coverage tests', () => { assert.strictEqual(instanceTask.constantCount, 5); assert.strictEqual(instanceTask.constant(0).size(), 0); - assert.deepStrictEqual(instanceTask.constantAsArray(0), []); + assert.deepStrictEqual(instanceTask.constantAsArray(0), emptyFloat64Array); assert.strictEqual(instanceTask.constant(5).size(), 0); - assert.deepStrictEqual(instanceTask.constantAsArray(5), []); + assert.deepStrictEqual(instanceTask.constantAsArray(5), emptyFloat64Array); assert.strictEqual(instanceTask.constantName(0), 'membrane/Cm'); assert.strictEqual(instanceTask.constantName(5), ''); assert.strictEqual(instanceTask.constantUnit(0), 'microF_per_cm2'); @@ -413,9 +414,9 @@ test.describe('Sed coverage tests', () => { assert.strictEqual(instanceTask.computedConstantCount, 3); assert.strictEqual(instanceTask.computedConstant(0).size(), 0); - assert.deepStrictEqual(instanceTask.computedConstantAsArray(0), []); + assert.deepStrictEqual(instanceTask.computedConstantAsArray(0), emptyFloat64Array); assert.strictEqual(instanceTask.computedConstant(3).size(), 0); - assert.deepStrictEqual(instanceTask.computedConstantAsArray(3), []); + assert.deepStrictEqual(instanceTask.computedConstantAsArray(3), emptyFloat64Array); assert.strictEqual(instanceTask.computedConstantName(0), 'leakage_current/E_L'); assert.strictEqual(instanceTask.computedConstantName(3), ''); assert.strictEqual(instanceTask.computedConstantUnit(0), 'millivolt'); @@ -423,9 +424,9 @@ test.describe('Sed coverage tests', () => { assert.strictEqual(instanceTask.algebraicVariableCount, 10); assert.strictEqual(instanceTask.algebraicVariable(0).size(), 0); - assert.deepStrictEqual(instanceTask.algebraicVariableAsArray(0), []); + assert.deepStrictEqual(instanceTask.algebraicVariableAsArray(0), emptyFloat64Array); assert.strictEqual(instanceTask.algebraicVariable(10).size(), 0); - assert.deepStrictEqual(instanceTask.algebraicVariableAsArray(10), []); + assert.deepStrictEqual(instanceTask.algebraicVariableAsArray(10), emptyFloat64Array); assert.strictEqual(instanceTask.algebraicVariableName(0), 'membrane/i_Stim'); assert.strictEqual(instanceTask.algebraicVariableName(10), ''); assert.strictEqual(instanceTask.algebraicVariableUnit(0), 'microA_per_cm2'); @@ -452,19 +453,19 @@ test.describe('Sed coverage tests', () => { const instanceTask = instance.tasks.get(0); assert.strictEqual(instanceTask.voi.size(), 0); - assert.deepStrictEqual(instanceTask.voiAsArray, []); + assert.deepStrictEqual(instanceTask.voiAsArray, emptyFloat64Array); assert.strictEqual(instanceTask.voiName, ''); assert.strictEqual(instanceTask.voiUnit, ''); assert.strictEqual(instanceTask.stateCount, 0); assert.strictEqual(instanceTask.state(0).size(), 0); - assert.deepStrictEqual(instanceTask.stateAsArray(0), []); + assert.deepStrictEqual(instanceTask.stateAsArray(0), emptyFloat64Array); assert.strictEqual(instanceTask.stateName(0), ''); assert.strictEqual(instanceTask.stateUnit(0), ''); assert.strictEqual(instanceTask.rateCount, 0); assert.strictEqual(instanceTask.rate(0).size(), 0); - assert.deepStrictEqual(instanceTask.rateAsArray(0), []); + assert.deepStrictEqual(instanceTask.rateAsArray(0), emptyFloat64Array); assert.strictEqual(instanceTask.rateName(0), ''); assert.strictEqual(instanceTask.rateUnit(0), ''); });