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}]})