@@ -4,14 +4,6 @@ template<class T>
44struct MathAll : testing::Test {};
55TYPED_TEST_SUITE (MathAll, all_vectors);
66
7- template <class T >
8- struct MathSigned : testing::Test {};
9- TYPED_TEST_SUITE (MathSigned, signed_vectors);
10-
11- template <class T >
12- struct MathFloating : testing::Test {};
13- TYPED_TEST_SUITE (MathFloating, floating_vectors);
14-
157TYPED_TEST (MathAll, Expressions)
168{
179 USING_TYPE_INFO
@@ -23,10 +15,10 @@ TYPED_TEST(MathAll, Expressions)
2315 auto d = *(1 + -(a + b) * c * 0.5 );
2416
2517 EXPECT_EQ (decltype (d)::size, size);
26- testing::StaticAssertTypeEq<decltype (d)::scalar_t , double >();
18+ testing::StaticAssertTypeEq<typename decltype (d)::scalar_t , double >();
2719
2820 for (size_t i = 0 ; i < size; i++)
29- EXPECT_EQ (1 - (a[i] + b[i]) * c[i] * 0.5 , d[i]);
21+ EXPECT_EQ (1 + - (a[i] + b[i]) * c[i] * 0.5 , d[i]);
3022}
3123
3224TYPED_TEST (MathAll, Util)
@@ -53,30 +45,50 @@ TYPED_TEST(MathAll, Util)
5345 EXPECT_NE (a.product (), 0 );
5446}
5547
56- TYPED_TEST (MathSigned, Algebra )
48+ TYPED_TEST (MathAll, LinearAlgebra )
5749{
5850 USING_TYPE_INFO
51+
52+ auto a = vector_t ::zero;
53+ auto b = vector_t ::identity;
5954
60- vector_t a = random_vector<vector_t >();
61- a[0 ] = -1 ;
62-
63- vector_t b = a.abs ();
64-
65- for (size_t i = 0 ; i < size; i++)
66- EXPECT_EQ (b[i], std::abs (a[i]));
55+ EXPECT_EQ (a.distance2 (b), size);
6756}
6857
69- TYPED_TEST (MathFloating, Algebra )
58+ TEST (Math, Length )
7059{
71-
60+ uint2d a (1 , 1 );
61+ int2d b (-5 , -5 );
62+
63+ EXPECT_DOUBLE_EQ (a.length (), std::sqrt (2 ));
64+ EXPECT_DOUBLE_EQ (a.distance (b), uint2d (6 , 6 ).length ());
65+ EXPECT_DOUBLE_EQ (a.normalize ().length (), 1 );
66+ EXPECT_DOUBLE_EQ (b.set_length (100 ).length (), 100 );
7267}
7368
74- TYPED_TEST (MathAll , LinearAlgebra)
69+ TEST (Math , LinearAlgebra)
7570{
76- USING_TYPE_INFO
77-
78- auto a = vector_t ::zero;
79- auto b = vector_t ::identity;
71+ double2d a (1 , 0 );
72+ double2d b (0 , 1 );
8073
81- EXPECT_EQ (a.distance2 (b), size);
74+ // angles
75+ EXPECT_DOUBLE_EQ (std::cos (a.angle ()), 1 );
76+ EXPECT_DOUBLE_EQ (std::sin (a.angle ()), 0 );
77+ EXPECT_DOUBLE_EQ (a.delta_angle (b), b.angle ());
78+
79+ // dot p
80+ EXPECT_DOUBLE_EQ (a.dot (b), 0 );
81+
82+ double2d c (1.2 , 3.4 );
83+ double2d d (5.6 , 7.8 );
84+ EXPECT_DOUBLE_EQ (c.dot (d), 1.2 * 5.6 + 3.4 * 7.8 );
85+
86+ // cross p
87+ int3d e (1 , 2 , 3 );
88+ int3d f (4 , 5 , 6 );
89+
90+ EXPECT_EQ (e.cross (f), int3d (-3 , 6 , -3 ));
91+
92+ // from angle
93+ EXPECT_EQ (double2d::from_angle (a.angle ()), a);
8294}
0 commit comments