def test_calc_0_10(self):
        """Test if from/to calculations work with small range."""
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 10, 0), 0)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 10, 1), 26)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 10, 9), 230)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 10, 10), 255)

        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 10, 0), 0)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 10, 1), 0)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 10, 12), 0)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 10, 13), 1)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 10, 254), 10)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 10, 255), 10)
    def test_calc_100_200(self):
        """Test if from/to calculations work with rnage not starting at zero."""
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 200, 100), 0)
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 200, 130), 76)
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 200, 150), 128)
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 200, 170), 178)
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 200, 200), 255)

        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 200, 0), 100)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 200, 76), 130)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 200, 128), 150)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 200, 178), 170)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 200, 255), 200)
    def test_calc_100_0(self):
        """Test if from/to calculations work with negative range."""
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 0, 0), 255)
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 0, 1), 252)
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 0, 2), 250)
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 0, 3), 247)
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 0, 30), 178)
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 0, 50), 128)
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 0, 70), 76)
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 0, 97), 8)
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 0, 98), 5)
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 0, 99), 3)
        self.assertEqual(RemoteValueScaling._calc_to_knx(100, 0, 100), 0)

        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 0, 0), 100)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 0, 1), 100)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 0, 2), 99)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 0, 3), 99)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 0, 4), 98)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 0, 5), 98)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 0, 76), 70)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 0, 128), 50)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 0, 178), 30)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 0, 251), 2)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 0, 252), 1)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 0, 253), 1)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 0, 254), 0)
        self.assertEqual(RemoteValueScaling._calc_from_knx(100, 0, 255), 0)
    def test_calc_0_1000(self):
        """Test if from/to calculations work with large range."""
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 1000, 0), 0)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 1000, 1), 0)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 1000, 2), 1)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 1000, 3), 1)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 1000, 500), 128)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 1000, 997), 254)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 1000, 998), 254)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 1000, 999), 255)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 1000, 1000), 255)

        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 1000, 0), 0)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 1000, 1), 4)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 1000, 2), 8)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 1000, 128), 502)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 1000, 251), 984)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 1000, 252), 988)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 1000, 253), 992)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 1000, 254), 996)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 1000, 255), 1000)
    def test_calc_0_100(self):
        """Test if from/to calculations work range 0-100 with many test cases."""
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 100, 0), 0)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 100, 1), 3)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 100, 2), 5)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 100, 3), 8)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 100, 30), 76)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 100, 50), 128)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 100, 70), 178)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 100, 97), 247)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 100, 98), 250)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 100, 99), 252)
        self.assertEqual(RemoteValueScaling._calc_to_knx(0, 100, 100), 255)

        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 100, 0), 0)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 100, 1), 0)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 100, 2), 1)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 100, 3), 1)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 100, 4), 2)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 100, 5), 2)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 100, 76), 30)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 100, 128), 50)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 100, 178), 70)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 100, 251), 98)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 100, 252), 99)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 100, 253), 99)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 100, 254), 100)
        self.assertEqual(RemoteValueScaling._calc_from_knx(0, 100, 255), 100)
 def test_value_unit(self):
     """Test for the unit_of_measurement."""
     xknx = XKNX(loop=self.loop)
     remote_value = RemoteValueScaling(xknx)
     self.assertEqual(remote_value.unit_of_measurement, "%")