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
3 changes: 3 additions & 0 deletions .github/workflows/jsroot-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ jobs:
node demo/node/file_proxy.js buffer ./hsimple.root
node demo/node/rntuple_buffer_test.js
node demo/node/rntuple_test.js demo/node/rntuple_test.root
node demo/node/rntuple_bitset_test.js demo/node/rntuple_bitset_test.root
node demo/node/tree_int64_test.js demo/node/tree_int64_test.root
node demo/node/tree_draw_range.js demo/node/rntuple_test.root
node demo/node/rntuple_test32.js demo/node/rntuple_test32.root demo/node/rntuple_test32.json
Expand Down Expand Up @@ -187,6 +188,7 @@ jobs:
node demo/node/file_proxy.js buffer ./hsimple.root
node demo/node/rntuple_buffer_test.js
node demo/node/rntuple_test.js demo/node/rntuple_test.root
node demo/node/rntuple_bitset_test.js demo/node/rntuple_bitset_test.root
node demo/node/tree_int64_test.js demo/node/tree_int64_test.root
node demo/node/tree_draw_range.js demo/node/rntuple_test.root
node demo/node/rntuple_test32.js demo/node/rntuple_test32.root demo/node/rntuple_test32.json
Expand Down Expand Up @@ -242,6 +244,7 @@ jobs:
node demo/node/file_proxy.js buffer ./hsimple.root
node demo/node/rntuple_buffer_test.js
node demo/node/rntuple_test.js demo/node/rntuple_test.root
node demo/node/rntuple_bitset_test.js demo/node/rntuple_bitset_test.root
node demo/node/tree_int64_test.js demo/node/tree_int64_test.root
node demo/node/tree_draw_range.js demo/node/rntuple_test.root
node demo/node/rntuple_test32.js demo/node/rntuple_test32.root demo/node/rntuple_test32.json
Expand Down
30 changes: 30 additions & 0 deletions demo/node/rntuple_bitset_test.cxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// macro to create rntuple_bitset_test.root used by rntuple_bitset_test.js
// root -l -b -q rntuple_bitset_test.cxx

#include <ROOT/RNTupleModel.hxx>
#include <ROOT/RNTupleWriter.hxx>

#include <bitset>

void rntuple_bitset_test()
{
auto model = ROOT::RNTupleModel::Create();

auto Bitset32 = model->MakeField<std::bitset<32>>("Bitset32");
auto Bitset48 = model->MakeField<std::bitset<48>>("Bitset48");

auto writer = ROOT::RNTupleWriter::Recreate(std::move(model), "Data", "rntuple_bitset_test.root");

for (int i = 0; i < 10; i++) {
Bitset32->reset();
Bitset32->set(i);
Bitset32->set(31 - i);

Bitset48->reset();
Bitset48->set(i);
Bitset48->set(30 + i);
Bitset48->set(47);

writer->Fill();
}
}
50 changes: 50 additions & 0 deletions demo/node/rntuple_bitset_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { version, openFile, TSelector } from 'jsroot';
import { rntupleProcess } from 'jsroot/rntuple';

// check reading of std::bitset fields with more than 31 bits, file created with rntuple_bitset_test.cxx

console.log(`JSROOT version ${version}`);

let filename = './rntuple_bitset_test.root',
any_error = false;

if (process?.argv && process.argv[2])
filename = process.argv[2];

const file = await openFile(filename),
rntuple = await file.readObject('Data'),
selector = new TSelector();

let nentries = 0;

selector.addBranch('Bitset32');
selector.addBranch('Bitset48');

selector.Process = function(entry) {
nentries++;
const expected = {
Bitset32: 2 ** entry + 2 ** (31 - entry),
Bitset48: 2 ** entry + 2 ** (30 + entry) + 2 ** 47
};
for (const name in expected) {
const value = this.tgtobj[name];
if (value !== expected[name]) {
any_error = true;
console.error(`FAILURE: ${name} at entry ${entry} expected ${expected[name]} but got ${value}`);
} else
console.log(`OK: ${name} at entry ${entry} = ${value}`);
}
};

await rntupleProcess(rntuple, selector);

if (nentries !== 10) {
any_error = true;
console.error(`FAILURE: expected 10 entries but got ${nentries}`);
}

if (any_error) {
console.error('\nFAILURE when reading std::bitset values');
process.exit(1);
} else
console.log('\nTest OK');
Binary file added demo/node/rntuple_bitset_test.root
Binary file not shown.
2 changes: 1 addition & 1 deletion modules/rntuple.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -1210,7 +1210,7 @@ class BitsetReaderItem extends ReaderItem {
if (this.bigint)
res |= (1n << BigInt(len));
else
res |= 1 << len;
res += 2 ** len;
}
len++;
}
Expand Down
Loading