diff --git a/unittest/formats/test_dump_atom.cpp b/unittest/formats/test_dump_atom.cpp index 0140b1a9e4..3eea4c2746 100644 --- a/unittest/formats/test_dump_atom.cpp +++ b/unittest/formats/test_dump_atom.cpp @@ -699,6 +699,66 @@ TEST_F(DumpAtomTest, binary_write_dump) delete_file(dump_file); } +TEST_F(DumpAtomTest, frequency) +{ + auto dump_file = dump_filename("frequency"); + BEGIN_HIDE_OUTPUT(); + command("dump id all atom 5 " + dump_file); + command("run 15 post no"); + command("run 12 post no"); + END_HIDE_OUTPUT(); + + // NOTE: must reset to current timestep (27) to avoid unexpected issues with following + TEST_FAILURE(".*ERROR: Cannot reset timestep with active dump - must undump first.*", + command("reset_timestep 27");); + + BEGIN_HIDE_OUTPUT(); + command("run 3 post no"); + command("undump id"); + command("reset_timestep 5"); + command("dump id all atom 10 " + dump_file); + command("dump_modify id append yes"); + command("run 20 post no"); + command("undump id"); + END_HIDE_OUTPUT(); + + std::vector expected, values; + values = extract_items(dump_file, "TIMESTEP"); + expected = {"0", "5", "10", "15", "20", "25", "30", "10", "20"}; + ASSERT_EQ(values.size(), expected.size()); + for (int i = 0; i < expected.size(); ++i) + ASSERT_THAT(values[i], Eq(expected[i])); + + BEGIN_HIDE_OUTPUT(); + command("reset_timestep 10"); + command("dump id all atom 10 " + dump_file); + command("run 20 post no"); + command("undump id"); + END_HIDE_OUTPUT(); + + values = extract_items(dump_file, "TIMESTEP"); + expected = {"10", "20", "30"}; + ASSERT_EQ(values.size(), expected.size()); + for (int i = 0; i < expected.size(); ++i) + ASSERT_THAT(values[i], Eq(expected[i])); + + BEGIN_HIDE_OUTPUT(); + command("reset_timestep 0"); + command("dump id all atom 10 " + dump_file); + command("minimize 0.0 0.0 15 30"); + command("run 20 post no"); + command("undump id"); + END_HIDE_OUTPUT(); + + values = extract_items(dump_file, "TIMESTEP"); + expected = {"0", "10", "15", "20", "30"}; + ASSERT_EQ(values.size(), expected.size()); + for (int i = 0; i < expected.size(); ++i) + ASSERT_THAT(values[i], Eq(expected[i])); + + delete_file(dump_file); +} + //------------------------------------------------------------------------------------------------- // dump_modify //-------------------------------------------------------------------------------------------------