Exemplo n.º 1
0
def test_process_B_record():

    """Check whether correct extension information is taken from B record"""

    # split up per extension for easy reading
    i_record = 'I08' + '3638FXA' + '3941ENL' + '4246TAS' + '4751GSP' + '5254TRT' + '5559VAT' + '6063OAT' + '6467ACZ'
    fix_record_extensions = LowLevelReader.decode_I_record(i_record)

    # split up per 10 to enable easy counting
    b_record = 'B093232520' + '2767N00554' + '786EA00128' '0019600600' '1145771529' + '3177005930' + '2770090'

    decoded_b_record = LowLevelReader.decode_B_record(b_record)
    processed_b_record = LowLevelReader.process_B_record(decoded_b_record, fix_record_extensions)

    # split per extension: 006 001 14577 15293 177 00593 0277 0090
    expected_values = [
        ('FXA', (36, 38), 6),
        ('ENL', (39, 41), 1),
        ('TAS', (42, 46), 14577),
        ('GSP', (47, 51), 15293),
        ('TRT', (52, 54), 177),
        ('VAT', (55, 59), 593),
        ('OAT', (60, 63), 277),
        ('ACZ', (64, 67), 90),
    ]

    for extension, bytes, expected_value in expected_values:
        assert {'bytes': bytes, 'extension_type': extension} in fix_record_extensions
        assert extension in processed_b_record
        assert expected_value == processed_b_record[extension]
Exemplo n.º 2
0
def test_process_B_record():
    """Check whether correct extension information is taken from B record"""

    # split up per extension for easy reading
    i_record = 'I08' + '3638FXA' + '3941ENL' + '4246TAS' + '4751GSP' + '5254TRT' + '5559VAT' + '6063OAT' + '6467ACZ'
    fix_record_extensions = LowLevelReader.decode_I_record(i_record)

    # split up per 10 to enable easy counting
    b_record = 'B093232520' + '2767N00554' + '786EA00128' '0019600600' '1145771529' + '3177005930' + '2770090'

    decoded_b_record = LowLevelReader.decode_B_record(b_record)
    processed_b_record = LowLevelReader.process_B_record(
        decoded_b_record, fix_record_extensions)

    # split per extension: 006 001 14577 15293 177 00593 0277 0090
    expected_values = [
        ('FXA', (36, 38), 6),
        ('ENL', (39, 41), 1),
        ('TAS', (42, 46), 14577),
        ('GSP', (47, 51), 15293),
        ('TRT', (52, 54), 177),
        ('VAT', (55, 59), 593),
        ('OAT', (60, 63), 277),
        ('ACZ', (64, 67), 90),
    ]

    for extension, bytes, expected_value in expected_values:
        assert {
            'bytes': bytes,
            'extension_type': extension
        } in fix_record_extensions
        assert extension in processed_b_record
        assert expected_value == processed_b_record[extension]
Exemplo n.º 3
0
def test_decode_H_competition_class():
    line = 'HFCCLCOMPETITIONCLASS:15m Motor Glider\r\n'
    expected_result = {
        'competition_class': '15m Motor Glider'
    }

    assert LowLevelReader.decode_H_competition_class(line) == expected_result
Exemplo n.º 4
0
def test_decode_H_hardware_revision():
    line = 'HFRHWHARDWAREVERSION:3.0\r\n'
    expected_result = {
        'hardware_revision': '3.0'
    }

    assert LowLevelReader.decode_H_hardware_revision(line) == expected_result
Exemplo n.º 5
0
def test_decode_H_site():
    line = 'HFSITSite: lk15comp\r\n'
    expected_result = {
        'site': 'lk15comp'
    }

    assert LowLevelReader.decode_H_site(line) == expected_result
Exemplo n.º 6
0
def test_decode_H_time_zone_offset2():
    line = 'HFTZNTIMEZONE:11.00\r\n'
    expected_result = {
        'time_zone_offset': 11
    }

    assert LowLevelReader.decode_H_time_zone_offset(line) == expected_result
Exemplo n.º 7
0
def test_decode_H_mop_sensor():
    line = 'HFMOPSENSOR:MOP-(SN:1,ET=1375,0,1375,0,3.05V,p=0),Ver:0\r\n'
    expected_result = {
        'mop_sensor': 'MOP-(SN:1,ET=1375,0,1375,0,3.05V,p=0),Ver:0'
    }

    assert LowLevelReader.decode_H_mop_sensor(line) == expected_result
