/
lyapdy
/
skillbox_controllers
Обзор
Документация
Войти
/
lyapdy
/
skillbox_controllers
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
vector3d_project1/tests/test_vector3d.cpp
150 строк
5 KB
danillyapunov
task9 commit
13 дек 2025, 16:42
13 дек 2025, 16:42
916f5d0
Код
Авторство
О чём код?
#include "Vector3D.h" #include <cassert> #include <iostream> void testCopyConstructor() { std::cout << "\nTest Copy Constructor:" << std::endl; Vector3D original(1.0, 2.0, 3.0); Vector3D copy(original); assert(original.getX() == copy.getX()); assert(original.getY() == copy.getY()); assert(original.getZ() == copy.getZ()); assert(&original != ©); // Должны быть разные объекты std::cout << "✓ Copy constructor works correctly" << std::endl; } void testMoveConstructor() { std::cout << "\nTest Move Constructor:" << std::endl; Vector3D original(4.0, 5.0, 6.0); double originalX = original.getX(); double originalY = original.getY(); double originalZ = original.getZ(); Vector3D moved(std::move(original)); assert(moved.getX() == originalX); assert(moved.getY() == originalY); assert(moved.getZ() == originalZ); std::cout << "✓ Move constructor works correctly" << std::endl; } void testMoveAssignment() { std::cout << "\nTest Move Assignment Operator:" << std::endl; Vector3D source(7.0, 8.0, 9.0); Vector3D destination; double sourceX = source.getX(); double sourceY = source.getY(); double sourceZ = source.getZ(); destination = std::move(source); assert(destination.getX() == sourceX); assert(destination.getY() == sourceY); assert(destination.getZ() == sourceZ); std::cout << "✓ Move assignment operator works correctly" << std::endl; } void testUniquePtr() { std::cout << "\nTest std::unique_ptr:" << std::endl; // Создание unique_ptr std::unique_ptr<Vector3D> ptr1 = std::make_unique<Vector3D>(1.0, 2.0, 3.0); assert(ptr1 != nullptr); assert(ptr1->getX() == 1.0); // Попытка копирования (должна вызвать ошибку компиляции, если раскомментировать) // std::unique_ptr<Vector3D> ptr2 = ptr1; // Error! // Перемещение разрешено std::unique_ptr<Vector3D> ptr3 = std::move(ptr1); assert(ptr1 == nullptr); assert(ptr3 != nullptr); assert(ptr3->getX() == 1.0); std::cout << "✓ std::unique_ptr works correctly" << std::endl; } void testSharedPtr() { std::cout << "\nTest std::shared_ptr:" << std::endl; // Создание shared_ptr std::shared_ptr<Vector3D> ptr1 = std::make_shared<Vector3D>(4.0, 5.0, 6.0); assert(ptr1.use_count() == 1); // Копирование разрешено std::shared_ptr<Vector3D> ptr2 = ptr1; assert(ptr1.use_count() == 2); assert(ptr2.use_count() == 2); // Еще одно копирование std::shared_ptr<Vector3D> ptr3 = ptr2; assert(ptr1.use_count() == 3); assert(ptr2.use_count() == 3); assert(ptr3.use_count() == 3); // Все указывают на один объект ptr1->setX(10.0); assert(ptr2->getX() == 10.0); assert(ptr3->getX() == 10.0); // Освобождение ссылок ptr2.reset(); assert(ptr1.use_count() == 2); ptr3.reset(); assert(ptr1.use_count() == 1); std::cout << "✓ std::shared_ptr works correctly" << std::endl; } void testVectorOperations() { std::cout << "\nTest Vector Operations:" << std::endl; Vector3D v1(1.0, 2.0, 3.0); Vector3D v2(4.0, 5.0, 6.0); // Тест сложения Vector3D sum = v1 + v2; assert(sum.getX() == 5.0); assert(sum.getY() == 7.0); assert(sum.getZ() == 9.0); // Тест вычитания Vector3D diff = v2 - v1; assert(diff.getX() == 3.0); assert(diff.getY() == 3.0); assert(diff.getZ() == 3.0); // Тест длины Vector3D v3(3.0, 4.0, 0.0); assert(v3.length() == 5.0); // Тест нормализации Vector3D v4(3.0, 0.0, 0.0); v4.normalize(); assert(v4.length() == 1.0); assert(v4.getX() == 1.0); std::cout << "✓ Vector operations work correctly" << std::endl; } int main() { std::cout << "Running Vector3D Tests" << std::endl; std::cout << "======================" << std::endl; testCopyConstructor(); testMoveConstructor(); testMoveAssignment(); testUniquePtr(); testSharedPtr(); testVectorOperations(); std::cout << "\n==================================" << std::endl; std::cout << "All tests passed successfully!" << std::endl; std::cout << "Number of Vector3D objects at the end: " << Vector3D::getObjectCount() << std::endl; return 0; }