@@ -358,6 +358,28 @@ TEST(RHistEngine, FillTupleWeightInvalidNumberOfArguments)
358358 EXPECT_THROW (engine2.Fill (std::make_tuple (1 , 2 , 3 ), RWeight (1 )), std::invalid_argument);
359359}
360360
361+ TEST (RHistEngine, Scale)
362+ {
363+ static constexpr std::size_t Bins = 20 ;
364+ const RRegularAxis axis (Bins, {0 , Bins});
365+ RHistEngine<float > engine ({axis});
366+
367+ engine.Fill (-100 , RWeight (0.25 ));
368+ for (std::size_t i = 0 ; i < Bins; i++) {
369+ engine.Fill (i, RWeight (0.1 + i * 0.03 ));
370+ }
371+ engine.Fill (100 , RWeight (0.75 ));
372+
373+ static constexpr double Factor = 0.8 ;
374+ engine.Scale (Factor);
375+
376+ EXPECT_FLOAT_EQ (engine.GetBinContent (RBinIndex::Underflow ()), Factor * 0.25 );
377+ for (auto index : axis.GetNormalRange ()) {
378+ EXPECT_FLOAT_EQ (engine.GetBinContent (index), Factor * (0.1 + index.GetIndex () * 0.03 ));
379+ }
380+ EXPECT_FLOAT_EQ (engine.GetBinContent (RBinIndex::Overflow ()), Factor * 0.75 );
381+ }
382+
361383TEST (RHistEngine_RBinWithError, Add)
362384{
363385 static constexpr std::size_t Bins = 20 ;
@@ -415,3 +437,24 @@ TEST(RHistEngine_RBinWithError, FillWeight)
415437 EXPECT_FLOAT_EQ (bin.fSum2 , weight * weight);
416438 }
417439}
440+
441+ TEST (RHistEngine_RBinWithError, Scale)
442+ {
443+ static constexpr std::size_t Bins = 20 ;
444+ const RRegularAxis axis (Bins, {0 , Bins});
445+ RHistEngine<RBinWithError> engine ({axis});
446+
447+ for (std::size_t i = 0 ; i < Bins; i++) {
448+ engine.Fill (i, RWeight (0.1 + i * 0.03 ));
449+ }
450+
451+ static constexpr double Factor = 0.8 ;
452+ engine.Scale (Factor);
453+
454+ for (auto index : axis.GetNormalRange ()) {
455+ auto &bin = engine.GetBinContent (index);
456+ double weight = Factor * (0.1 + index.GetIndex () * 0.03 );
457+ EXPECT_FLOAT_EQ (bin.fSum , weight);
458+ EXPECT_FLOAT_EQ (bin.fSum2 , weight * weight);
459+ }
460+ }
0 commit comments