Exemplo n.º 8
0
def test_decode_H_utc_date():
    line = 'HFDTE160701\r\n'
    expected_result = {
        'utc_date': datetime.date(2001, 7, 16)
    }

    assert LowLevelReader.decode_H_utc_date(line) == expected_result
Exemplo n.º 9
0
def test_decode_H_competition_id():
    line = 'HFCIDCOMPETITIONID: XYZ-78910\r\n'
    expected_result = {
        'competition_id': 'XYZ-78910'
    }

    assert LowLevelReader.decode_H_competition_id(line) == expected_result
Exemplo n.º 10
0
def test_decode_J_record():
    line = 'J010812HDT\r\n'
    expected_result = [
        {'bytes': (8, 12), 'extension_type': 'HDT'}
    ]

    assert LowLevelReader.decode_J_record(line) == expected_result
Exemplo n.º 11
0
def test_decode_H_firmware_revision():
    line = 'HFRFWFIRMWAREVERSION:6.4\r\n'
    expected_result = {
        'firmware_revision': '6.4'
    }

    assert LowLevelReader.decode_H_firmware_revision(line) == expected_result
Exemplo n.º 12
0
def test_decode_H_units_of_measure():
    line = 'HFUNTUnits: km,ft,kt'
    expected_result = {
        'units_of_measure': ['km', 'ft', 'kt']
    }

    assert LowLevelReader.decode_H_units_of_measure(line) == expected_result
Exemplo n.º 13
0
def test_decode_H_glider_registration():
    line = 'HFGIDGLIDERID: ABCD-1234\r\n'
    expected_result = {
        'glider_registration': 'ABCD-1234'
    }

    assert LowLevelReader.decode_H_glider_registration(line) == expected_result
Exemplo n.º 14
0
def test_decode_H_gps_datum():
    line = 'HFDTM100GPSDATUM: WGS-1984\r\n'
    expected_result = {
        'gps_datum': 'WGS-1984'
    }

    assert LowLevelReader.decode_H_gps_datum(line) == expected_result
Exemplo n.º 15
0
def test_decode_H_glider_model():
    line = 'HFGTYGLIDERTYPE: Schleicher ASH-25\r\n'
    expected_result = {
        'glider_model': 'Schleicher ASH-25'
    }

    assert LowLevelReader.decode_H_glider_model(line) == expected_result
Exemplo n.º 16
0
def test_decode_H_copilot():
    line = 'HFCM2CREW2: Smith-Barry John A\r\n'
    expected_result = {
        'copilot': 'Smith-Barry John A'
    }

    assert LowLevelReader.decode_H_copilot(line) == expected_result
Exemplo n.º 17
0
def test_decode_H_pilot():
    line = 'HFPLTPILOTINCHARGE: Bloggs Bill D\r\n'
    expected_result = {
        'pilot': 'Bloggs Bill D'
    }

    assert LowLevelReader.decode_H_pilot(line) == expected_result
Exemplo n.º 18
0
def test_decode_H_mop_sensor():
    line = 'HFMOPSENSOR:MOP-(SN:1,ET=1375,0,1375,0,3.05V,p=0),Ver:0\r\n'
    expected_result = {
        'mop_sensor': 'MOP-(SN:1,ET=1375,0,1375,0,3.05V,p=0),Ver:0'
    }

    assert LowLevelReader.decode_H_mop_sensor(line) == expected_result
Exemplo n.º 19
0
def test_decode_F_record():
    line = 'F160240040609123624221821\r\n'
    expected_result = {
        'time': datetime.time(16, 2, 40),
        'satelites': ['04', '06', '09', '12', '36', '24', '22', '18', '21']
    }

    assert LowLevelReader.decode_F_record(line) == expected_result
Exemplo n.º 20
0
def test_decode_L_record():
    line = 'LXXXRURITANIAN STANDARD NATIONALS DAY 1\r\n'
    expected_result = {
        'source': 'XXX',
        'comment': 'RURITANIAN STANDARD NATIONALS DAY 1'
    }

    assert LowLevelReader.decode_L_record(line) == expected_result
