Download tests/src/Base/UniqueNameManager.cpp from AbdulElahGwaith/FreeCAD: direct link, hf CLI and curl.
- Browser
- Download file 5.28 kB
-
https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/tests/src/Base/UniqueNameManager.cpp
- Command line
-
hf download hf://AbdulElahGwaith/FreeCAD/tests/src/Base/UniqueNameManager.cpp
-
curl -L -o UniqueNameManager.cpp https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/tests/src/Base/UniqueNameManager.cpp
5.28 kB
| /*************************************************************************** | |
| * Copyright (c) 2024 Kevin Martin <kpmartin@papertrail.ca> * | |
| * * | |
| * This file is part of FreeCAD. * | |
| * * | |
| * FreeCAD is free software: you can redistribute it and/or modify it * | |
| * under the terms of the GNU Lesser General Public License as * | |
| * published by the Free Software Foundation, either version 2.1 of the * | |
| * License, or (at your option) any later version. * | |
| * * | |
| * FreeCAD is distributed in the hope that it will be useful, but * | |
| * WITHOUT ANY WARRANTY; without even the implied warranty of * | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * | |
| * Lesser General Public License for more details. * | |
| * * | |
| * You should have received a copy of the GNU Lesser General Public * | |
| * License along with FreeCAD. If not, see * | |
| * <https://www.gnu.org/licenses/>. * | |
| * * | |
| ***************************************************************************/ | |
| // NOLINTBEGIN(cppcoreguidelines-*,readability-*) | |
| TEST(UniqueNameManager, NonconflictingBaseNameReturnsSameName) | |
| { | |
| // Check that a model name that is a base name that does not conflict with | |
| // any existing name returns the base name | |
| EXPECT_EQ(Base::UniqueNameManager().makeUniqueName("Body"), "Body"); | |
| } | |
| TEST(UniqueNameManager, NonconflictingUniqueNameReturnsBaseName) | |
| { | |
| // Check that a model name that is a unique name whose base name does not conflict with | |
| // any existing name returns the base name | |
| EXPECT_EQ(Base::UniqueNameManager().makeUniqueName("Body123"), "Body"); | |
| } | |
| TEST(UniqueNameManager, ManyDigitsInModelNameIgnored) | |
| { | |
| // Check that the number of digits in the model name does not affect the number | |
| // of digits in the returned name. | |
| Base::UniqueNameManager manager; | |
| manager.addExactName("Body"); | |
| EXPECT_EQ(manager.makeUniqueName("Body12345", 3), "Body001"); | |
| } | |
| TEST(UniqueNameManager, ConflictingBaseNameReturnsUniqueName) | |
| { | |
| // Check that a model name that conflicts with an existing name returns a unique form of | |
| // the base name | |
| Base::UniqueNameManager manager; | |
| manager.addExactName("Body"); | |
| EXPECT_EQ(manager.makeUniqueName("Body", 1), "Body1"); | |
| } | |
| TEST(UniqueNameManager, ConflictingUniqueNameReturnsNewUniqueName) | |
| { | |
| // Check that a given unique name already in the collection causes the return of | |
| // a new unique name. | |
| Base::UniqueNameManager manager; | |
| manager.addExactName("Body"); | |
| manager.addExactName("Body001"); | |
| EXPECT_EQ(manager.makeUniqueName("Body001", 3), "Body002"); | |
| } | |
| TEST(UniqueNameManager, VerifyUniqueDigitCount) | |
| { | |
| // Check that when a unique name is generated it contains at least the specified number | |
| // of inserted digits | |
| Base::UniqueNameManager manager; | |
| manager.addExactName("Body"); | |
| EXPECT_EQ(manager.makeUniqueName("Body", 3), "Body001"); | |
| } | |
| TEST(UniqueNameManager, UniqueNameLargerThanAnyName) | |
| { | |
| // Check that the name returned is larger (using digits) that any wxisting name | |
| // even if the given model name is not itself in the collection | |
| Base::UniqueNameManager manager; | |
| manager.addExactName("Body001"); | |
| EXPECT_EQ(manager.makeUniqueName("Body", 3), "Body002"); | |
| } | |
| TEST(UniqueNameManager, Issue18504) | |
| { | |
| // Check that the management of spans of assigned unique digit values is | |
| // correct | |
| std::string name; | |
| Base::UniqueNameManager manager; | |
| manager.addExactName("Origin007"); | |
| manager.addExactName("Origin"); | |
| manager.addExactName("Origin008"); | |
| manager.addExactName("Origin010"); | |
| manager.addExactName("Origin011"); | |
| manager.addExactName("Origin013"); | |
| manager.addExactName("Origin016"); | |
| name = manager.makeUniqueName("Origin", 3); | |
| manager.addExactName(name); | |
| name = manager.makeUniqueName("Origin", 3); | |
| manager.addExactName(name); | |
| name = manager.makeUniqueName("Origin", 3); | |
| EXPECT_NE(name, "Origin010"); | |
| } | |
| TEST(UniqueNameManager, UniqueNameWithManyDigits) | |
| { | |
| // Check that names with many digits (value larger than max unsigned long) work | |
| Base::UniqueNameManager manager; | |
| manager.addExactName("Compound006002002002002"); | |
| EXPECT_EQ(manager.makeUniqueName("Compound", 3), "Compound006002002002003"); | |
| } | |
| TEST(UniqueNameManager, UniqueNameWith9NDigits) | |
| { | |
| // Check that names with a multiple of 9 digits work. The manager chunks nine digits at a time | |
| // so this boundary condition needs a test. | |
| Base::UniqueNameManager manager; | |
| manager.addExactName("Compound123456789"); | |
| EXPECT_EQ(manager.makeUniqueName("Compound", 3), "Compound123456790"); | |
| } | |
| // NOLINTEND(cppcoreguidelines-*,readability-*) | |