32 lines
1.6 KiB
Python
32 lines
1.6 KiB
Python
from pathlib import Path
|
|
from unittest import TestCase
|
|
from arm_application.tactile_calibration import ForceCurve,TactileCalibration
|
|
|
|
|
|
class TactileCalibrationTest(TestCase):
|
|
def setUp(self):
|
|
path=Path(__file__).resolve().parents[2]/'src/arm_application/config/tactile/force_calibration.json'
|
|
self.calibration=TactileCalibration(path)
|
|
|
|
def test_calibration_knots_units_and_shear_sign(self):
|
|
self.assertAlmostEqual(self.calibration.normal.convert(10000),.377)
|
|
self.assertAlmostEqual(self.calibration.normal.convert(30000),1.377)
|
|
self.assertAlmostEqual(self.calibration.shear.convert(36000),1.19)
|
|
self.assertAlmostEqual(self.calibration.shear.convert(-36000),-1.19)
|
|
self.assertEqual(self.calibration.normal.convert(0),0.)
|
|
self.assertEqual(self.calibration.shear.convert(-500),0.)
|
|
|
|
def test_interpolation_and_conversion_never_replace_raw_values(self):
|
|
raw={'fnormal':20000.,'fshearx':52000.,'fsheary':-52000.}
|
|
saved=dict(raw);force=self.calibration.convert(raw)
|
|
self.assertAlmostEqual(force['fnormal'],.877)
|
|
self.assertAlmostEqual(force['fshearx'],1.625)
|
|
self.assertAlmostEqual(force['fsheary'],-1.625)
|
|
self.assertEqual(raw,saved)
|
|
with self.assertRaises(ValueError):self.calibration.normal.convert(float('nan'))
|
|
|
|
def test_invalid_or_disabled_curve_does_not_mislabel_raw_as_newtons(self):
|
|
with self.assertRaises(ValueError):ForceCurve.from_config({'enabled':False})
|
|
with self.assertRaises(ValueError):ForceCurve.from_config({'enabled':True,'method':'piecewise_linear',
|
|
'points':[{'raw':1,'force_n':0},{'raw':1,'force_n':1}]})
|