Exemplo n.º 21
0
def test_decode_H_manufacturer_model():
    line = 'HFFTYFRTYPE: Manufacturer, Model\r\n'
    expected_result = {
        'logger_manufacturer': 'Manufacturer',
        'logger_model': 'Model'
    }

    assert LowLevelReader.decode_H_manufacturer_model(line) == expected_result
Exemplo n.º 22
0
def test_decode_H_manufacturer_model():
    line = 'HFFTYFRTYPE: Manufacturer, Model\r\n'
    expected_result = {
        'logger_manufacturer': 'Manufacturer',
        'logger_model': 'Model'
    }

    assert LowLevelReader.decode_H_manufacturer_model(line) == expected_result
Exemplo n.º 23
0
def test_decode_H_record():
    line = 'HFFXA035\r\n'
    expected_result = {
        'source': 'F',
        'fix_accuracy': 35
    }

    assert LowLevelReader.decode_H_record(line) == expected_result
Exemplo n.º 24
0
def test_decode_F_record():
    line = 'F160240040609123624221821\r\n'
    expected_result = {
        'time': datetime.time(16, 2, 40),
        'satellites': ['04', '06', '09', '12', '36', '24', '22', '18', '21']
    }

    assert LowLevelReader.decode_F_record(line) == expected_result
Exemplo n.º 25
0
def test_decode_D_record():
    line = 'D20331\r\n'
    expected_result = {
        'qualifier': 'DGPS',
        'station_id': '0331'
    }

    assert LowLevelReader.decode_D_record(line) == expected_result
Exemplo n.º 26
0
def test_decode_L_record():
    line = 'LXXXRURITANIAN STANDARD NATIONALS DAY 1\r\n'
    expected_result = {
        'source': 'XXX',
        'comment': 'RURITANIAN STANDARD NATIONALS DAY 1'
    }

    assert LowLevelReader.decode_L_record(line) == expected_result
Exemplo n.º 27
0
def test_decode_E_record():
    line = 'E160245PEV\r\n'
    expected_result = {
        'time': datetime.time(16, 2, 45),
        'tlc': 'PEV',
        'extension_string': ''
    }

    assert LowLevelReader.decode_E_record(line) == expected_result
Exemplo n.º 28
0
def test_decode_A_record():
    line = 'AXXXABC FLIGHT:1\r\n'
    expected_result = {
        'manufacturer': 'XXX',
        'id': 'ABC',
        'id_addition': 'FLIGHT:1'
    }

    assert LowLevelReader.decode_A_record(line) == expected_result
Exemplo n.º 29
0
def test_decode_A_record():
    line = 'AXXXABC FLIGHT:1\r\n'
    expected_result = {
        'manufacturer': 'XXX',
        'id': 'ABC',
        'id_addition': 'FLIGHT:1'
    }

    assert LowLevelReader.decode_A_record(line) == expected_result
Exemplo n.º 30
0
def test_decode_K_record():
    line = 'K16024800090\r\n'
    expected_result = {
        'time': datetime.time(16, 2, 48),
        'value_string': '00090',
        'start_index': 7
    }

    assert LowLevelReader.decode_K_record(line) == expected_result
Exemplo n.º 31
0
def test_decode_invalid_B_record():
    """Test whether decoding invalid B record raise Error"""

    invalid_b_records = [
        'B1053175438931N0ÿÿÿøÈÐÀÀÜÐáÀÄÈàÔÀÄÈÌØÀÀÜÀÀ',
        'BÿÿÿøÄÀÈÌÄàÐäÐàààÁ8ÀÄÔÀäÈÌå��ÀÄàÔäÀ',
        'B1140ÿÿÿøÌÈÔÐÌÌààÑ8ÀÈÐÈÌàÌÕÀÀääÈÀÀäÔ',
        'B1309044931600N0153ÿÿÿøÐÀÄÍÀÄÔÌØÀÄÔÜØÀÀäÀ',
        'B10470349ÿÿÿøÌÔäØÕ8ÀÄÔÄÈàÜÙÀÄàÐÐÀÄäÀÜÀÀØÀ',
        'B11052249474ÿÿÿøÀÉ8ÀÄÔÀÜÜäÕÀÄÌÐÌÀÄÐÀÈÀÀÔÀ',
        'B12ÿÿÿøÐØÀÌÐäÐÈØäÝ8ÀÄÔÄÜÌÐÑÀÄØÐàÀÄÜÐÀÀÀÜÀÀÀ4)ÄÈ',
        'B1124185148269N9833N00553309EA0084800873000068000000',
        'B1245085122369N00614242EÿÿÿùÀÄÜØÄÀÄàÐäÀÀØÀ',
    ]

    for b_record in invalid_b_records:
        with pytest.raises(ValueError):
            LowLevelReader.decode_B_record(b_record)
