diff --git a/.github/workflows/jsroot-ci.yml b/.github/workflows/jsroot-ci.yml index b229f0375..82eb99245 100644 --- a/.github/workflows/jsroot-ci.yml +++ b/.github/workflows/jsroot-ci.yml @@ -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/tree_int64_test.js demo/node/tree_int64_test.root node demo/node/rntuple_test32.js demo/node/rntuple_test32.root demo/node/rntuple_test32.json tests_ubuntu: @@ -185,6 +186,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/tree_int64_test.js demo/node/tree_int64_test.root node demo/node/rntuple_test32.js demo/node/rntuple_test32.root demo/node/rntuple_test32.json @@ -238,5 +240,6 @@ 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/tree_int64_test.js demo/node/tree_int64_test.root node demo/node/rntuple_test32.js demo/node/rntuple_test32.root demo/node/rntuple_test32.json diff --git a/demo/node/tree_int64_test.cxx b/demo/node/tree_int64_test.cxx new file mode 100644 index 000000000..a42dba445 --- /dev/null +++ b/demo/node/tree_int64_test.cxx @@ -0,0 +1,20 @@ +// macro to create tree_int64_test.root used by tree_int64_test.js +// root -l -b -q tree_int64_test.cxx + +#include +#include + +void tree_int64_test() +{ + TFile f("tree_int64_test.root", "RECREATE"); + TTree t("t", "Long64_t values"); + Long64_t v; + t.Branch("v", &v, "v/L"); + for (Long64_t x : {0LL, 1LL, -1LL, -2LL, -2147483648LL, -4294967296LL, -4294967297LL, -5000000000LL, + -9007199254740991LL, -9007199254740992LL, (Long64_t) 0x8000000000000000ULL, + 4294967296LL, 9007199254740991LL, 0x7FFFFFFFFFFFFFFFLL}) { + v = x; + t.Fill(); + } + t.Write(); +} diff --git a/demo/node/tree_int64_test.js b/demo/node/tree_int64_test.js new file mode 100644 index 000000000..bbde113f6 --- /dev/null +++ b/demo/node/tree_int64_test.js @@ -0,0 +1,46 @@ +import { version, openFile } from 'jsroot'; +import { TSelector, treeProcess } from 'jsroot/tree'; + +// check reading of Long64_t branch, file created with tree_int64_test.cxx + +console.log(`JSROOT version ${version}`); + +const expected = [0n, 1n, -1n, -2n, -2147483648n, -4294967296n, -4294967297n, -5000000000n, + -9007199254740991n, -9007199254740992n, -9223372036854775808n, + 4294967296n, 9007199254740991n, 9223372036854775807n]; + +let filename = './tree_int64_test.root', + any_error = false; + +if (process?.argv && process.argv[2]) + filename = process.argv[2]; + +const file = await openFile(filename), + tree = await file.readObject('t'), + values = [], + selector = new TSelector(); + +selector.addBranch('v'); +selector.Process = function() { values.push(this.tgtobj.v); }; + +await treeProcess(tree, selector); + +if (values.length !== expected.length) { + any_error = true; + console.error(`FAILURE: expected ${expected.length} entries but got ${values.length}`); +} + +expected.forEach((exp, i) => { + const val = values[i]; + if (val === undefined || BigInt(val) !== exp) { + any_error = true; + console.error(`FAILURE: entry ${i} expected ${exp} but got ${val}`); + } else + console.log(`OK: entry ${i} = ${val}`); +}); + +if (any_error) { + console.error('\nFAILURE when reading Long64_t values'); + process.exit(1); +} else + console.log('\nTest OK'); diff --git a/demo/node/tree_int64_test.root b/demo/node/tree_int64_test.root new file mode 100644 index 000000000..518292f05 Binary files /dev/null and b/demo/node/tree_int64_test.root differ