+TEST_F(DensityFittingOptionsTest, CanConvertGroupStringToIndexGroup)
+{
+ setFromMdpValues(densityFittingSetActiveAsMdpValues());
+
+ const auto indexGroupAndNames = genericIndexGroupsAndNames();
+ densityFittingOptions_.setFitGroupIndices(indexGroupAndNames);
+
+ EXPECT_EQ(1, densityFittingOptions_.buildParameters().indices_.size());
+ EXPECT_EQ(1, densityFittingOptions_.buildParameters().indices_[0]);
+}
+
+TEST_F(DensityFittingOptionsTest, InternalsToKvt)
+{
+ // stores the default internal options
+ DensityFittingOptions densityFittingOptions;
+ KeyValueTreeBuilder builder;
+ densityFittingOptions.writeInternalParametersToKvt(builder.rootObject());
+ const auto kvtTree = builder.build();
+ EXPECT_TRUE(kvtTree.keyExists("density-guided-simulation-group"));
+ EXPECT_TRUE(kvtTree["density-guided-simulation-group"].isArray());
+ auto storedIndex = kvtTree["density-guided-simulation-group"].asArray().values();
+
+ EXPECT_EQ(0, storedIndex.size());
+}
+
+TEST_F(DensityFittingOptionsTest, KvtToInternal)
+{
+ setFromMdpValues(densityFittingSetActiveAsMdpValues());
+
+ KeyValueTreeBuilder builder;
+ auto addedArray = builder.rootObject().addUniformArray<index>("density-guided-simulation-group");
+ addedArray.addValue(1);
+ addedArray.addValue(15);
+ const auto tree = builder.build();
+
+ densityFittingOptions_.readInternalParametersFromKvt(tree);
+
+ EXPECT_EQ(2, densityFittingOptions_.buildParameters().indices_.size());
+ EXPECT_EQ(1, densityFittingOptions_.buildParameters().indices_[0]);
+ EXPECT_EQ(15, densityFittingOptions_.buildParameters().indices_[1]);
+}
+
+TEST_F(DensityFittingOptionsTest, RoundTripForInternalsIsIdempotent)
+{
+ setFromMdpValues(densityFittingSetActiveAsMdpValues());
+ {
+ const IndexGroupsAndNames indexGroupAndNames = genericIndexGroupsAndNames();
+ densityFittingOptions_.setFitGroupIndices(indexGroupAndNames);
+ }
+
+ DensityFittingParameters parametersBefore = densityFittingOptions_.buildParameters();
+
+ KeyValueTreeBuilder builder;
+ densityFittingOptions_.writeInternalParametersToKvt(builder.rootObject());
+ const auto inputTree = builder.build();
+
+ mangleInternalParameters();
+
+ DensityFittingParameters parametersAfter = densityFittingOptions_.buildParameters();
+ EXPECT_NE(parametersBefore, parametersAfter);
+
+ densityFittingOptions_.readInternalParametersFromKvt(inputTree);
+
+ parametersAfter = densityFittingOptions_.buildParameters();
+ EXPECT_EQ(parametersBefore, parametersAfter);
+}
+