pimathvector_tests #38
2 Participants
Notifications
Due Date
No due date set.
Blocks
#39 доработать PIMathVector
SHS/pip
Reference: SHS/pip#38
Reference in New Issue
Block a user
Delete Branch "pimathvector_tests"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
нужно поправить пару моментов
@@ -70,1 +245,4 @@* @param index is the index of necessary element* @return element of vector*/Type operator [](uint index) const {return c[index];}здесь бь надо поменять на
const Type &@@ -197,1 +770,4 @@* @param index is the index of necessary element* @return element of vector*/Type operator [](uint index) const {return c[index];}здесь бь надо поменять на const Type &
@@ -200,1 +794,4 @@* @param v vector for the compare* @return if vectors are equal true, else false*/bool operator ==(const _CVector & v) const {PIMV_FOR(i, 0) if (c[i] != v[i]) return false; return true;}здесь необходимо дописать проверку размеров
кстати тут гораздо проще, можно написать вместо всего
return c == v.c;@@ -214,0 +890,4 @@* @param v is vector for cross product* @return the result vector equal of cross product*/_CVector operator *(const _CVector & v) const {if ((c.size() != 3) && (v.size() != 3)) return _CVector(); _CVector tv(3); tv.fill(Type(1)); tv[0] = c[1]*v[2] - v[1]*c[2]; tv[1] = v[0]*c[2] - c[0]*v[2]; tv[2] = c[0]*v[1] - v[0]*c[1]; return tv;}в условии должно быть || а не &&
странно что тесты этого не показали (наверное тесты не охватывают все случаи)
Просьба описывать в документации логику возвращения
thisболее точно. Например метод PIMathVectorT::fill():В блоке
@returnописание слишком расплывчато и не отражает того факта, что возвращаемый вектор- это тот же самый вектор, у которого был вызван методfill().Необходимо уточнить в документации логику возвращаемого значения для классов
PIMathMatrixT,PIMathMatrix,PIMathVectorT,PIMathVectorНужно постараться избегать рекурсивных определений. Пример PIMathVector::length() и PIMathVector::size(). По описанию невозможно понять что делают методы.
В тестах заменить магические константы чем то осмысленным.
Сравнение объектов класса
PIMathVector<Type>с вещественными типами через оператор==производится не корректно, сравнивая элементы на прямую через==. Вместо этого необходимо сравнивать элементы по правилам сравнения вещественных типов.@@ -71,1 +256,4 @@_CVector & operator =(const _CVector & v) {memcpy(c, v.c, sizeof(Type) * Size); return *this;}/*** @brief Vector assignment to value "v"Нечего не понятно
@@ -175,1 +625,4 @@_CVector & fill(const Type & v) {PIMV_FOR(i, 0) c[i] = v; return *this;}/*** @brief Method that fills a vector with the adittion of vector value and "v"Ничего не понятно.
@@ -177,1 +638,4 @@* @param v vector of type PIMathVectorT* @return vector of type PIMathVectorT with values adittion of vector value and "v"*/_CVector & move(const _CVector & v) {PIMV_FOR(i, 0) c[i] += v[i]; return *this;}Ничего не понятно по документации.
В документации не отражен случай когда размерности векторов не равны.
В коде не учитен случай, когда размерности векторов не равны.
@@ -198,1 +778,4 @@* @param v vector for the assigment* @return vector equal to vector "v"*/_CVector & operator =(const _CVector & v) {c = v.c; return *this;}Ничего не понятно в документации.
Не описан случай несовпадения размерностей.
Нет проверки размерностей в коде
@@ -202,1 +809,4 @@** @param v vector for the addition assigment*/void operator +=(const _CVector & v) {PIMV_FOR(i, 0) c[i] += v[i];}Ничего не понятно в документации.
В документации не описан случай несовпадения размерностей.
Код не обрабатывает случай несовпадения размерностей.
Аналогично:
pimathvector.h#L819
pimathvector.h#L833
pimathvector.h#L847
pimathvector.h#L862
pimathvector.h#L869
и т.д.
@@ -215,1 +906,4 @@* @param v is vector for dot product* @return resulting vector*/Type operator ^(const _CVector & v) const {Type tv(0); PIMV_FOR(i, 0) tv += c[i] * v[i]; return tv;}Документация не соответствует коду: вычисляется скалярное произведение а не его модуль.
Не описан случай несовпадения разменостей.
Код не учитывает случай несовпадения размерностей.
@@ -217,1 +915,4 @@* @param lp1 is vector* @return resulting value*/Type distToLine(const _CVector & lp0, const _CVector & lp1) {Документация не соответствует коду. Метод вычисляет расстояние от точки до прямой, задаваемой
lp0иlp1Описать параметры и возвращаемое значение подробнее.
@@ -0,0 +4,4 @@bool cmpVectorWithValue(PIMathVector<double> vector, double val, int num) {bool b = true;for(int i = 0; i < num; i++) {if(vector[i] != val) {Не корректно сравнивать значения типа
doubleоператором!=(см. обсуждение).@@ -0,0 +13,4 @@TEST(PIMathVector_Test, size) {auto vector = PIMathVector<double>(3u);ASSERT_TRUE(vector.size() == 3u);Предпочтительнее использовать ASSERT_EQ
@@ -0,0 +16,4 @@ASSERT_TRUE(vector.size() == 3u);}TEST(PIMathVector_Test, resize) {Нет проверки на size() вектора перед проверкой значений.
@@ -0,0 +22,4 @@ASSERT_TRUE(cmpVectorWithValue(vector, 5.0, vector.size()));}TEST(PIMathVector_Test, resized) {Нет проверки на size() вектора перед проверкой значений. Тест составлен не корректно.
@@ -0,0 +60,4 @@a[1] = vector[1];a[2] = vector[2];vector.swap(0u, 1u);ASSERT_TRUE((a[0] == vector[1]) && (a[1] == vector[0]) && (a[2] == vector[2]));Не корректно сравнивать значения типа
doubleоператором==(см. обсуждение). Заменить наEXPECT_DOUBLE_EQ.@@ -0,0 +63,4 @@ASSERT_TRUE((a[0] == vector[1]) && (a[1] == vector[0]) && (a[2] == vector[2]));}TEST(PIMathVector_Test, lengthSqr) {Лучше заполнять вектор чем то не равным еденице.
Не корректно сравнивать значения типа
doubleоператором==. Заменить на EXPECT_DOUBLE_EQ.@@ -0,0 +69,4 @@ASSERT_EQ(3.0, vector.lengthSqr());}TEST(PIMathVector_Test, length) {Лучше заполнять вектор чем то не равным еденице.
@@ -0,0 +96,4 @@vector[0] = 1.0;vector[1] = 1.0;vec[1] = 1.0;ASSERT_DOUBLE_EQ(cos(0.78539816339744830961566084581988), vector.angleSin(vec));Вычисление косинуса вводит в заблуждение.
@@ -0,0 +117,4 @@ASSERT_DOUBLE_EQ(45.0, vector.angleDeg(vec));}TEST(PIMathVector_Test, projection) {Посчитать проекцию в коде и сравнить
@@ -0,0 +133,4 @@ASSERT_TRUE(cmpVectorWithValue(vector.normalize(), 5.0 / sqrt(75.0), 3u));}TEST(PIMathVector_Test, normalized) {Тест составлен не корректно.
@@ -0,0 +328,4 @@PIMathVector<double> vector2(3u);vector1[0] = 1.0;vector2[1] = 1.0;ASSERT_TRUE(((vector1 * vector2)[0] == 0.0) && ((vector1 * vector2)[1] == 0.0) && ((vector1 * vector2)[2] == 1.0));Привести к читаемой форме.
Не нужно умножать векторы 3 раза.
@@ -0,0 +331,4 @@ASSERT_TRUE(((vector1 * vector2)[0] == 0.0) && ((vector1 * vector2)[1] == 0.0) && ((vector1 * vector2)[2] == 1.0));}TEST(PIMathVector_Test, operator_DivisionVector) {Тест должен называться
operator_DivisionValue.Написать тест
operator_DivisionVector.закрываем, будем делать ещё раз сначала
Pull request closed