You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.4 KiB
76 lines
2.4 KiB
import random
|
|
import numpy as np
|
|
|
|
import boardd_old
|
|
import selfdrive.boardd.boardd as boardd
|
|
|
|
from common.realtime import sec_since_boot
|
|
from cereal import log
|
|
import unittest
|
|
|
|
|
|
def generate_random_can_data_list():
|
|
can_list = []
|
|
cnt = random.randint(1, 64)
|
|
for j in xrange(cnt):
|
|
can_data = np.random.bytes(random.randint(1, 8))
|
|
can_list.append([random.randint(0, 128), random.randint(0, 128), can_data, random.randint(0, 128)])
|
|
return can_list, cnt
|
|
|
|
|
|
class TestBoarddApiMethods(unittest.TestCase):
|
|
def test_correctness(self):
|
|
for i in xrange(1000):
|
|
can_list, _ = generate_random_can_data_list()
|
|
|
|
# Sendcan
|
|
# Old API
|
|
m_old = boardd_old.can_list_to_can_capnp(can_list, 'sendcan').to_bytes()
|
|
# new API
|
|
m = boardd.can_list_to_can_capnp(can_list, 'sendcan')
|
|
|
|
ev_old = log.Event.from_bytes(m_old)
|
|
ev = log.Event.from_bytes(m)
|
|
self.assertEqual(ev_old.which(), ev.which())
|
|
self.assertEqual(len(ev.sendcan), len(ev_old.sendcan))
|
|
for i in xrange(len(ev.sendcan)):
|
|
attrs = ['address', 'busTime', 'dat', 'src']
|
|
for attr in attrs:
|
|
self.assertEqual(getattr(ev.sendcan[i], attr, 'new'), getattr(ev_old.sendcan[i], attr, 'old'))
|
|
|
|
# Can
|
|
m_old = boardd_old.can_list_to_can_capnp(can_list, 'can').to_bytes()
|
|
# new API
|
|
m = boardd.can_list_to_can_capnp(can_list, 'can')
|
|
|
|
ev_old = log.Event.from_bytes(m_old)
|
|
ev = log.Event.from_bytes(m)
|
|
self.assertEqual(ev_old.which(), ev.which())
|
|
self.assertEqual(len(ev.can), len(ev_old.can))
|
|
for i in xrange(len(ev.can)):
|
|
attrs = ['address', 'busTime', 'dat', 'src']
|
|
for attr in attrs:
|
|
self.assertEqual(getattr(ev.can[i], attr, 'new'), getattr(ev_old.can[i], attr, 'old'))
|
|
|
|
def test_performance(self):
|
|
can_list, cnt = generate_random_can_data_list()
|
|
recursions = 1000
|
|
|
|
n1 = sec_since_boot()
|
|
for i in xrange(recursions):
|
|
boardd_old.can_list_to_can_capnp(can_list, 'sendcan').to_bytes()
|
|
n2 = sec_since_boot()
|
|
elapsed_old = n2 - n1
|
|
|
|
# print('Old API, elapsed time: {} secs'.format(elapsed_old))
|
|
n1 = sec_since_boot()
|
|
for i in xrange(recursions):
|
|
boardd.can_list_to_can_capnp(can_list)
|
|
n2 = sec_since_boot()
|
|
elapsed_new = n2 - n1
|
|
# print('New API, elapsed time: {} secs'.format(elapsed_new))
|
|
self.assertTrue(elapsed_new < elapsed_old / 2)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|
|
|