Exemplo n.º 32
0
def test_decode_K_record():
    line = 'K16024800090\r\n'
    expected_result = {
        'time': datetime.time(16, 2, 48),
        'value_string': '00090',
        'start_index': 7
    }

    assert LowLevelReader.decode_K_record(line) == expected_result
Exemplo n.º 33
0
def test_decode_invalid_B_record():
    """Test whether decoding invalid B record raise Error"""

    invalid_b_records = [
        'B1053175438931N0ÿÿÿøÈÐÀÀÜÐáÀÄÈàÔÀÄÈÌØÀÀÜÀÀ',
        'BÿÿÿøÄÀÈÌÄàÐäÐàààÁ8ÀÄÔÀäÈÌå��ÀÄàÔäÀ',
        'B1140ÿÿÿøÌÈÔÐÌÌààÑ8ÀÈÐÈÌàÌÕÀÀääÈÀÀäÔ',
        'B1309044931600N0153ÿÿÿøÐÀÄÍÀÄÔÌØÀÄÔÜØÀÀäÀ',
        'B10470349ÿÿÿøÌÔäØÕ8ÀÄÔÄÈàÜÙÀÄàÐÐÀÄäÀÜÀÀØÀ',
        'B11052249474ÿÿÿøÀÉ8ÀÄÔÀÜÜäÕÀÄÌÐÌÀÄÐÀÈÀÀÔÀ',
        'B12ÿÿÿøÐØÀÌÐäÐÈØäÝ8ÀÄÔÄÜÌÐÑÀÄØÐàÀÄÜÐÀÀÀÜÀÀÀ4)ÄÈ',
        'B1124185148269N9833N00553309EA0084800873000068000000',
        'B1245085122369N00614242EÿÿÿùÀÄÜØÄÀÄàÐäÀÀØÀ',
    ]

    for b_record in invalid_b_records:
        with pytest.raises(ValueError):
            LowLevelReader.decode_B_record(b_record)
Exemplo n.º 34
0
def test_decode_I_record():
    line = 'I033638FXA3940SIU4143ENL\r\n'
    expected_result = [
        {'bytes': (36, 38), 'extension_type': 'FXA'},
        {'bytes': (39, 40), 'extension_type': 'SIU'},
        {'bytes': (41, 43), 'extension_type': 'ENL'}
    ]

    assert LowLevelReader.decode_I_record(line) == expected_result
Exemplo n.º 35
0
def test_decode_E_record():
    line = 'E160245PEV\r\n'
    expected_result = {
        'time': datetime.time(16, 2, 45),
        'tlc': 'PEV',
        'extension_string': ''
    }

    assert LowLevelReader.decode_E_record(line) == expected_result
Exemplo n.º 36
0
def test_decode_C_record2():
    line = 'C5111359N00101899W Lasham Clubhouse\r\n'
    expected_result = {
        'subtype': 'waypoint_info',
        'latitude': 51.18931666666667,
        'longitude': -1.03165,
        'description': 'Lasham Clubhouse'
    }

    assert LowLevelReader.decode_C_record(line) == expected_result
Exemplo n.º 37
0
def test_decode_C_record2():
    line = 'C5111359N00101899W Lasham Clubhouse\r\n'
    expected_result = {
        'subtype': 'waypoint_info',
        'latitude': 51.18931666666667,
        'longitude': -1.03165,
        'description': 'Lasham Clubhouse'
    }

    assert LowLevelReader.decode_C_record(line) == expected_result
Exemplo n.º 38
0
def test_decode_H_pressure_sensor2():
    line = 'HFPRSPressAltSensor:Intersema MS5534B,8191\r\n'
    expected_result = {
        'pressure_sensor_manufacturer': 'Intersema',
        'pressure_sensor_model': 'MS5534B',
        'pressure_sensor_max_alt': {
            'value': 8191,
            'unit': 'm'
        }
    }

    assert LowLevelReader.decode_H_pressure_sensor(line) == expected_result
