(no subject)
Jan. 27th, 2026 02:12 pmГибридная Графовая База Данных (отвертка с моторчиком для моделирования моделей)
День 9. Доработка тестов и планы на будущее.
Это конечно не полноценные юниттесты с 146% кавереджем, но лучше чтобы основная функциональность постоянно тестировалась, чем не тестировалась и разводила в своих внутренностях регрессии. Помимо вышеупомянутых тестов для некоторых вспомогательных модулей, добавлены тесты для операций с узлами данных (добавление, редактирование, удаление), а также тесты для линков и индексов.
Весь код из локального репозитория закачан на гитхаб (https://github.com/norian-n/nekodb).
Дальнейшие шаги: демо приложение для обкатки двигла на как бы практических задачах, добавление требуемой для этого приложения функциональности и рефакторинг понаписанного. Рефакторинг является необходимым методом для повышения качества софта. Он направлен на уменьшение количества кода и перенос дополнительной функциональности в отдельные плагины, чтобы в основных модулях оставалась только самая необходимая функциональность в самом рациональном виде. Это постоянный итеративный процесс небольших изменений, который заканчивается только с гибелью системы под собственной тяжестью.
Процесс сборки всего и запуска тестов выглядит так:
День 9. Доработка тестов и планы на будущее.
Это конечно не полноценные юниттесты с 146% кавереджем, но лучше чтобы основная функциональность постоянно тестировалась, чем не тестировалась и разводила в своих внутренностях регрессии. Помимо вышеупомянутых тестов для некоторых вспомогательных модулей, добавлены тесты для операций с узлами данных (добавление, редактирование, удаление), а также тесты для линков и индексов.
Весь код из локального репозитория закачан на гитхаб (https://github.com/norian-n/nekodb).
Дальнейшие шаги: демо приложение для обкатки двигла на как бы практических задачах, добавление требуемой для этого приложения функциональности и рефакторинг понаписанного. Рефакторинг является необходимым методом для повышения качества софта. Он направлен на уменьшение количества кода и перенос дополнительной функциональности в отдельные плагины, чтобы в основных модулях оставалась только самая необходимая функциональность в самом рациональном виде. Это постоянный итеративный процесс небольших изменений, который заканчивается только с гибелью системы под собственной тяжестью.
Процесс сборки всего и запуска тестов выглядит так:
> ./all_tests.sh ============ build lib and test apps ============ g++ -fPIC -std=c++20 -c service/egByteArray.cpp -o service/egByteArray.o g++ -fPIC -std=c++20 -c nodes/egDataNodesType.cpp -o nodes/egDataNodesType.o g++ -fPIC -std=c++20 -c nodes/egDataNodesLocalFile.cpp -o nodes/egDataNodesLocalFile.o g++ -fPIC -std=c++20 -c nodes/egDataNodesContainer.cpp -o nodes/egDataNodesContainer.o g++ -fPIC -std=c++20 -c nodes/egDataNodeBlueprint.cpp -o nodes/egDataNodeBlueprint.o g++ -fPIC -std=c++20 -c nodes/egDataNode.cpp -o nodes/egDataNode.o g++ -fPIC -std=c++20 -c indexes/egIndexes.cpp -o indexes/egIndexes.o g++ -fPIC -std=c++20 -c indexes/egIndexConditions.cpp -o indexes/egIndexConditions.o g++ -fPIC -std=c++20 -c indexes/egFingers.cpp -o indexes/egFingers.o g++ -fPIC -std=c++20 -c links/egLinksType.cpp -o links/egLinksType.o g++ -fPIC -std=c++20 -c links/egFlexLinksType.cpp -o links/egFlexLinksType.o g++ -fPIC -std=c++20 -c metainfo/egLayersType.cpp -o metainfo/egLayersType.o g++ -fPIC -std=c++20 -c metainfo/egDatabaseType.cpp -o metainfo/egDatabaseType.o g++ -shared -o libegdb.so service/egByteArray.o nodes/egDataNodesType.o nodes/egDataNodesLocalFile.o nodes/egDataNodesContainer.o nodes/egDataNodeBlueprint.o nodes/egDataNode.o indexes/egIndexes.o indexes/egIndexConditions.o indexes/egFingers.o links/egLinksType.o links/egFlexLinksType.o metainfo/egLayersType.o metainfo/egDatabaseType.o =============== Finished compilation of libegdb.so =============== -rwxrwxr-x 1068760 libegdb.so =============== clean =============== rm -f service/egByteArray.o nodes/egDataNodesType.o nodes/egDataNodesLocalFile.o nodes/egDataNodesContainer.o nodes/egDataNodeBlueprint.o nodes/egDataNode.o indexes/egIndexes.o indexes/egIndexConditions.o indexes/egFingers.o links/egLinksType.o links/egFlexLinksType.o metainfo/egLayersType.o metainfo/egDatabaseType.o g++ -std=c++20 -c tests/testDataNodesLocalFile.cpp -o tests/testDataNodesLocalFile.o g++ tests/testDataNodesLocalFile.o -L. -legdb -o tests/testDataNodesLocalFile.exe g++ -std=c++20 -c tests/testFlexLinks.cpp -o tests/testFlexLinks.o g++ tests/testFlexLinks.o -L. -legdb -o tests/testFlexLinks.exe g++ -std=c++20 -c tests/testGeneralOps.cpp -o tests/testGeneralOps.o g++ tests/testGeneralOps.o -L. -legdb -o tests/testGeneralOps.exe g++ -std=c++20 -c tests/testDataNodesContainer.cpp -o tests/testDataNodesContainer.o g++ tests/testDataNodesContainer.o -L. -legdb -o tests/testDataNodesContainer.exe g++ -std=c++20 -c tests/testIndexesUsage.cpp -o tests/testIndexesUsage.o g++ tests/testIndexesUsage.o -L. -legdb -o tests/testIndexesUsage.exe g++ -std=c++20 -c tests/testDataNodeBlueprint.cpp -o tests/testDataNodeBlueprint.o g++ tests/testDataNodeBlueprint.o -L. -legdb -o tests/testDataNodeBlueprint.exe g++ -std=c++20 -c tests/testFingers.cpp -o tests/testFingers.o g++ tests/testFingers.o -L. -legdb -o tests/testFingers.exe g++ -std=c++20 -c tests/testBasicOps.cpp -o tests/testBasicOps.o g++ tests/testBasicOps.o -L. -legdb -o tests/testBasicOps.exe g++ -std=c++20 -c tests/testLinks.cpp -o tests/testLinks.o g++ tests/testLinks.o -L. -legdb -o tests/testLinks.exe g++ -std=c++20 -c tests/testIndexes.cpp -o tests/testIndexes.o g++ tests/testIndexes.o -L. -legdb -o tests/testIndexes.exe g++ -std=c++20 -c tests/testDataFields.cpp -o tests/testDataFields.o g++ tests/testDataFields.o -L. -legdb -o tests/testDataFields.exe g++ -std=c++20 -c tests/testLayers.cpp -o tests/testLayers.o g++ tests/testLayers.o -L. -legdb -o tests/testLayers.exe tests/testDataNodesLocalFile.exe tests/testFlexLinks.exe tests/testGeneralOps.exe tests/testDataNodesContainer.exe tests/testIndexesUsage.exe tests/testDataNodeBlueprint.exe tests/testFingers.exe tests/testBasicOps.exe tests/testLinks.exe tests/testIndexes.exe tests/testDataFields.exe tests/testLayers.exe =============== Finished compilation of tests =============== rm -f tests/testDataNodesLocalFile.o tests/testFlexLinks.o tests/testGeneralOps.o tests/testDataNodesContainer.o tests/testIndexesUsage.o tests/testDataNodeBlueprint.o tests/testFingers.o tests/testBasicOps.o tests/testLinks.o tests/testIndexes.o tests/testDataFields.o tests/testLayers.o rm -f tests/*.o rm -f *.o ============ run test apps ============ initDatabase() not found metadata storage, create new: egNodesTypesMetainfo initDatabase() not found metadata storage, create new: egLinksTypesMetainfo initDatabase() not found metadata storage, create new: egLayersTypesMetainfo ===== Test basic database ops ===== PASS ===== Test length convertor ( 123456789 ) ===== byteCountIn: 4 byteCountOut: 4 testLength: 123456789 ===== Test hamSlicer ===== PASS ===== Test DataNodeBlueprint (2 errors must appear in negative tests) ===== ERROR: AddIndex() for DataNodeBlueprint: "testNodes" field name "bad index name" not found ERROR: Can't add field "try to add field after commit" to DataNodeBlueprint: "testNodes". Call BlueprintInitStart() first PASS ===== Test NodesContainerType ===== PASS ===== Test egDataNodeLocalFile ===== PASS ===== Test EgFingers Stage 1 ===== PASS ===== Test EgFingers Stage 2 ===== PASS ===== Test EgFreeLinksType ===== PASS ===== Test general database ops ===== PASS ===== Test EgIndexes ===== PASS ===== Test indexes ops ===== PASS ===== Test EgLayersType ===== PASS ===== Test EgLinksType ===== PASS PASS total: 13 FAIL total: 0