Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion VERSION.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.20260211.0
0.20260226.0
24 changes: 18 additions & 6 deletions src/sed/sedinstancetask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<void>("set", view);

return res;
}
#endif

SedInstanceTaskPtr SedInstanceTask::Impl::create(const SedAbstractTaskPtr &pTask)
{
auto res {SedInstanceTaskPtr {new SedInstanceTask {pTask}}};
Expand Down Expand Up @@ -527,7 +539,7 @@ Doubles SedInstanceTask::voi() const
#ifdef __EMSCRIPTEN__
emscripten::val SedInstanceTask::voiAsArray() const
{
return emscripten::val::array(voi());
return toFloat64Array(voi());
}
#endif

Expand All @@ -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

Expand All @@ -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

Expand All @@ -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

Expand All @@ -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

Expand All @@ -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

Expand Down
11 changes: 5 additions & 6 deletions tests/bindings/javascript/res/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,14 @@
<div class="drop-area-div">
<i class="far fa-images"></i>

<span>Choose a CellML / SED-ML file or a COMBINE archive, </span>
<span>Choose a CellML / SED-ML file or a COMBINE archive,</span>

<span>or drag and drop such a file here. </span>
<span>or drag and drop such a file here.</span>

<p class="note">
<small>
<span class="bold">Note:</span>only CellML files with no imports can (currently) be processed.
<span class="bold">Note:</span>
only CellML files with no imports can (currently) be processed.
</small>
</p>
</div>
Expand Down Expand Up @@ -95,9 +96,7 @@
<span class="input-group-text" id="yAxisUnit"></span>
</div>
</div>
<div>
<button type="button" class="btn btn-secondary mb-3 run-button w-100" id="run">Run</button>
</div>
<div><button type="button" class="btn btn-secondary mb-3 run-button w-100" id="run">Run</button></div>
</div>
</div>

Expand Down
29 changes: 15 additions & 14 deletions tests/bindings/javascript/sed.coverage.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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(() => {
Expand Down Expand Up @@ -377,55 +378,55 @@ 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');
assert.strictEqual(instanceTask.stateUnit(4), '');

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');
assert.strictEqual(instanceTask.rateUnit(4), '');

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');
assert.strictEqual(instanceTask.constantUnit(5), '');

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');
assert.strictEqual(instanceTask.computedConstantUnit(3), '');

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');
Expand All @@ -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), '');
});
Expand Down
Loading