Exemplo n.º 39
0
def test_decode_H_pressure_sensor():
    line = 'HFPRSPRESSALTSENSOR: Sensyn, XYZ1111, max11000m\r\n'
    expected_result = {
        'pressure_sensor_manufacturer': 'Sensyn',
        'pressure_sensor_model': 'XYZ1111',
        'pressure_sensor_max_alt': {
            'value': 11000,
            'unit': 'm'
        }
    }

    assert LowLevelReader.decode_H_pressure_sensor(line) == expected_result
Exemplo n.º 40
0
def test_decode_H_pressure_sensor2():
    line = 'HFPRSPressAltSensor:Intersema MS5534B,8191\r\n'
    expected_result = {
        'pressure_sensor_manufacturer': 'Intersema',
        'pressure_sensor_model': 'MS5534B',
        'pressure_sensor_max_alt': {
            'value': 8191,
            'unit': 'm'
        }
    }

    assert LowLevelReader.decode_H_pressure_sensor(line) == expected_result
Exemplo n.º 41
0
def test_decode_H_pressure_sensor():
    line = 'HFPRSPRESSALTSENSOR: Sensyn, XYZ1111, max11000m\r\n'
    expected_result = {
        'pressure_sensor_manufacturer': 'Sensyn',
        'pressure_sensor_model': 'XYZ1111',
        'pressure_sensor_max_alt': {
            'value': 11000,
            'unit': 'm'
        }
    }

    assert LowLevelReader.decode_H_pressure_sensor(line) == expected_result
Exemplo n.º 42
0
def test_decode_C_record1():
    line = 'C150701213841160701000102 500K Tri\r\n'
    expected_result = {
        'subtype': 'task_info',
        'declaration_date': datetime.date(2001, 7, 15),
        'declaration_time': datetime.time(21, 38, 41),
        'flight_date': datetime.date(2001, 7, 16),
        'number': '0001',
        'num_turnpoints': 2,
        'description': '500K Tri'
    }

    assert LowLevelReader.decode_C_record(line) == expected_result
Exemplo n.º 43
0
def test_decode_H_gps_receiver6():
    line = 'HFGPS:Cambridge 302,\r\n'
    expected_result = {
        'gps_manufacturer': 'Cambridge 302',
        'gps_model': None,
        'gps_channels': None,
        'gps_max_alt': {
            'value': None,
            'unit': None
        }
    }

    assert LowLevelReader.decode_H_gps_receiver(line) == expected_result
Exemplo n.º 44
0
def test_decode_H_gps_receiver4():
    line = 'HFGPS:UBLOX,NEO-6G,16Ch,50000\r\n'
    expected_result = {
        'gps_manufacturer': 'UBLOX',
        'gps_model': 'NEO-6G',
        'gps_channels': 16,
        'gps_max_alt': {
            'value': 50000,
            'unit': 'm'
        }
    }

    assert LowLevelReader.decode_H_gps_receiver(line) == expected_result
Exemplo n.º 45
0
def test_decode_H_gps_receiver3():
    line = 'HFGPS:GlobalTopPA6B,66ch,max18000m\r\n'
    expected_result = {
        'gps_manufacturer': 'GlobalTopPA6B',
        'gps_model': None,
        'gps_channels': 66,
        'gps_max_alt': {
            'value': 18000,
            'unit': 'm'
        }
    }

    assert LowLevelReader.decode_H_gps_receiver(line) == expected_result
Exemplo n.º 46
0
def test_decode_H_gps_receiver2():
    line = 'HFGPS:GLOBALTOP,FGPMMOPA6,66,max18000m\r\n'
    expected_result = {
        'gps_manufacturer': 'GLOBALTOP',
        'gps_model': 'FGPMMOPA6',
        'gps_channels': 66,
        'gps_max_alt': {
            'value': 18000,
            'unit': 'm'
        }
    }

    assert LowLevelReader.decode_H_gps_receiver(line) == expected_result
Exemplo n.º 47
0
def test_decode_H_gps_receiver():
    line = 'HFGPS:MarconiCanada, Superstar, 12ch, max10000m\r\n'
    expected_result = {
        'gps_manufacturer': 'MarconiCanada',
        'gps_model': 'Superstar',
        'gps_channels': 12,
        'gps_max_alt': {
            'value': 10000,
            'unit': 'm'
        }
    }

    assert LowLevelReader.decode_H_gps_receiver(line) == expected_result
