This source file includes following definitions.
- AddPoints
- TEST
- TEST
- TEST
- TEST
- TEST
#include "base/basictypes.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/events/gestures/velocity_calculator.h"
namespace ui {
namespace test {
namespace {
static void AddPoints(VelocityCalculator* velocity_calculator,
float x_increment,
float y_increment,
float time_increment_seconds,
int num_points) {
float x = 0;
float y = 0;
double time = 0;
for (int i = 0; i < num_points; ++i) {
velocity_calculator->PointSeen(x, y, time);
x += x_increment;
y += y_increment;
time += time_increment_seconds * 1000000;
}
}
}
TEST(VelocityCalculatorTest, ReturnsReasonableVelocity) {
VelocityCalculator velocity_calculator(5);
AddPoints(&velocity_calculator, 10, -10, 1, 7);
EXPECT_GT(velocity_calculator.XVelocity(), 9.9);
EXPECT_LT(velocity_calculator.XVelocity(), 10.1);
EXPECT_GT(velocity_calculator.YVelocity(), -10.1);
EXPECT_LT(velocity_calculator.YVelocity(), -9.9);
velocity_calculator.PointSeen(9, -11, 5500000);
velocity_calculator.PointSeen(21, -19, 6000000);
velocity_calculator.PointSeen(30, -32, 6500000);
velocity_calculator.PointSeen(38, -40, 7000000);
velocity_calculator.PointSeen(50, -51, 7500000);
EXPECT_GT(velocity_calculator.XVelocity(), 19);
EXPECT_LT(velocity_calculator.XVelocity(), 21);
EXPECT_GT(velocity_calculator.YVelocity(), -21);
EXPECT_LT(velocity_calculator.YVelocity(), -19);
velocity_calculator.PointSeen(70, -70, 8000000);
EXPECT_GT(velocity_calculator.XVelocity(), 20);
EXPECT_LT(velocity_calculator.XVelocity(), 25);
EXPECT_GT(velocity_calculator.YVelocity(), -25);
EXPECT_LT(velocity_calculator.YVelocity(), -20);
}
TEST(VelocityCalculatorTest, IsAccurateWithLargeTimes) {
VelocityCalculator velocity_calculator(5);
int64 start_time = 0;
velocity_calculator.PointSeen(9, -11, start_time);
velocity_calculator.PointSeen(21, -19, start_time + 8);
velocity_calculator.PointSeen(30, -32, start_time + 16);
velocity_calculator.PointSeen(38, -40, start_time + 24);
velocity_calculator.PointSeen(50, -51, start_time + 32);
EXPECT_GT(velocity_calculator.XVelocity(), 1230000);
EXPECT_LT(velocity_calculator.XVelocity(), 1260000);
EXPECT_GT(velocity_calculator.YVelocity(), -1270000);
EXPECT_LT(velocity_calculator.YVelocity(), -1240000);
start_time = GG_LONGLONG(1223372036800000000);
velocity_calculator.PointSeen(9, -11, start_time);
velocity_calculator.PointSeen(21, -19, start_time + 8);
velocity_calculator.PointSeen(30, -32, start_time + 16);
velocity_calculator.PointSeen(38, -40, start_time + 24);
velocity_calculator.PointSeen(50, -51, start_time + 32);
EXPECT_GT(velocity_calculator.XVelocity(), 1230000);
EXPECT_LT(velocity_calculator.XVelocity(), 1260000);
EXPECT_GT(velocity_calculator.YVelocity(), -1270000);
EXPECT_LT(velocity_calculator.YVelocity(), -124000);
}
TEST(VelocityCalculatorTest, RequiresEnoughData) {
VelocityCalculator velocity_calculator(3);
int64 start_time = 0;
EXPECT_EQ(velocity_calculator.XVelocity(), 0);
EXPECT_EQ(velocity_calculator.YVelocity(), 0);
velocity_calculator.PointSeen(10, 10, start_time);
EXPECT_EQ(velocity_calculator.XVelocity(), 0);
EXPECT_EQ(velocity_calculator.YVelocity(), 0);
velocity_calculator.PointSeen(20, 20, start_time + 5);
EXPECT_FLOAT_EQ(velocity_calculator.XVelocity(), 1923077.f);
EXPECT_FLOAT_EQ(velocity_calculator.YVelocity(), 1923077.f);
velocity_calculator.PointSeen(30, 30, start_time + 10);
velocity_calculator.PointSeen(40, 40, start_time + 15);
EXPECT_FLOAT_EQ(velocity_calculator.XVelocity(), 2000000.f);
EXPECT_FLOAT_EQ(velocity_calculator.YVelocity(), 2000000.f);
velocity_calculator.PointSeen(50, 50, start_time + 20);
EXPECT_FLOAT_EQ(velocity_calculator.XVelocity(), 2000000.f);
EXPECT_FLOAT_EQ(velocity_calculator.YVelocity(), 2000000.f);
}
TEST(VelocityCalculatorTest, ClearsHistory) {
VelocityCalculator velocity_calculator(5);
AddPoints(&velocity_calculator, 10, -10, 1, 7);
EXPECT_FLOAT_EQ(velocity_calculator.XVelocity(), 10.f);
EXPECT_FLOAT_EQ(velocity_calculator.YVelocity(), -10.f);
velocity_calculator.ClearHistory();
EXPECT_EQ(velocity_calculator.XVelocity(), 0);
EXPECT_EQ(velocity_calculator.YVelocity(), 0);
}
TEST(VelocityCalculatorTest, IgnoresOldData) {
VelocityCalculator velocity_calculator(5);
AddPoints(&velocity_calculator, 10, -10, 1, 7);
EXPECT_FLOAT_EQ(velocity_calculator.XVelocity(), 10.f);
EXPECT_FLOAT_EQ(velocity_calculator.YVelocity(), -10.f);
AddPoints(&velocity_calculator, 0, 0, 1, 5);
EXPECT_FLOAT_EQ(velocity_calculator.XVelocity(), 0);
EXPECT_FLOAT_EQ(velocity_calculator.YVelocity(), 0);
}
}
}