df

Dependencies:   mbed

Fork of APP1 by Team APP

TestAccelerometer.cpp

Committer:
dupm2216
Date:
2017-01-15
Revision:
5:f59b51ac4b40
Parent:
4:303fb83498fd
Child:
6:3facf0329142

File content as of revision 5:f59b51ac4b40:

#include "TestAccelerometer.hpp"
#include "Accelerometer.hpp"
#include "mbed.h"

#include <cassert>
#include <cmath>

namespace accelerometer
{
    void run_all_tests()
    {
        test_raw_axis_data_to_int();
        test_set_standby_and_active();
        test_is_almost_equal();
    }
    
    void test_raw_axis_data_to_int()
    {    
        assert(128 == (unsigned char)(0x80));
        assert(-128 == (signed char)(0x80));
        
        assert(0 == raw_axis_data_to_int(0x00));
        assert(1 == raw_axis_data_to_int(0x01));
        assert(127 == raw_axis_data_to_int(0x7F));
        assert(-1 == raw_axis_data_to_int(0xFF));
        assert(-128 == raw_axis_data_to_int(0x80));
    }
    
    void test_set_standby_and_active()
    {
        Accelerometer accelerometer(p9, p10, I2C_ACCELEROMETER_ADDRESS);
    
        accelerometer.set_standby();
        char value = accelerometer.read_register(CTRL_REG1_REGISTER_ADDRESS);
        if(value % 2 != 0)
        {
            printf("Fail\r\n");
        }
    
        accelerometer.set_active();
        value = accelerometer.read_register(CTRL_REG1_REGISTER_ADDRESS);
        if(value % 2 != 1)
        {
            printf("Fail\r\n");
        }
    }

    void test_is_almost_equal()
    {
        assert(is_almost_equal(0, 0, 0.01));
        assert(is_almost_equal(0.50, 0.51, 0.02));
        assert(!is_almost_equal(0.50, 0.52, 0.01));
        assert(!is_almost_equal(0, 0.50, 0.1));
    }
    
    void test_angle_from_int_axis_data()
    {
        const double tolerance = 0.05;
        assert(is_almost_equal(0, angle_from_int_axis_data(64), tolerance));
        assert(is_almost_equal(0, angle_from_int_axis_data(-64), tolerance));
        assert(is_almost_equal(60, angle_from_int_axis_data(32), tolerance));
        assert(is_almost_equal(60, angle_from_int_axis_data(-32), tolerance));
    }
    
    void test_g_force_from_int_axis_data()
    {
        const double tolerance = 0.05;
        assert(is_almost_equal(1, g_force_from_int_axis_data(64), tolerance));
        assert(is_almost_equal(-1, g_force_from_int_axis_data(-64), tolerance));
        assert(is_almost_equal(2, g_force_from_int_axis_data(128), tolerance));
        assert(is_almost_equal(-2, g_force_from_int_axis_data(-128), tolerance));
        assert(is_almost_equal(0.5, g_force_from_int_axis_data(32), tolerance));
        assert(is_almost_equal(-0.5, g_force_from_int_axis_data(-32), tolerance));
    }
    
    void test_degree_from_radian()
    {
        const double tolerance = 0.05;
        assert(is_almost_equal(0, degree_from_radian(0.0), tolerance));
        assert(is_almost_equal(90, degree_from_radian(PI/2.0), tolerance));
        assert(is_almost_equal(180, degree_from_radian(PI), tolerance));
        assert(is_almost_equal(270, degree_from_radian(3.0*PI/2.0), tolerance));
        assert(is_almost_equal(0, degree_from_radian(2.0*PI), tolerance) || is_almost_equal(360, degree_from_radian(2.0*PI), tolerance));
        assert(is_almost_equal(270, degree_from_radian(-PI/2.0), tolerance));
    }
    
    void test_wrap_angle()
    {
        const double tolerance = 0.05;
        assert(is_almost_equal(0, wrap_angle(0.0), tolerance));
        assert(is_almost_equal(90, wrap_angle(90), tolerance));
        assert(is_almost_equal(180, wrap_angle(180), tolerance));
        assert(is_almost_equal(0, wrap_angle(360), tolerance) || is_almost_equal(360, wrap_angle(360), tolerance));
        assert(is_almost_equal(90, wrap_angle(360+90), tolerance));
        assert(is_almost_equal(270, wrap_angle(360-90), tolerance));
    }
}