Exemplo n.º 48
0
def test_decode_C_record1():
    line = 'C150701213841160701000102 500K Tri\r\n'
    expected_result = {
        'subtype': 'task_info',
        'declaration_date': datetime.date(2001, 7, 15),
        'declaration_time': datetime.time(21, 38, 41),
        'flight_date': datetime.date(2001, 7, 16),
        'number': '0001',
        'num_turnpoints': 2,
        'description': '500K Tri'
    }

    assert LowLevelReader.decode_C_record(line) == expected_result
Exemplo n.º 49
0
def test_decode_B_record():
    line = 'B1602455107126N00149300WA002880042919509020\r\n'
    expected_result = {
        'time': datetime.time(16, 2, 45),
        'lat': 51.118766666666666,
        'lon': -1.8216666666666668,
        'validity': 'A',
        'pressure_alt': 288,
        'gps_alt': 429,
        'start_index_extensions': 35,
        'extensions_string': '19509020'
    }

    assert LowLevelReader.decode_B_record(line) == expected_result
Exemplo n.º 50
0
def test_decode_I_record():
    line = 'I033638FXA3940SIU4143ENL\r\n'
    expected_result = [{
        'bytes': (36, 38),
        'extension_type': 'FXA'
    }, {
        'bytes': (39, 40),
        'extension_type': 'SIU'
    }, {
        'bytes': (41, 43),
        'extension_type': 'ENL'
    }]

    assert LowLevelReader.decode_I_record(line) == expected_result
Exemplo n.º 51
0
def test_decode_longitude():
    assert LowLevelReader.decode_longitude('00657383E') == 6.956383333333333
    assert LowLevelReader.decode_longitude('09942706W') == -99.71176666666666
Exemplo n.º 52
0
def test_decode_latitude():
    assert LowLevelReader.decode_latitude('5117983N') == 51.29971666666667
    assert LowLevelReader.decode_latitude('3356767S') == -33.94611666666667
Exemplo n.º 53
0
def test_decode_H_competition_id():
    line = 'HFCIDCOMPETITIONID: XYZ-78910\r\n'
    expected_result = {'competition_id': 'XYZ-78910'}

    assert LowLevelReader.decode_H_competition_id(line) == expected_result
Exemplo n.º 54
0
def test_decode_H_competition_class():
    line = 'HFCCLCOMPETITIONCLASS:15m Motor Glider\r\n'
    expected_result = {'competition_class': '15m Motor Glider'}

    assert LowLevelReader.decode_H_competition_class(line) == expected_result
Exemplo n.º 55
0
def test_decode_J_record():
    line = 'J010812HDT\r\n'
    expected_result = [{'bytes': (8, 12), 'extension_type': 'HDT'}]

    assert LowLevelReader.decode_J_record(line) == expected_result
Exemplo n.º 56
0
def test_decode_H_units_of_measure():
    line = 'HFUNTUnits: km,ft,kt'
    expected_result = {'units_of_measure': ['km', 'ft', 'kt']}

    assert LowLevelReader.decode_H_units_of_measure(line) == expected_result
Exemplo n.º 57
0
def test_decode_H_site():
    line = 'HFSITSite: lk15comp\r\n'
    expected_result = {'site': 'lk15comp'}

    assert LowLevelReader.decode_H_site(line) == expected_result
Exemplo n.º 58
0
def test_decode_H_firmware_revision():
    line = 'HFRFWFIRMWAREVERSION:6.4\r\n'
    expected_result = {'firmware_revision': '6.4'}

    assert LowLevelReader.decode_H_firmware_revision(line) == expected_result
Exemplo n.º 59
0
def test_decode_H_time_zone_offset2():
    line = 'HFTZNTIMEZONE:11.00\r\n'
    expected_result = {'time_zone_offset': 11}

    assert LowLevelReader.decode_H_time_zone_offset(line) == expected_result
Exemplo n.º 60
0
def test_decode_H_hardware_revision():
    line = 'HFRHWHARDWAREVERSION:3.0\r\n'
    expected_result = {'hardware_revision': '3.0'}

    assert LowLevelReader.decode_H_hardware_revision(line) == expected_result