blob: 9d720fa60a2e10497c1493832fb9595c9d00d67c [file] [log] [blame]
# Copyright 2015 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unit tests for StateChangeDetector."""
from optofidelity.detection import StateChangeDetector
from optofidelity.detection.events import StateChangeEvent, AnalogStateEvent
from .test_detector import DetectorTest
# PreProcess output recorded from example video
change_sequence_1 = [
0.00347824, 0.00130218, 0.00053278, 0.00056810, 0.00117425, 0.00336789,
0.00127787, 0.00066483, 0.00067462, 0.00412031, 0.00455657, 0.00106703,
0.00049847, 0.00048912, 0.00116794, 0.00349118, 0.00119340, 0.00093575,
0.00100451, 0.00204483, 0.00279376, 0.00062749, 0.00057326, 0.00057242,
0.00178059, 0.00303055, 0.00106795, 0.00096390, 0.00096042, 0.00189988,
0.00274776, 0.00111085, 0.00065327, 0.00060079, 0.00203435, 0.00320078,
0.00152150, 0.00043971, 0.00044425, 0.00207842, 0.00339199, 0.00107329,
0.00050823, 0.00053363, 0.00240130, 0.00396788, 0.00119779, 0.00073012,
0.00080402, 0.00203072, 0.00267047, 0.00119540, 0.00040585, 0.00041424,
0.00122819, 0.00297391, 0.00184724, 0.00010041, 0.00016423, 0.00171512,
0.00330200, 0.00081424, 0.00007995, 0.00001608, 0.00000000, 0.00317008,
0.00094716, 0.00088354, 0.00086956, 0.00516213, 0.00547996, 0.00106640,
0.00047504, 0.00049246, 0.00141369, 0.00264750, 0.00185916, 0.00079431,
0.00078450, 0.00232153, 0.00293230, 0.00082235, 0.00065647, 0.00064123,
0.00176944, 0.00305226, 0.00202612, 0.00102933, 0.00099799, 0.00174910,
0.02593319, 0.05430637, 0.06744825, 0.08110544, 0.08721084, 0.09439866,
0.09459204, 0.09416096, 0.09547736, 0.10331900, 0.10448187, 0.10101519,
0.09788287, 0.09814493, 0.10332978, 0.11050909, 0.10520491, 0.10318538,
0.10315405, 0.10806231, 0.10916179, 0.10476584, 0.10313421, 0.10348039,
0.10723974, 0.10948376, 0.10469930, 0.10133333, 0.10156623, 0.10991812,
0.10975871, 0.10454227, 0.10383158, 0.10364129, 0.10731385, 0.10927433,
0.10559126, 0.10479777, 0.10499379, 0.11124797, 0.11142010, 0.10469314,
0.10386540, 0.10383323, 0.10757521, 0.10945444, 0.10408906, 0.10290318,
0.10290444, 0.10723487, 0.10839373, 0.09818906, 0.09806091, 0.09815092,
0.10218275, 0.10036981, 0.09241706, 0.08973892, 0.09001418, 0.09544218,
0.07454016, 0.02823926, 0.01445453, 0.00872970, 0.00909226, 0.00817691,
0.00285339, 0.00225739, 0.00213303, 0.00294443, 0.00435523, 0.00156762,
0.00074638, 0.00060085, 0.00206071, 0.00474998, 0.00111854, 0.00071442,
0.00072192, 0.00245570, 0.00375909, 0.00091994, 0.00087931, 0.00089672,
0.00203486, 0.00364873, 0.00190578, 0.00051891, 0.00053754, 0.00288633
]
change_sequence_pwm = [
0.0045, 0.0094, 0.0122, 0.0033, 0.0044, 0.0046, 0.0086, 0.0106, 0.0025,
0.0035, 0.0037, 0.0093, 0.0101, 0.0029, 0.0032, 0.0035, 0.0077, 0.0105,
0.0032, 0.0019, 0.0032, 0.0087, 0.0117, 0.0037, 0.0034, 0.0037, 0.0081,
0.0117, 0.0036, 0.0029, 0.0032, 0.0064, 0.0120, 0.0018, 0.0022, 0.0024,
0.0065, 0.0103, 0.0025, 0.0028, 0.0027, 0.0057, 0.0119, 0.0023, 0.0016,
0.0018, 0.0059, 0.0088, 0.0024, 0.0020, 0.0026, 0.0044, 0.0096, 0.0041,
0.0017, 0.0026, 0.0044, 0.0124, 0.0055, 0.0020, 0.0034, 0.0044, 0.0090,
0.0057, 0.0016, 0.0025, 0.0057, 0.0119, 0.0079, 0.0040, 0.0055, 0.0054,
0.0111, 0.0079, 0.0045, 0.0045, 0.0049, 0.0104, 0.0059, 0.0018, 0.0024,
0.0024, 0.0075, 0.0058, 0.0020, 0.0014, 0.0022, 0.0070, 0.0058, 0.0017,
0.0021, 0.0033, 0.0097, 0.0116, 0.0038, 0.0040, 0.0042, 0.0102, 0.0110,
0.0038, 0.0035, 0.0038, 0.0097, 0.0113, 0.0037, 0.0025, 0.0027, 0.0088,
0.0103, 0.0033, 0.0028, 0.0032, 0.0082, 0.0109, 0.0011, 0.0010, 0.0017,
0.0055, 0.0083, 0.0005, 0.0015, 0.0021, 0.0057, 0.0077, 0.0009, 0.0013,
0.0017, 0.0061, 0.0111, 0.0016, 0.0022, 0.0023, 0.0062, 0.0094, 0.0023,
0.0022, 0.0023, 0.0058, 0.0109, 0.0620, 0.1146, 0.1143, 0.1117, 0.1108,
0.1125, 0.1220, 0.1215, 0.1186, 0.1176, 0.1164, 0.1225, 0.1223, 0.1199,
0.1214, 0.1151, 0.1221, 0.1226, 0.1178, 0.1182, 0.1149, 0.1224, 0.1209,
0.1216, 0.1204, 0.1189, 0.1254, 0.1235, 0.1229, 0.1218, 0.1178, 0.1261,
0.1237, 0.1236, 0.1207, 0.1169, 0.1252, 0.1211, 0.1222, 0.1197, 0.1178,
0.1241, 0.1211, 0.1217, 0.1209, 0.1202, 0.1248, 0.1221, 0.1220, 0.1204,
0.1202, 0.1221, 0.1215, 0.1211, 0.1191, 0.1221, 0.1244, 0.1230, 0.1234,
0.1227, 0.1215, 0.1230, 0.1225, 0.1234, 0.1214, 0.1212, 0.1176, 0.1196,
0.1208, 0.1198, 0.1187, 0.1096, 0.1116, 0.1136, 0.1112, 0.1129, 0.0263,
0.0084, 0.0098, 0.0172, 0.0179, 0.0041, 0.0027, 0.0040, 0.0041, 0.0114,
0.0026, 0.0026, 0.0027, 0.0039, 0.0090, 0.0020, 0.0031, 0.0035, 0.0030,
0.0088, 0.0030, 0.0020, 0.0026, 0.0026, 0.0068, 0.0056, 0.0023, 0.0027,
]
change_sequence_noisy = [
0.0111, 0.0118, 0.0105, 0.0084, 0.0074, 0.0126, 0.0140, 0.0098, 0.0081,
0.0090, 0.0134, 0.0158, 0.0104, 0.0091, 0.0100, 0.0150, 0.0135, 0.0099,
0.0106, 0.0096, 0.0145, 0.0150, 0.0099, 0.0087, 0.0097, 0.0141, 0.0140,
0.0085, 0.0082, 0.0099, 0.0139, 0.0139, 0.0090, 0.0086, 0.0109, 0.0132,
0.0126, 0.0082, 0.0089, 0.0106, 0.0156, 0.0141, 0.0088, 0.0095, 0.0108,
0.0146, 0.0110, 0.0084, 0.0087, 0.0124, 0.0150, 0.0140, 0.0112, 0.0099,
0.0122, 0.0153, 0.0102, 0.0086, 0.0099, 0.0143, 0.0150, 0.0120, 0.0113,
0.0095, 0.0142, 0.0152, 0.0101, 0.0096, 0.0099, 0.0153, 0.0133, 0.0082,
0.0080, 0.0114, 0.0161, 0.0153, 0.0115, 0.0082, 0.0117, 0.0140, 0.0128,
0.0087, 0.0092, 0.0117, 0.0138, 0.0118, 0.0078, 0.0081, 0.0125, 0.0163,
0.0125, 0.0095, 0.0086, 0.0119, 0.0138, 0.0107, 0.0096, 0.0099, 0.0162,
0.0165, 0.0109, 0.0122, 0.0109, 0.0149, 0.0152, 0.0098, 0.0107, 0.0106,
0.0152, 0.0126, 0.0093, 0.0126, 0.0119, 0.0174, 0.0133, 0.0358, 0.0327,
0.0314, 0.0389, 0.0397, 0.0329, 0.0298, 0.0317, 0.0394, 0.0399, 0.0324,
0.0281, 0.0319, 0.0399, 0.0373, 0.0329, 0.0280, 0.0332, 0.0393, 0.0345,
0.0315, 0.0281, 0.0350, 0.0414, 0.0346, 0.0312, 0.0293, 0.0347, 0.0404,
0.0326, 0.0305, 0.0284, 0.0358, 0.0386, 0.0311, 0.0342, 0.0280, 0.0362,
0.0393, 0.0306, 0.0339, 0.0284, 0.0366, 0.0386, 0.0309, 0.0318, 0.0286,
0.0381, 0.0400, 0.0302, 0.0297, 0.0308, 0.0388, 0.0379, 0.0288, 0.0286,
0.0315, 0.0394, 0.0370, 0.0287, 0.0268, 0.0320, 0.0400, 0.0352, 0.0273,
0.0262, 0.0359, 0.0423, 0.0354, 0.0319, 0.0288, 0.0369, 0.0426, 0.0345,
0.0305, 0.0279, 0.0192, 0.0241, 0.0200, 0.0202, 0.0108, 0.0143, 0.0128,
0.0089, 0.0097, 0.0095, 0.0141, 0.0150, 0.0114, 0.0090, 0.0103, 0.0131,
0.0144, 0.0096, 0.0085, 0.0100, 0.0134, 0.0113, 0.0071, 0.0090, 0.0101,
0.0139, 0.0119, 0.0088, 0.0083, 0.0113, 0.0142, 0.0105, 0.0075, 0.0101,
0.0117, 0.0159, 0.0115, 0.0081, 0.0101, 0.0126, 0.0166, 0.0107, 0.0105,
0.0109, 0.0149, 0.0137, 0.0097, 0.0099, 0.0112, 0.0144, 0.0122, 0.0087,
]
change_sequence_multilevel = [
0.0106, 0.0119, 0.0149, 0.0138, 0.0132, 0.0115, 0.0141, 0.0152, 0.0136,
0.0129, 0.0116, 0.0142, 0.0152, 0.0136, 0.0121, 0.0113, 0.0134, 0.0132,
0.0128, 0.0119, 0.0110, 0.0142, 0.0150, 0.0133, 0.0128, 0.0122, 0.0144,
0.0127, 0.0138, 0.0150, 0.0123, 0.0145, 0.0126, 0.0124, 0.0131, 0.0144,
0.0156, 0.0132, 0.0118, 0.0137, 0.0119, 0.0129, 0.0134, 0.0123, 0.0137,
0.0154, 0.0142, 0.0147, 0.0142, 0.0153, 0.0152, 0.0124, 0.0134, 0.0126,
0.0157, 0.0156, 0.0125, 0.0122, 0.0118, 0.0146, 0.0136, 0.0133, 0.0120,
0.0128, 0.0150, 0.0123, 0.0118, 0.0110, 0.0126, 0.0151, 0.0146, 0.0120,
0.0122, 0.0143, 0.0157, 0.0129, 0.0119, 0.0114, 0.0124, 0.0132, 0.0131,
0.0116, 0.0119, 0.0132, 0.0133, 0.0123, 0.0103, 0.0112, 0.0143, 0.0136,
0.0135, 0.0116, 0.0130, 0.0156, 0.0146, 0.0149, 0.0127, 0.0145, 0.0148,
0.0119, 0.0125, 0.0111, 0.0123, 0.0128, 0.0132, 0.0133, 0.0112, 0.0126,
0.0129, 0.0129, 0.0133, 0.0120, 0.0138, 0.0130, 0.0141, 0.0147, 0.0124,
0.0158, 0.0127, 0.0131, 0.0152, 0.0140, 0.0150, 0.0127, 0.0118, 0.0144,
0.0124, 0.0130, 0.0132, 0.0125, 0.0143, 0.0139, 0.0127, 0.0136, 0.0126,
0.0144, 0.0140, 0.0124, 0.0126, 0.0124, 0.0143, 0.0143, 0.0124, 0.0119,
0.0119, 0.0138, 0.0133, 0.0127, 0.0118, 0.0125, 0.0158, 0.0134, 0.0121,
0.0123, 0.0127, 0.0144, 0.0131, 0.0125, 0.0123, 0.0146, 0.0157, 0.0131,
0.0114, 0.0113, 0.0140, 0.0151, 0.0126, 0.0108, 0.0122, 0.0137, 0.0134,
0.0116, 0.0098, 0.0111, 0.0150, 0.0138, 0.0135, 0.0114, 0.0130, 0.0142,
0.0135, 0.0142, 0.0122, 0.0133, 0.0140, 0.0122, 0.0120, 0.0105, 0.0123,
0.0138, 0.0126, 0.0120, 0.0453, 0.0524, 0.0517, 0.0525, 0.0508, 0.0527,
0.0584, 0.0537, 0.0518, 0.0545, 0.0544, 0.0599, 0.0557, 0.0517, 0.0545,
0.0551, 0.0587, 0.0544, 0.0509, 0.0543, 0.0564, 0.0542, 0.0517, 0.0501,
0.0543, 0.0563, 0.0524, 0.0502, 0.0502, 0.0547, 0.0577, 0.0513, 0.0476,
0.0514, 0.0542, 0.0573, 0.0496, 0.0474, 0.0520, 0.0559, 0.0584, 0.0472,
0.0479, 0.0533, 0.0570, 0.0591, 0.0472, 0.0497, 0.0534, 0.0589, 0.0584,
0.0434, 0.0490, 0.0535, 0.0574, 0.0581, 0.0433, 0.0512, 0.0556, 0.0590,
0.0610, 0.0447, 0.0523, 0.0561, 0.0582, 0.0602, 0.0458, 0.0527, 0.0576,
0.0574, 0.0584, 0.0478, 0.0548, 0.0596, 0.0563, 0.0551, 0.0121, 0.0143,
0.0155, 0.0141, 0.0130, 0.0122, 0.0150, 0.0139, 0.0127, 0.0122, 0.0109,
0.0133, 0.0137, 0.0131, 0.0136, 0.0118, 0.0139, 0.0122, 0.0130, 0.0135,
0.0137, 0.0143, 0.0123, 0.0123, 0.0129, 0.0135, 0.0139, 0.0129, 0.0119,
0.0159, 0.0144, 0.0143, 0.0136, 0.0122, 0.0139, 0.0124, 0.0126, 0.0132,
0.0125, 0.0154, 0.0143, 0.0123, 0.0129, 0.0122, 0.0149, 0.0138, 0.0133,
0.0119, 0.0125, 0.0146, 0.0123, 0.0124, 0.0111, 0.0145, 0.0158, 0.0139,
0.0122, 0.0120, 0.0138, 0.0156, 0.0139, 0.0120, 0.0118, 0.0146, 0.0151,
0.0125, 0.0115, 0.0108, 0.0136, 0.0123, 0.0127, 0.0105, 0.0120, 0.0142,
0.0130, 0.0127, 0.0354, 0.0361, 0.0413, 0.0421, 0.0421, 0.0365, 0.0404,
0.0450, 0.0443, 0.0430, 0.0373, 0.0423, 0.0454, 0.0442, 0.0427, 0.0392,
0.0453, 0.0453, 0.0451, 0.0440, 0.0401, 0.0463, 0.0439, 0.0415, 0.0416,
0.0398, 0.0462, 0.0431, 0.0403, 0.0421, 0.0415, 0.0466, 0.0448, 0.0400,
0.0421, 0.0432, 0.0445, 0.0414, 0.0385, 0.0417, 0.0440, 0.0426, 0.0402,
0.0387, 0.0413, 0.0442, 0.0418, 0.0382, 0.0385, 0.0417, 0.0453, 0.0416,
0.0368, 0.0398, 0.0433, 0.0461, 0.0403, 0.0368, 0.0404, 0.0453, 0.0480,
0.0379, 0.0373, 0.0409, 0.0461, 0.0457, 0.0353, 0.0372, 0.0418, 0.0464,
0.0458, 0.0344, 0.0375, 0.0424, 0.0465, 0.0474, 0.0121, 0.0127, 0.0152,
0.0134, 0.0144, 0.0106, 0.0111, 0.0144, 0.0132, 0.0131, 0.0114, 0.0140,
0.0153, 0.0139, 0.0151, 0.0126, 0.0145, 0.0155, 0.0130, 0.0125, 0.0114,
0.0140, 0.0145, 0.0130, 0.0128, 0.0114, 0.0127, 0.0131, 0.0128, 0.0125,
0.0127, 0.0145, 0.0133, 0.0128, 0.0136, 0.0123, 0.0137, 0.0125, 0.0131,
0.0137, 0.0137, 0.0143, 0.0130, 0.0118, 0.0133, 0.0136, 0.0144, 0.0127,
0.0119, 0.0141, 0.0129, 0.0133, 0.0142, 0.0122, 0.0140, 0.0136, 0.0124,
]
class StateChangeDetectorTest(DetectorTest):
def testEventGeneration(self):
expected_events = [
StateChangeEvent(95, 90, StateChangeEvent.STATE_OPEN),
StateChangeEvent(156, 150, StateChangeEvent.STATE_CLOSED),
]
self.assertExpectedEventsGenerated(StateChangeDetector(None, None),
change_sequence_1, expected_events,
ignore=AnalogStateEvent)
def testPWMProofEvents(self):
expected_events = [
StateChangeEvent(140, 138, StateChangeEvent.STATE_OPEN),
StateChangeEvent(216, 215, StateChangeEvent.STATE_CLOSED),
]
self.assertExpectedEventsGenerated(StateChangeDetector(None, None),
change_sequence_pwm, expected_events,
ignore=AnalogStateEvent)
def testNoisyEventGeneration(self):
expected_events = [
StateChangeEvent(115, 115, StateChangeEvent.STATE_OPEN),
StateChangeEvent(195, 193, StateChangeEvent.STATE_CLOSED),
]
self.assertExpectedEventsGenerated(StateChangeDetector(None, None),
change_sequence_noisy, expected_events,
ignore=AnalogStateEvent)
def testMultilevelEventGeneration(self):
expected_events = [
StateChangeEvent(193, 192, StateChangeEvent.STATE_OPEN),
StateChangeEvent(268, 268, StateChangeEvent.STATE_CLOSED),
StateChangeEvent(346, 344, StateChangeEvent.STATE_OPEN),
StateChangeEvent(420, 420, StateChangeEvent.STATE_CLOSED),
]
self.assertExpectedEventsGenerated(StateChangeDetector(None, None),
change_sequence_multilevel, expected_events,
ignore=AnalogStateEvent)