
// Copyright (C) 2019 YesLogic Pty. Ltd.
// Copyright 2000-2016 Adobe Systems Incorporated. All Rights Reserved.
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use these files except in compliance with the License.
// You may obtain a copy of the License at
// 
//  http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// This file is automatically @generated by aots2testrust.xsl
// It is not intended for manual editing.

    
#[test]
fn lookupflag_ignore_base_t1() {
    gsub_test(
        "lookupflag_ignore_base_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21],
        &[17, 23,         21]
    )
}

#[test]
fn lookupflag_ignore_base_t2() {
    gsub_test(
        "lookupflag_ignore_base_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 24, 24, 19, 25, 20, 21],
        &[17, 23, 24, 24,     25,     21]
    )
}

#[test]
fn lookupflag_ignore_ligatures_t1() {
    gsub_test(
        "lookupflag_ignore_ligatures_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 26, 27, 19, 27, 20, 21],
        &[17, 23, 26, 27,     27,     21]
    )
}

#[test]
fn lookupflag_ignore_ligatures_t2() {
    gsub_test(
        "lookupflag_ignore_ligatures_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 26, 24, 19, 27, 20, 21],
        &[17, 18, 26, 24, 19, 27, 20, 21]
    )
}

#[test]
fn lookupflag_ignore_ligatures_t3() {
    gsub_test(
        "lookupflag_ignore_ligatures_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 26, 42, 19, 27, 20, 21],
        &[17, 18, 26, 42, 19, 27, 20, 21]
    )
}

#[test]
fn lookupflag_ignore_marks_t1() {
    gsub_test(
        "lookupflag_ignore_marks_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 28, 29, 19, 29, 20, 21],
        &[17, 23, 28, 29,     29,     21]
    )
}

#[test]
fn lookupflag_ignore_attach_t1() {
    gsub_test(
        "lookupflag_ignore_attach_f1.otf",
        "latn", "UNKN", "test",
        &[10, 11, 13, 26, 10],
        &[10, 15,         10]
    )
}

#[test]
fn lookupflag_ignore_attach_t2() {
    gsub_test(
        "lookupflag_ignore_attach_f1.otf",
        "latn", "UNKN", "test",
        &[10, 11, 21, 13, 22, 23, 29, 26, 10],
        &[10, 15, 21,     22, 23, 29,     10]
    )
}

#[test]
fn lookupflag_ignore_attach_t3() {
    gsub_test(
        "lookupflag_ignore_attach_f1.otf",
        "latn", "UNKN", "test",
        &[10, 11, 21, 13, 22, 27, 26, 10],
        &[10, 11, 21, 13, 22, 27, 26, 10]
    )
}

#[test]
fn lookupflag_ignore_attach_t4() {
    gsub_test(
        "lookupflag_ignore_attach_f1.otf",
        "latn", "UNKN", "test",
        &[10, 11, 27, 13, 22, 23, 26, 10],
        &[10, 11, 27, 13, 22, 23, 26, 10]
    )
}

#[test]
fn lookupflag_ignore_attach_t5() {
    gsub_test(
        "lookupflag_ignore_attach_f1.otf",
        "latn", "UNKN", "test",
        &[10, 11, 27, 13, 14, 23, 26, 10],
        &[10, 11, 27, 13, 14, 23, 26, 10]
    )
}

#[test]
fn lookupflag_ignore_combination_t1() {
    gsub_test(
        "lookupflag_ignore_combination_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 26, 19, 20, 21],
        &[17, 23, 26,        21]
    )
}

#[test]
fn lookupflag_ignore_combination_t2() {
    gsub_test(
        "lookupflag_ignore_combination_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 26, 19, 24, 30, 31, 20, 21],
        &[17, 23, 26,     24, 30, 31,     21]
    )
}

#[test]
fn lookupflag_ignore_combination_t3() {
    gsub_test(
        "lookupflag_ignore_combination_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 26, 19, 24, 30, 32, 20, 21],
        &[17, 18, 26, 19, 24, 30, 32, 20, 21]
    )
}

#[test]
fn classdef1_single_range() {
    gsub_test(
        "classdef2_font1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21],
        &[17, 23, 24, 25, 21]
    )
}

#[test]
fn classdef1_empty_class() {
    gsub_test(
        "classdef1_font2.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21],
        &[17, 23, 24, 25, 21]
    )
}

#[test]
fn classdef1_multiple_ranges() {
    gsub_test(
        "classdef1_font3.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36],
        &[20, 23, 24, 25, 24, 26, 27, 28, 28, 29, 30, 31, 34, 33, 34, 35, 37, 38, 38, 39]
    )
}

#[test]
fn classdef1_empty() {
    gsub_test(
        "classdef1_font4.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21],
        &[17, 18, 19, 20, 21]
    )
}

#[test]
fn classdef2_single_range() {
    gsub_test(
        "classdef2_font1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21],
        &[17, 23, 24, 25, 21]
    )
}

#[test]
fn classdef2_empty_class() {
    gsub_test(
        "classdef2_font2.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21],
        &[17, 23, 24, 25, 21]
    )
}

#[test]
fn classdef2_multiple_ranges() {
    gsub_test(
        "classdef2_font3.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36],
        &[20, 23, 24, 25, 24, 26, 27, 28, 28, 29, 30, 31, 34, 33, 34, 35, 37, 38, 38, 39]
    )
}

#[test]
fn classdef2_empty() {
    gsub_test(
        "classdef2_font4.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21],
        &[17, 18, 19, 20, 21]
    )
}

#[test]
fn gsub1_1_simple_t1() {
    gsub_test(
        "gsub1_1_simple_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21],
        &[17, 23, 24, 20, 21]
    )
}

#[test]
fn gsub1_1_lookupflag_t1() {
    gsub_test(
        "gsub1_1_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21],
        &[17, 18, 24, 20, 21]
    )
}

#[test]
fn gsub1_1_modulo_t1() {
    gsub_test(
        "gsub1_1_modulo_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21, 22, 23, 24],
        &[17, 18, 17, 24, 23, 18, 23, 24]
    )
}

#[test]
fn gsub1_2_simple_t1() {
    gsub_test(
        "gsub1_2_simple_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21],
        &[17, 22, 19, 25, 21]
    )
}

#[test]
fn gsub1_2_lookupflag_t1() {
    gsub_test(
        "gsub1_2_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21],
        &[17, 18, 19, 25, 21]
    )
}

#[test]
fn gsub2_1_simple_t1() {
    gsub_test(
        "gsub2_1_simple_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19],
        &[17, 20, 21, 22, 19]
    )
}

#[test]
fn gsub2_1_simple_t2() {
    gsub_test(
        "gsub2_1_simple_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 18],
        &[17, 20, 21, 22, 19, 20, 21, 22]
    )
}

#[test]
fn gsub2_1_multiple_sequences_t1() {
    gsub_test(
        "gsub2_1_multiple_sequences_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18,     19,     17],
        &[17, 20, 21, 22, 23, 17]
    )
}

#[test]
fn gsub2_1_lookupflag_t1() {
    gsub_test(
        "gsub2_1_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19,     17],
        &[17, 18, 22, 23, 17]
    )
}

#[test]
#[ignore = "implements behaviour that is not part of the specification"]
fn gsub3_1_simple_t1() {
    gsub_test(
        "gsub3_1_simple_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 17, 18, 17, 18, 17, 18, 17, 18, 17, 18, 17],
        &[17, 18, 17, 20, 17, 21, 17, 22, 17, 18, 17, 20, 17]
    )
}

#[test]
#[ignore = "implements behaviour that is not part of the specification"]
fn gsub3_1_multiple_t1() {
    gsub_test(
        "gsub3_1_multiple_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 18, 18, 18, 19, 19, 19, 19, 17],
        &[17, 18, 20, 21, 18, 19, 22, 23, 19, 17]
    )
}

#[test]
#[ignore = "implements behaviour that is not part of the specification"]
fn gsub3_1_lookupflag_t1() {
    gsub_test(
        "gsub3_1_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 18, 18, 19, 19, 19, 19, 17],
        &[17, 18, 18, 18, 19, 22, 23, 19, 17]
    )
}

#[test]
fn gsub4_1_simple_t1() {
    gsub_test(
        "gsub4_1_simple_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 17, 18, 19, 22, 20],
        &[17, 23,         17, 18, 19, 22, 20]
    )
}

#[test]
fn gsub4_1_lookupflag_t1() {
    gsub_test(
        "gsub4_1_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[17, 24, 18, 24, 19, 24, 24, 20, 24, 17, 18, 19, 22, 20],
        &[17, 24, 23, 24,     24, 24,     24, 17, 18, 19, 22, 20]
    )
}

#[test]
fn gsub4_1_multiple_ligatures_t1() {
    gsub_test(
        "gsub4_1_multiple_ligatures_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 17, 18, 19, 22, 20],
        &[17, 23,         17, 24,     22, 20]
    )
}

#[test]
fn gsub4_1_multiple_ligatures_t2() {
    gsub_test(
        "gsub4_1_multiple_ligatures_f2.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 17, 18, 19, 22, 20],
        &[17, 24,     20, 17, 24,     22, 20]
    )
}

#[test]
fn gsub4_1_multiple_ligsets_t1() {
    gsub_test(
        "gsub4_1_multiple_ligsets_f1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 21, 20, 19, 22],
        &[17, 23,     21, 24,     22]
    )
}

#[test]
fn gsub7_test1() {
    gsub_test(
        "gsub7_font1.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21],
        &[17, 23, 24, 20, 21]
    )
}

#[test]
fn gsub7_test2() {
    gsub_test(
        "gsub7_font2.otf",
        "latn", "UNKN", "test",
        &[17, 18, 19, 20, 21],
        &[17, 23, 29, 20, 21]
    )
}

#[test]
fn gpos1_1_simple_t1() {
    gpos_test(
        "gpos1_1_simple_f1.otf",
        "latn", "UNKN", "test",
        &[17,   18,   19,   20,   21],
        &[ 0, -200,    0, -200,    0],
        &[ 0,    0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos1_1_simple_t2() {
    gpos_test(
        "gpos1_1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[17,   18,   19,   20,   21],
        &[ 0,    0,    0,    0,    0],
        &[ 0, -200,    0, -200,    0],
        None,
        None
    )
}

#[test]
fn gpos1_1_simple_t3() {
    gpos_test(
        "gpos1_1_simple_f3.otf",
        "latn", "UNKN", "test",
        &[17,   18,    19,   20,   21],
        &[ 0,    0,  -200, -200, -400],
        &[ 0,    0,     0,    0,    0],
        None,
        None
    )
}

#[test]
#[ignore = "vertical advance is not yet implemented"]
fn gpos1_1_simple_t4() {
    gpos_test(
        "gpos1_1_simple_f4.otf",
        "latn", "UNKN", "test",
        &[17,   18,    19,   20,   21],
        &[ 0,    0,     0,    0,    0],
        &[ 0,    0,  -200, -200, -400],
        None,
        None
    )
}

#[test]
fn gpos1_1_lookupflag_t1() {
    gpos_test(
        "gpos1_1_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[17,   18,   19,   20,   21],
        &[ 0,    0,    0, -300,    0],
        &[ 0,    0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos1_2_test1() {
    gpos_test(
        "gpos1_2_font1.otf",
        "latn", "UNKN", "test",
        &[17,   18,   19,   20,   21],
        &[ 0, -200,    0, -300,    0],
        &[ 0,    0,  0,    0,  0],
        None,
        None
    )
}

#[test]
fn gpos1_2_lookupflag_t1() {
    gpos_test(
        "gpos1_2_font2.otf",
        "latn", "UNKN", "test",
        &[17,   18,   19,   20,   21],
        &[ 0,    0,    0, -300,    0],
        &[ 0,    0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos2_1_simple_t1() {
    gpos_test(
        "gpos2_1_simple_f1.otf",
        "latn", "UNKN", "test",
        &[17,   18,   19,   17,   18,   20],
        &[ 0, -200,    0,    0,    0,    0],
        &[ 0,    0, -100,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos2_1_simple_t2() {
    gpos_test(
        "gpos2_1_simple_f1.otf",
        "latn", "UNKN", "test",
        &[17,   18],
        &[ 0,    0],
        &[ 0,    0],
        None,
        None
    )
}

#[test]
fn gpos2_1_lookupflag_t1() {
    gpos_test(
        "gpos2_1_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[17,   19,   20,   17,   19,   18,   20,    17],
        &[ 0, -200,    0,    0, -200,    0,    0,     0],
        &[ 0,    0, -100,    0,    0,    0, -100,     0],
        None,
        None
    )
}

#[test]
fn gpos2_1_lookupflag_t2() {
    gpos_test(
        "gpos2_1_lookupflag_f2.otf",
        "latn", "UNKN", "test",
        &[17,   19,   20,   17,   19,   18,  20,    17],
        &[ 0,    0, -200, -200, -200, -400, -400, -400],
        &[ 0,    0, -100,    0,    0,    0, -100,    0],
        None,
        None
    )
}

#[test]
#[ignore = "pairpos next glyph layout is not yet implemented"]
fn gpos2_1_next_glyph_t1() {
    gpos_test(
        "gpos2_1_next_glyph_f1.otf",
        "latn", "UNKN", "test",
        &[  18,   18,   18,   18],
        &[-100,    0, -100,    0],
        &[   0, -100,    0, -100],
        None,
        None
    )
}

#[test]
fn gpos2_1_next_glyph_t2() {
    gpos_test(
        "gpos2_1_next_glyph_f2.otf",
        "latn", "UNKN", "test",
        &[  18,   18,   18,   18],
        &[-100, -100, -100,    0],
        &[   0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos2_1_test6() {
    gpos_test(
        "gpos2_1_font6.otf",
        "latn", "UNKN", "test",
        &[17,   18,   19,   17,   18,   20,   17],
        &[ 0, -200,    0,    0, -300,    0,    0],
        &[ 0,    0, -100,    0,    0, -400,    0],
        None,
        None
    )
}

#[test]
fn gpos2_1_test7() {
    gpos_test(
        "gpos2_1_font7.otf",
        "latn", "UNKN", "test",
        &[17,   18,   19,   17,   18,   20,   17,    21,    22,  17],
        &[ 0, -200,    0,    0, -300,    0,    0,  -500,     0,   0],
        &[ 0,    0, -100,    0,    0, -400,    0,     0,  -600,   0],
        None,
        None
    )
}

#[test]
fn gpos2_2_test1a() {
    gpos_test(
        "gpos2_2_font1.otf",
        "latn", "UNKN", "test",
        &[17,   18,   19,   17,   18,   20],
        &[ 0, -200,    0,    0,    0,    0],
        &[ 0,    0, -100,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos2_2_test2() {
    gpos_test(
        "gpos2_2_font2.otf",
        "latn", "UNKN", "test",
        &[17,   19,   20,   17,   19,   18,   20,    17],
        &[ 0, -200,    0,    0, -200,    0,    0,     0],
        &[ 0,    0, -100,    0,    0,    0, -100,     0],
        None,
        None
    )
}

#[test]
fn gpos2_2_test3() {
    gpos_test(
        "gpos2_2_font3.otf",
        "latn", "UNKN", "test",
        &[17,   19,   20,   17,   19,   18,  20,    17],
        &[ 0,    0, -200, -200, -200, -400, -400,  -400],
        &[ 0,    0, -100,    0,    0,    0, -100,    0],
        None,
        None
    )
}

#[test]
#[ignore = "mark positioning is not yet implemented"]
fn gpos2_2_test4() {
    gpos_test(
        "gpos2_2_font4.otf",
        "latn", "UNKN", "test",
        &[  18,   18,   18,   18],
        &[-100,    0, -100,    0],
        &[   0, -100,    0, -100],
        None,
        None
    )
}

#[test]
fn gpos2_2_test5() {
    gpos_test(
        "gpos2_2_font5.otf",
        "latn", "UNKN", "test",
        &[  18,   18,   18,   18],
        &[-100, -100, -100,    0],
        &[   0,    0,    0,    0],
        None,
        None
    )
}

#[test]
#[ignore = "cursive anchor positioning is not yet implemented"]
fn gpos3_test1a() {
    gpos_test(
        "gpos3_font1.otf",
        "latn", "UNKN", "test",
        &[17,   18,   19,   17],
        &[ 0,    0,-1401,    0],
        &[ 0,    0,   99,    0],
        None,
        None
    )
}

#[test]
fn gpos3_test1b() {
    gpos_test(
        "gpos3_font1.otf",
        "latn", "UNKN", "test",
        &[17,   18,   17,   19,   17],
        &[ 0,    0,    0,    0,    0],
        &[ 0,    0,    0,    0,    0],
        None,
        None
    )
}

#[test]
#[ignore = "our code does the right thing but does not output different positions for the glyphs as required by the test, it reorders them"]
fn gpos3_lookupflag_1() {
    gpos_test(
        "gpos3_font2.otf",
        "latn", "UNKN", "test",
        &[17,   18,   21,    19,   17],
        &[ 0,    0,    0, -2901,    0],
        &[ 0,    0,    0,    99,    0],
        None,
        None
    )
}

#[test]
#[ignore = "our code does the right thing but does not output different positions for the glyphs as required by the test, it reorders them"]
fn gpos3_lookupflag_2() {
    gpos_test(
        "gpos3_font2.otf",
        "latn", "UNKN", "test",
        &[17,   18,   21,   21,   21,    19,   17],
        &[ 0,    0,    0,    0,    0, -5901,    0],
        &[ 0,    0,    0,    0,    0,    99,    0],
        None,
        None
    )
}

#[test]
#[ignore = "cursive anchor positioning is not yet implemented"]
fn gpos3_test3a() {
    gpos_test(
        "gpos3_font3.otf",
        "latn", "UNKN", "test",
        &[17,   18,    18,   17],
        &[ 0,    0, -1400,    0],
        &[ 0,    0,   100,    0],
        None,
        None
    )
}

#[test]
#[ignore = "cursive anchor positioning is not yet implemented"]
fn gpos3_test3b() {
    gpos_test(
        "gpos3_font3.otf",
        "latn", "UNKN", "test",
        &[17,   18,    19,   17],
        &[ 0,    0, -1401,    0],
        &[ 0,    0,    99,    0],
        None,
        None
    )
}

#[test]
#[ignore = "cursive anchor positioning is not yet implemented"]
fn gpos3_test3c() {
    gpos_test(
        "gpos3_font3.otf",
        "latn", "UNKN", "test",
        &[17,   20,    18,   17],
        &[ 0,    0, -1398,    0],
        &[ 0,    0,   102,    0],
        None,
        None
    )
}

#[test]
#[ignore = "cursive anchor positioning is not yet implemented"]
fn gpos3_test3d() {
    gpos_test(
        "gpos3_font3.otf",
        "latn", "UNKN", "test",
        &[17,   20,    19,  17],
        &[ 0,    0, -1399,   0],
        &[ 0,    0,   101,   0],
        None,
        None
    )
}

#[test]
fn gpos3_test3e() {
    gpos_test(
        "gpos3_font3.otf",
        "latn", "UNKN", "test",
        &[17,   18,   20,   17],
        &[ 0,    0,    0,    0],
        &[ 0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos3_test3f() {
    gpos_test(
        "gpos3_font3.otf",
        "latn", "UNKN", "test",
        &[17,   19,   18,   17],
        &[ 0,    0,    0,    0],
        &[ 0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos3_test3g() {
    gpos_test(
        "gpos3_font3.otf",
        "latn", "UNKN", "test",
        &[17,   19,   20,   17],
        &[ 0,    0,    0,    0],
        &[ 0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos3_test3h() {
    gpos_test(
        "gpos3_font3.otf",
        "latn", "UNKN", "test",
        &[17,   18],
        &[ 0,    0],
        &[ 0,    0],
        None,
        None
    )
}

#[test]
fn gpos3_test3i() {
    gpos_test(
        "gpos3_font3.otf",
        "latn", "UNKN", "test",
        &[17,   18,   21,   21,   21],
        &[ 0,    0,    0,    0,    0],
        &[ 0,    0,    0,    0,    0],
        None,
        None
    )
}

#[test]
#[ignore = "mark positioning is not yet implemented"]
fn gpos4_simple_1() {
    gpos_test(
        "gpos4_simple_1.otf",
        "latn", "UNKN", "test",
        &[17,   18,    19,   17],
        &[ 0,    0, -1600,    0],
        &[ 0,    0,   -80,    0],
        None,
        None
    )
}

#[test]
fn gpos4_simple_2() {
    gpos_test(
        "gpos4_simple_1.otf",
        "latn", "UNKN", "test",
        &[17,   17,   19,   17],
        &[ 0,    0,    0,    0],
        &[ 0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos4_simple_3() {
    gpos_test(
        "gpos4_simple_1.otf",
        "latn", "UNKN", "test",
        &[25,   25,   19,   17],
        &[ 0,    0,    0,    0],
        &[ 0,    0,    0,    0],
        None,
        None
    )
}

#[test]
#[ignore = "cursive anchor positioning is not yet implemented"]
fn gpos4_simple_4() {
    gpos_test(
        "gpos4_simple_1.otf",
        "latn", "UNKN", "test",
        &[17,   18,    19,    19,  17],
        &[ 0,    0, -1600, -3100,   0],
        &[ 0,    0,   -80,   -80,   0],
        None,
        None
    )
}

#[test]
#[ignore = "cursive anchor positioning is not yet implemented"]
fn gpos4_simple_5() {
    gpos_test(
        "gpos4_simple_1.otf",
        "latn", "UNKN", "test",
        &[17,   18,   20,    19,   17],
        &[ 0,    0,    0, -3100,    0],
        &[ 0,    0,    0,   -80,    0],
        None,
        None
    )
}

#[test]
fn gpos4_lookupflag_t1() {
    gpos_test(
        "gpos4_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[17,   18,   17,   19,   17],
        &[ 0,    0,    0,    0,    0],
        &[ 0,    0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos4_lookupflag_t2() {
    gpos_test(
        "gpos4_lookupflag_f2.otf",
        "latn", "UNKN", "test",
        &[17,   18,   19,   17],
        &[ 0,    0,    0,    0],
        &[ 0,    0,    0,    0],
        None,
        None
    )
}

#[test]
#[ignore = "our code does the right thing but does not output different positions for the glyphs as required by the test, it reorders them"]
fn gpos4_multiple_anchors_1() {
    gpos_test(
        "gpos4_multiple_anchors_1.otf",
        "latn", "UNKN", "test",
        &[17,    19,    20,    21,    22,  18,    19,    20,    21,    22],
        &[ 0, -1600, -3091, -4602, -6093,   0, -1580, -3071, -4582, -6073],
        &[ 0,   -80,   -71,   -82,   -73,   0,   -60,   -51,   -62,   -53],
        None,
        None
    )
}

#[test]
#[ignore = "the gsub part of this test passes but mark positioning not being implemented fails the gpos part"]
fn gpos5_test1a() {
    gpos_test(
        "gpos5_font1.otf",
        "latn", "UNKN", "test",
        &[17,   30,   19,   31,   17],
        &[ 0,    0,-1600,    0],
        &[ 0,    0,  -80,    0],
        None,
        Some(&[-1,   -1,    0,   -1])
    )
}

#[test]
#[ignore = "the gsub part of this test passes but mark positioning not being implemented fails the gpos part"]
fn gpos5_test1b() {
    gpos_test(
        "gpos5_font1.otf",
        "latn", "UNKN", "test",
        &[17,   30,   31,   19,  17],
        &[ 0,    0,-1599,    0],
        &[ 0,    0,  -79,    0],
        None,
        Some(&[-1,   -1,    1,   -1])
    )
}

#[test]
#[ignore = "mark positioning is not yet implemented"]
fn gpos6_test1a() {
    gpos_test(
        "gpos6_font1.otf",
        "latn", "UNKN", "test",
        &[17,   18,    19,   17],
        &[ 0,    0, -1600,    0],
        &[ 0,    0,   -80,    0],
        None,
        None
    )
}

#[test]
fn gpos6_test1b() {
    gpos_test(
        "gpos6_font1.otf",
        "latn", "UNKN", "test",
        &[17,   17,   19,   17],
        &[ 0,    0,    0,    0],
        &[ 0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos6_test1c() {
    gpos_test(
        "gpos6_font1.otf",
        "latn", "UNKN", "test",
        &[20,   20,   19,   17],
        &[ 0,    0,    0,    0],
        &[ 0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos7_1_test1a() {
    gpos_test(
        "gpos7_1_font1.otf",
        "latn", "UNKN", "test",
        &[17,   18,   19,   20,   21],
        &[ 0,  100,  200,  300,    0],
        &[ 0,    0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos7_1_test1b() {
    gpos_test(
        "gpos7_1_font1.otf",
        "latn", "UNKN", "test",
        &[17,   18,   17,   18,   19,   17],
        &[ 0,    0,    0,    0,    0,    0],
        &[ 0,    0,    0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos9_test1() {
    gpos_test(
        "gpos9_font1.otf",
        "latn", "UNKN", "test",
        &[17,   18,   19,   20,   21],
        &[ 0, -200,    0, -200,    0],
        &[ 0,    0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn gpos9_test2() {
    gpos_test(
        "gpos9_font2.otf",
        "latn", "UNKN", "test",
        &[17,   18,   19,   20,   21,   17],
        &[ 0, -200, -300, -200, -300,    0],
        &[ 0,    0,    0,    0,    0,    0],
        None,
        None
    )
}

#[test]
fn context1_simple_t1_gsub() {
    gsub_test(
        "gsub_context1_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   00],
        &[00,  60,   61,   62,   00]
    )
}

#[test]
fn context1_simple_t1_gpos() {
    gpos_test(
        "gpos_context1_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   00],
        &[ 0,  20,   20,   20,    0],
        &[ 0,   0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context1_simple_t2_gsub() {
    gsub_test(
        "gsub_context1_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  00,  20,  21,  00],
        &[00,  20,  00,  20,  21,  00]
    )
}

#[test]
fn context1_simple_t2_gpos() {
    gpos_test(
        "gpos_context1_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  00,  20,  21,  00],
        &[0,    0,   0,   0,   0,   0],
        &[0,    0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn context1_simple_t3_gsub() {
    gsub_test(
        "gsub_context1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[00,  20,   60,   20,   20,   20,   00]
    )
}

#[test]
#[ignore = "pairpos next glyph layout is not yet implemented"]
fn context1_simple_t3_gpos() {
    gpos_test(
        "gpos_context1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[0,    0,   20,    0,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context1_next_glyph_t1_gsub() {
    gsub_test(
        "gsub_context1_next_glyph_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[00,  60,   20,   60,   20,   20,   00]
    )
}

#[test]
#[ignore = "next glyph layout is not yet implemented"]
fn context1_next_glyph_t1_gpos() {
    gpos_test(
        "gpos_context1_next_glyph_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[0,   20,    0,   20,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context1_boundary_t1_gsub() {
    gsub_test(
        "gsub_context1_boundary_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[00,  20,   20,   20,   20,   20,   00]
    )
}

#[test]
fn context1_boundary_t1_gpos() {
    gpos_test(
        "gpos_context1_boundary_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[0,    0,    0,    0,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context1_boundary_t2_gsub() {
    gsub_test(
        "gsub_context1_boundary_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[00,  60,   60,   60,   60,   60,   00]
    )
}

#[test]
fn context1_boundary_t2_gpos() {
    gpos_test(
        "gpos_context1_boundary_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[0,   20,   20,   20,   20,   20,    0],
        &[0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context1_multiple_subrules_t1_gsub() {
    gsub_test(
        "gsub_context1_multiple_subrules_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   00,   20,   21,   00],
        &[00,  60,   21,   22,   00,   20,   61,   00]
    )
}

#[test]
fn context1_multiple_subrules_t1_gpos() {
    gpos_test(
        "gpos_context1_multiple_subrules_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   00,   20,   21,   00],
        &[ 0,  20,    0,    0,    0,    0,   20,    0],
        &[ 0,   0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context1_multiple_subrules_t2_gsub() {
    gsub_test(
        "gsub_context1_multiple_subrules_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   00,   20,   21,   00],
        &[00,  20,   61,   22,   00,   20,   61,   00]
    )
}

#[test]
fn context1_multiple_subrules_t2_gpos() {
    gpos_test(
        "gpos_context1_multiple_subrules_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   00,   20,   21,   00],
        &[ 0,   0,   20,    0,    0,    0,   20,    0],
        &[ 0,   0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context1_successive_t1_gsub() {
    gsub_test(
        "gsub_context1_successive_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,  23,   00],
        &[00,  20,   61,        63,   00]
    )
}

#[test]
fn context1_successive_t1_gpos() {
    gpos_test(
        "gpos_context1_successive_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,  23,   00],
        &[ 0,   0,   20,   20,   0,    0],
        &[ 0,   0,    0,    0,   0,    0],
        None,None
    )
}

#[test]
fn context1_lookupflag_t1_gsub() {
    gsub_test(
        "gsub_context1_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  90,  21,  91,  92,  22,   00],
        &[00,  60,  90,  61,  91,  92,  62,   00]
    )
}

#[test]
#[ignore = "invalid test? Harfbuzz also ignores see NOTE: lookupflag in aots2testrust.xsl"]
fn context1_lookupflag_t1_gpos() {
    gpos_test(
        "gpos_context1_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  90,  21,  91,  92,  22,   00],
        &[0,   20,   0,  20,   0,   0,  20,    0],
        &[0,    0,   0,   0,   0,   0,   0,    0],
        None,None
    )
}

#[test]
fn context1_lookupflag_t2_gsub() {
    gsub_test(
        "gsub_context1_lookupflag_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,  90,  21,  91,  92,  22,   00],
        &[00,  20,  90,  61,  91,  92,        00]
    )
}

#[test]
fn context1_lookupflag_t2_gpos() {
    gpos_test(
        "gpos_context1_lookupflag_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,  90,  21,  91,  92,  22,   00],
        &[0,    0,   0,  20,   0,   0,   0,    0],
        &[0,    0,   0,   0,   0,   0,   0,    0],
        None,None
    )
}

#[test]
fn context1_expansion_t1_gsub() {
    gsub_test(
        "gsub_context1_expansion_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  21,            22,  00],
        &[00,  20,  61,  62,  63,  22,  00]
    )
}

#[test]
fn context1_expansion_t1_gpos() {
    gpos_test(
        "gpos_context1_expansion_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  21,            22,  00],
        &[0,    0,   0,             0,   0],
        &[0,    0,   0,             0,   0],
        None,None
    )
}

#[test]
fn context2_simple_t1_gsub() {
    gsub_test(
        "gsub_context2_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   00],
        &[00,  60,   61,   62,   00]
    )
}

#[test]
fn context2_simple_t1_gpos() {
    gpos_test(
        "gpos_context2_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   00],
        &[0,   20,   20,   20,    0],
        &[0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context2_simple_t2_gsub() {
    gsub_test(
        "gsub_context2_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  00,  20,  21,  00],
        &[00,  20,  00,  20,  21,  00]
    )
}

#[test]
fn context2_simple_t2_gpos() {
    gpos_test(
        "gpos_context2_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  00,  20,  21,  00],
        &[0,    0,   0,   0,   0,   0],
        &[0,    0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn context2_simple_t3_gsub() {
    gsub_test(
        "gsub_context2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[00,  20,   60,   20,   20,   20,   00]
    )
}

#[test]
#[ignore = "pairpos next glyph layout is not yet implemented"]
fn context2_simple_t3_gpos() {
    gpos_test(
        "gpos_context2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[0,    0,   20,    0,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context2_next_glyph_t1_gsub() {
    gsub_test(
        "gsub_context2_next_glyph_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[00,  60,   20,   60,   20,   20,   00]
    )
}

#[test]
#[ignore = "next glyph layout is not yet implemented"]
fn context2_next_glyph_t1_gpos() {
    gpos_test(
        "gpos_context2_next_glyph_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[0,   20,    0,   20,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context2_boundary_t1_gsub() {
    gsub_test(
        "gsub_context2_boundary_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[00,  20,   20,   20,   20,   20,   00]
    )
}

#[test]
fn context2_boundary_t1_gpos() {
    gpos_test(
        "gpos_context2_boundary_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[0,    0,    0,    0,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context2_boundary_t2_gsub() {
    gsub_test(
        "gsub_context2_boundary_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[00,  60,   60,   60,   60,   60,   00]
    )
}

#[test]
fn context2_boundary_t2_gpos() {
    gpos_test(
        "gpos_context2_boundary_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[0,   20,   20,   20,   20,   20,    0],
        &[0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context2_multiple_subrules_t1_gsub() {
    gsub_test(
        "gsub_context2_multiple_subrules_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   00,   20,   21,   00],
        &[00,  60,   21,   22,   00,   20,   61,   00]
    )
}

#[test]
fn context2_multiple_subrules_t1_gpos() {
    gpos_test(
        "gpos_context2_multiple_subrules_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   00,   20,   21,   00],
        &[0,   20,    0,    0,    0,    0,   20,    0],
        &[0,    0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context2_multiple_subrules_t2_gsub() {
    gsub_test(
        "gsub_context2_multiple_subrules_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   00,   20,   21,   00],
        &[00,  20,   61,   22,   00,   20,   61,   00]
    )
}

#[test]
fn context2_multiple_subrules_t2_gpos() {
    gpos_test(
        "gpos_context2_multiple_subrules_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   00,   20,   21,   00],
        &[0,    0,   20,    0,    0,    0,   20,    0],
        &[0,    0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context2_successive_t1_gsub() {
    gsub_test(
        "gsub_context2_successive_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,  23,   00],
        &[00,  20,   61,        63,   00]
    )
}

#[test]
fn context2_successive_t1_gpos() {
    gpos_test(
        "gpos_context2_successive_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,  23,   00],
        &[0,    0,   20,   20,   0,    0],
        &[0,    0,    0,    0,   0,    0],
        None,None
    )
}

#[test]
fn context2_lookupflag_t1_gsub() {
    gsub_test(
        "gsub_context2_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  90,  21,  91,  92,  22,   00],
        &[00,  60,  90,  61,  91,  92,  62,   00]
    )
}

#[test]
#[ignore = "invalid test? Harfbuzz also ignores see NOTE: lookupflag in aots2testrust.xsl"]
fn context2_lookupflag_t1_gpos() {
    gpos_test(
        "gpos_context2_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  90,  21,  91,  92,  22,   00],
        &[0,   20,   0,  20,   0,   0,  20,    0],
        &[0,    0,   0,   0,   0,   0,   0,    0],
        None,None
    )
}

#[test]
fn context2_lookupflag_t2_gsub() {
    gsub_test(
        "gsub_context2_lookupflag_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,  90,  21,  91,  92,  22,   00],
        &[00,  20,  90,  61,  91,  92,        00]
    )
}

#[test]
fn context2_lookupflag_t2_gpos() {
    gpos_test(
        "gpos_context2_lookupflag_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,  90,  21,  91,  92,  22,   00],
        &[0,    0,   0,  20,   0,   0,   0,    0],
        &[0,    0,   0,   0,   0,   0,   0,    0],
        None,None
    )
}

#[test]
fn context2_expansion_t1_gsub() {
    gsub_test(
        "gsub_context2_expansion_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  21,            22,  00],
        &[00,  20,  61,  62,  63,  22,  00]
    )
}

#[test]
fn context2_expansion_t1_gpos() {
    gpos_test(
        "gpos_context2_expansion_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  21,            22,  00],
        &[0,    0,   0,             0,   0],
        &[0,    0,   0,             0,   0],
        None,None
    )
}

#[test]
fn context2_classes_t1_gsub() {
    gsub_test(
        "gsub_context2_classes_f1.otf",
        "latn", "UNKN", "test",
        &[00, 20, 26, 28, 24, 00, 21, 27, 26, 24, 00, 22, 27, 26, 24],
        &[00, 20, 66, 28, 24, 00, 21, 67, 26, 24, 00, 22, 27, 26, 24]
    )
}

#[test]
fn context2_classes_t1_gpos() {
    gpos_test(
        "gpos_context2_classes_f1.otf",
        "latn", "UNKN", "test",
        &[00, 20, 26, 28, 24, 00, 21, 27, 26, 24, 00, 22, 27, 26, 24],
        &[ 0,  0, 20,  0,  0,  0,  0, 20,  0,  0,  0,  0,  0,  0,  0],
        &[ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
        None,None
    )
}

#[test]
fn context2_classes_t2_gsub() {
    gsub_test(
        "gsub_context2_classes_f2.otf",
        "latn", "UNKN", "test",
        &[00, 22, 27, 26, 24, 00, 24, 24, 29, 22, 00, 22, 27, 26, 24],
        &[00, 22, 67, 26, 24, 00, 24, 24, 69, 22, 00, 22, 67, 26, 24]
    )
}

#[test]
fn context2_classes_t2_gpos() {
    gpos_test(
        "gpos_context2_classes_f2.otf",
        "latn", "UNKN", "test",
        &[00, 22, 27, 26, 24, 00, 24, 24, 29, 22, 00, 22, 27, 26, 24],
        &[ 0,  0, 20,  0,  0,  0,  0,  0, 20,  0,  0,  0, 20,  0,  0],
        &[ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
        None,None
    )
}

#[test]
fn context3_simple_t1_gsub() {
    gsub_test(
        "gsub_context3_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00, 20, 21, 22, 00],
        &[00, 60, 61, 62, 00]
    )
}

#[test]
fn context3_simple_t1_gpos() {
    gpos_test(
        "gpos_context3_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00, 20, 21, 22, 00],
        &[ 0, 20, 20, 20,  0],
        &[ 0,  0,  0,  0,  0],
        None,None
    )
}

#[test]
fn context3_simple_t2_gsub() {
    gsub_test(
        "gsub_context3_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00, 20, 00, 20, 21, 00, 20, 21, 22, 00],
        &[00, 20, 00, 20, 21, 00, 60, 61, 62, 00]
    )
}

#[test]
fn context3_simple_t2_gpos() {
    gpos_test(
        "gpos_context3_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00, 20, 00, 20, 21, 00, 20, 21, 22, 00],
        &[ 0,  0,  0,  0,  0,  0, 20, 20, 20,  0],
        &[ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
        None,None
    )
}

#[test]
fn context3_next_glyph_t1_gsub() {
    gsub_test(
        "gsub_context3_next_glyph_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[00,  60,   20,   60,   20,   20,   00]
    )
}

#[test]
#[ignore = "next glyph layout is not yet implemented"]
fn context3_next_glyph_t1_gpos() {
    gpos_test(
        "gpos_context3_next_glyph_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[0,   20,    0,   20,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context3_boundary_t1_gsub() {
    gsub_test(
        "gsub_context3_boundary_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[00,  20,   20,   20,   20,   20,   00]
    )
}

#[test]
fn context3_boundary_t1_gpos() {
    gpos_test(
        "gpos_context3_boundary_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[0,    0,    0,    0,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context3_boundary_t2_gsub() {
    gsub_test(
        "gsub_context3_boundary_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[00,  60,   60,   60,   60,   60,   00]
    )
}

#[test]
fn context3_boundary_t2_gpos() {
    gpos_test(
        "gpos_context3_boundary_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   20,   20,   20,   20,   00],
        &[0,   20,   20,   20,   20,   20,    0],
        &[0,    0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn context3_successive_t1_gsub() {
    gsub_test(
        "gsub_context3_successive_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,  23,   00],
        &[00,  20,   61,        63,   00]
    )
}

#[test]
fn context3_successive_t1_gpos() {
    gpos_test(
        "gpos_context3_successive_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,  23,   00],
        &[0,    0,   20,   20,   0,    0],
        &[0,    0,    0,    0,   0,    0],
        None,None
    )
}

#[test]
fn context3_lookupflag_t1_gsub() {
    gsub_test(
        "gsub_context3_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  90,  21,  91,  92,  22,   00],
        &[00,  60,  90,  61,  91,  92,  62,   00]
    )
}

#[test]
#[ignore = "invalid test? Harfbuzz also ignores see NOTE: lookupflag in aots2testrust.xsl"]
fn context3_lookupflag_t1_gpos() {
    gpos_test(
        "gpos_context3_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  90,  21,  91,  92,  22,   00],
        &[0,   20,   0,  20,   0,   0,  20,    0],
        &[0,    0,   0,   0,   0,   0,   0,    0],
        None,None
    )
}

#[test]
fn context3_lookupflag_t2_gsub() {
    gsub_test(
        "gsub_context3_lookupflag_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,  90,  21,  91,  92,  22,   00],
        &[00,  20,  90,  61,  91,  92,        00]
    )
}

#[test]
fn context3_lookupflag_t2_gpos() {
    gpos_test(
        "gpos_context3_lookupflag_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,  90,  21,  91,  92,  22,   00],
        &[0,    0,   0,  20,   0,   0,   0,    0],
        &[0,    0,   0,   0,   0,   0,   0,    0],
        None,None
    )
}

#[test]
fn chaining1_simple_t1_gsub() {
    gsub_test(
        "gsub_chaining1_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   61,   62,   23,   00]
    )
}

#[test]
fn chaining1_simple_t1_gpos() {
    gpos_test(
        "gpos_chaining1_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,   20,   20,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining1_simple_t2_gsub() {
    gsub_test(
        "gsub_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25,  26,  00],
        &[00, 20,  21,  62,  23,  24,  25,  26,  00]
    )
}

#[test]
fn chaining1_simple_t2_gpos() {
    gpos_test(
        "gpos_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25,  26,  00],
        &[0,   0,   0,  20,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining1_simple_t3_gsub() {
    gsub_test(
        "gsub_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25,  00,  00],
        &[00, 20,  21,  22,  23,  24,  25,  00,  00]
    )
}

#[test]
fn chaining1_simple_t3_gpos() {
    gpos_test(
        "gpos_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25,  00,  00],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining1_simple_t4_gsub() {
    gsub_test(
        "gsub_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25],
        &[00, 20,  21,  22,  23,  24,  25]
    )
}

#[test]
fn chaining1_simple_t4_gpos() {
    gpos_test(
        "gpos_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25],
        &[0,   0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining1_simple_t5_gsub() {
    gsub_test(
        "gsub_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24],
        &[00, 20,  21,  22,  23,  24]
    )
}

#[test]
fn chaining1_simple_t5_gpos() {
    gpos_test(
        "gpos_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24],
        &[0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining1_simple_t6_gsub() {
    gsub_test(
        "gsub_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 00,  21,  22,  23,  24,  25,  26,  00],
        &[00, 00,  21,  22,  23,  24,  25,  26,  00]
    )
}

#[test]
fn chaining1_simple_t6_gpos() {
    gpos_test(
        "gpos_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 00,  21,  22,  23,  24,  25,  26,  00],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining1_simple_t7_gsub() {
    gsub_test(
        "gsub_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[ 21,  22,  23,  24,  25,  26,  00],
        &[ 21,  22,  23,  24,  25,  26,  00]
    )
}

#[test]
fn chaining1_simple_t7_gpos() {
    gpos_test(
        "gpos_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[ 21,  22,  23,  24,  25,  26,  00],
        &[  0,   0,   0,   0,   0,   0,   0],
        &[  0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining1_simple_t8_gsub() {
    gsub_test(
        "gsub_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[22,  23,  24,  25,  26,  00],
        &[22,  23,  24,  25,  26,  00]
    )
}

#[test]
fn chaining1_simple_t8_gpos() {
    gpos_test(
        "gpos_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[22,  23,  24,  25,  26,  00],
        &[ 0,   0,   0,   0,   0,   0],
        &[ 0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining1_simple_t9_gsub() {
    gsub_test(
        "gsub_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  00,  24,  25,  26,  00],
        &[00, 20,  21,  22,  00,  24,  25,  26,  00]
    )
}

#[test]
fn chaining1_simple_t9_gpos() {
    gpos_test(
        "gpos_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  00,  24,  25,  26,  00],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining1_simple_t10_gsub() {
    gsub_test(
        "gsub_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23],
        &[00, 20,  21,  22,  23]
    )
}

#[test]
fn chaining1_simple_t10_gpos() {
    gpos_test(
        "gpos_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23],
        &[0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining1_simple_t11_gsub() {
    gsub_test(
        "gsub_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22],
        &[00, 20,  21,  22]
    )
}

#[test]
fn chaining1_simple_t11_gpos() {
    gpos_test(
        "gpos_chaining1_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22],
        &[0,   0,   0,   0],
        &[0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining1_next_glyph_t1_gsub() {
    gsub_test(
        "gsub_chaining1_next_glyph_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   61,   62,   63,   00]
    )
}

#[test]
fn chaining1_next_glyph_t1_gpos() {
    gpos_test(
        "gpos_chaining1_next_glyph_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,   20,   20,   20,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining1_boundary_t1_gsub() {
    gsub_test(
        "gsub_chaining1_boundary_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   21,   22,   23,   00]
    )
}

#[test]
fn chaining1_boundary_t1_gpos() {
    gpos_test(
        "gpos_chaining1_boundary_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,    0,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining1_boundary_t2_gsub() {
    gsub_test(
        "gsub_chaining1_boundary_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   61,   22,   23,   00]
    )
}

#[test]
fn chaining1_boundary_t2_gpos() {
    gpos_test(
        "gpos_chaining1_boundary_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,   20,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining1_boundary_t3_gsub() {
    gsub_test(
        "gsub_chaining1_boundary_f3.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   61,   22,   23,   00]
    )
}

#[test]
fn chaining1_boundary_t3_gpos() {
    gpos_test(
        "gpos_chaining1_boundary_f3.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,   20,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining1_boundary_t4_gsub() {
    gsub_test(
        "gsub_chaining1_boundary_f4.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   21,   62,   23,   00]
    )
}

#[test]
fn chaining1_boundary_t4_gpos() {
    gpos_test(
        "gpos_chaining1_boundary_f4.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,    0,   20,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining1_multiple_subrules_t1_gsub() {
    gsub_test(
        "gsub_chaining1_multiple_subrules_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  21,  22,  23,  24,  00,  20,  21,  22,  23,  00],
        &[00,  20,  61,  22,  23,  24,  00,  20,  21,  62,  23,  00]
    )
}

#[test]
fn chaining1_multiple_subrules_t1_gpos() {
    gpos_test(
        "gpos_chaining1_multiple_subrules_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  21,  22,  23,  24,  00,  20,  21,  22,  23,  00],
        &[ 0,   0,  20,   0,   0,   0,   0,   0,   0,  20,   0,   0],
        &[ 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining1_multiple_subrules_t2_gsub() {
    gsub_test(
        "gsub_chaining1_multiple_subrules_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,  21,  22,  23,  24,  00,  20,  21,  22,  23,  00],
        &[00,  20,  21,  62,  23,  24,  00,  20,  21,  62,  23,  00]
    )
}

#[test]
fn chaining1_multiple_subrules_t2_gpos() {
    gpos_test(
        "gpos_chaining1_multiple_subrules_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,  21,  22,  23,  24,  00,  20,  21,  22,  23,  00],
        &[ 0,   0,   0,  20,   0,   0,   0,   0,   0,  20,   0,   0],
        &[ 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining1_successive_t1_gsub() {
    gsub_test(
        "gsub_chaining1_successive_f1.otf",
        "latn", "UNKN", "test",
        &[00,  25,  20,   21,   22,   23,   24,  00],
        &[00,  25,  20,   61,         63,   24,  00,]
    )
}

#[test]
fn chaining1_successive_t1_gpos() {
    gpos_test(
        "gpos_chaining1_successive_f1.otf",
        "latn", "UNKN", "test",
        &[00,  25,  20,   21,   22,   23,   24,  00],
        &[0,    0,   0,   20,   20,    0,    0,   0,],
        &[0,    0,   0,    0,    0,    0,    0,   0,],
        None,None
    )
}

#[test]
fn chaining1_lookupflag_t1_gsub() {
    gsub_test(
        "gsub_chaining1_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[00, 20, 90, 21, 91, 22, 92, 23, 93, 94, 24, 90, 25, 91, 26, 00],
        &[00, 20, 90, 21, 91, 22, 92, 63, 93, 94, 24, 90, 25, 91, 26, 00]
    )
}

#[test]
#[ignore = "invalid test? Harfbuzz also ignores see NOTE: lookupflag in aots2testrust.xsl"]
fn chaining1_lookupflag_t1_gpos() {
    gpos_test(
        "gpos_chaining1_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[00, 20, 90, 21, 91, 22, 92, 23, 93, 94, 24, 90, 25, 91, 26, 00],
        &[ 0,  0,  0,  0,  0,  0,  0, 20,  0,  0,  0,  0,  0,  0,  0,  0],
        &[ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
        None,None
    )
}

#[test]
fn chaining2_simple_t1_gsub() {
    gsub_test(
        "gsub_chaining2_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   61,   62,   23,   00]
    )
}

#[test]
fn chaining2_simple_t1_gpos() {
    gpos_test(
        "gpos_chaining2_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,   20,   20,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining2_simple_t2_gsub() {
    gsub_test(
        "gsub_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25,  26,  00],
        &[00, 20,  21,  62,  23,  24,  25,  26,  00]
    )
}

#[test]
fn chaining2_simple_t2_gpos() {
    gpos_test(
        "gpos_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25,  26,  00],
        &[0,   0,   0,  20,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining2_simple_t3_gsub() {
    gsub_test(
        "gsub_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25,  00,  00],
        &[00, 20,  21,  22,  23,  24,  25,  00,  00]
    )
}

#[test]
fn chaining2_simple_t3_gpos() {
    gpos_test(
        "gpos_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25,  00,  00],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining2_simple_t4_gsub() {
    gsub_test(
        "gsub_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25],
        &[00, 20,  21,  22,  23,  24,  25]
    )
}

#[test]
fn chaining2_simple_t4_gpos() {
    gpos_test(
        "gpos_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25],
        &[0,   0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining2_simple_t5_gsub() {
    gsub_test(
        "gsub_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24],
        &[00, 20,  21,  22,  23,  24]
    )
}

#[test]
fn chaining2_simple_t5_gpos() {
    gpos_test(
        "gpos_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24],
        &[0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining2_simple_t6_gsub() {
    gsub_test(
        "gsub_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 00,  21,  22,  23,  24,  25,  26,  00],
        &[00, 00,  21,  22,  23,  24,  25,  26,  00]
    )
}

#[test]
fn chaining2_simple_t6_gpos() {
    gpos_test(
        "gpos_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 00,  21,  22,  23,  24,  25,  26,  00],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining2_simple_t7_gsub() {
    gsub_test(
        "gsub_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[ 21,  22,  23,  24,  25,  26,  00],
        &[ 21,  22,  23,  24,  25,  26,  00]
    )
}

#[test]
fn chaining2_simple_t7_gpos() {
    gpos_test(
        "gpos_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[ 21,  22,  23,  24,  25,  26,  00],
        &[  0,   0,   0,   0,   0,   0,   0],
        &[  0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining2_simple_t8_gsub() {
    gsub_test(
        "gsub_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[22,  23,  24,  25,  26,  00],
        &[22,  23,  24,  25,  26,  00]
    )
}

#[test]
fn chaining2_simple_t8_gpos() {
    gpos_test(
        "gpos_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[22,  23,  24,  25,  26,  00],
        &[ 0,   0,   0,   0,   0,   0],
        &[ 0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining2_simple_t9_gsub() {
    gsub_test(
        "gsub_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  00,  24,  25,  26,  00],
        &[00, 20,  21,  22,  00,  24,  25,  26,  00]
    )
}

#[test]
fn chaining2_simple_t9_gpos() {
    gpos_test(
        "gpos_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  00,  24,  25,  26,  00],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining2_simple_t10_gsub() {
    gsub_test(
        "gsub_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23],
        &[00, 20,  21,  22,  23]
    )
}

#[test]
fn chaining2_simple_t10_gpos() {
    gpos_test(
        "gpos_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23],
        &[0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining2_simple_t11_gsub() {
    gsub_test(
        "gsub_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22],
        &[00, 20,  21,  22]
    )
}

#[test]
fn chaining2_simple_t11_gpos() {
    gpos_test(
        "gpos_chaining2_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22],
        &[0,   0,   0,   0,],
        &[0,   0,   0,   0,],
        None,None
    )
}

#[test]
fn chaining2_next_glyph_t1_gsub() {
    gsub_test(
        "gsub_chaining2_next_glyph_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   61,   62,   63,   00]
    )
}

#[test]
fn chaining2_next_glyph_t1_gpos() {
    gpos_test(
        "gpos_chaining2_next_glyph_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,   20,   20,   20,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining2_boundary_t1_gsub() {
    gsub_test(
        "gsub_chaining2_boundary_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   21,   22,   23,   00]
    )
}

#[test]
fn chaining2_boundary_t1_gpos() {
    gpos_test(
        "gpos_chaining2_boundary_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,    0,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining2_boundary_t2_gsub() {
    gsub_test(
        "gsub_chaining2_boundary_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   61,   22,   23,   00]
    )
}

#[test]
fn chaining2_boundary_t2_gpos() {
    gpos_test(
        "gpos_chaining2_boundary_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,   20,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining2_boundary_t3_gsub() {
    gsub_test(
        "gsub_chaining2_boundary_f3.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   61,   22,   23,   00]
    )
}

#[test]
fn chaining2_boundary_t3_gpos() {
    gpos_test(
        "gpos_chaining2_boundary_f3.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,   20,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining2_boundary_t4_gsub() {
    gsub_test(
        "gsub_chaining2_boundary_f4.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   21,   62,   23,   00]
    )
}

#[test]
fn chaining2_boundary_t4_gpos() {
    gpos_test(
        "gpos_chaining2_boundary_f4.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,    0,   20,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining2_multiple_subrules_t1_gsub() {
    gsub_test(
        "gsub_chaining2_multiple_subrules_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  21,  22,  23,  24,  00,  20,  21,  22,  23,  00],
        &[00,  20,  61,  22,  23,  24,  00,  20,  21,  62,  23,  00]
    )
}

#[test]
fn chaining2_multiple_subrules_t1_gpos() {
    gpos_test(
        "gpos_chaining2_multiple_subrules_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,  21,  22,  23,  24,  00,  20,  21,  22,  23,  00],
        &[ 0,   0,  20,   0,   0,   0,   0,   0,   0,  20,   0,   0],
        &[ 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining2_multiple_subrules_t2_gsub() {
    gsub_test(
        "gsub_chaining2_multiple_subrules_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,  21,  22,  23,  24,  00,  20,  21,  22,  23,  00],
        &[00,  20,  21,  62,  23,  24,  00,  20,  21,  62,  23,  00]
    )
}

#[test]
fn chaining2_multiple_subrules_t2_gpos() {
    gpos_test(
        "gpos_chaining2_multiple_subrules_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,  21,  22,  23,  24,  00,  20,  21,  22,  23,  00],
        &[ 0,   0,   0,  20,   0,   0,   0,   0,   0,  20,   0,   0],
        &[ 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining2_successive_t1_gsub() {
    gsub_test(
        "gsub_chaining2_successive_f1.otf",
        "latn", "UNKN", "test",
        &[00,  25,  20,   21,   22,   23,   24,  00],
        &[00,  25,  20,   61,         63,   24,  00]
    )
}

#[test]
fn chaining2_successive_t1_gpos() {
    gpos_test(
        "gpos_chaining2_successive_f1.otf",
        "latn", "UNKN", "test",
        &[00,  25,  20,   21,   22,   23,   24,  00],
        &[0,    0,   0,   20,   20,    0,    0,   0],
        &[0,    0,   0,    0,    0,    0,    0,   0],
        None,None
    )
}

#[test]
fn chaining2_lookupflag_t1_gsub() {
    gsub_test(
        "gsub_chaining2_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[00, 20, 90, 21, 91, 22, 92, 23, 93, 94, 24, 90, 25, 91, 26, 00],
        &[00, 20, 90, 21, 91, 22, 92, 63, 93, 94, 24, 90, 25, 91, 26, 00]
    )
}

#[test]
#[ignore = "invalid test? Harfbuzz also ignores see NOTE: lookupflag in aots2testrust.xsl"]
fn chaining2_lookupflag_t1_gpos() {
    gpos_test(
        "gpos_chaining2_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[00, 20, 90, 21, 91, 22, 92, 23, 93, 94, 24, 90, 25, 91, 26, 00],
        &[ 0,  0,  0,  0,  0,  0,  0, 20,  0,  0,  0,  0,  0,  0,  0,  0],
        &[ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
        None,None
    )
}

#[test]
fn chaining3_simple_t1_gsub() {
    gsub_test(
        "gsub_chaining3_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   61,   62,   23,   00]
    )
}

#[test]
fn chaining3_simple_t1_gpos() {
    gpos_test(
        "gpos_chaining3_simple_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,   20,   20,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining3_simple_t2_gsub() {
    gsub_test(
        "gsub_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25,  26,  00],
        &[00, 20,  21,  62,  23,  24,  25,  26,  00]
    )
}

#[test]
fn chaining3_simple_t2_gpos() {
    gpos_test(
        "gpos_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25,  26,  00],
        &[0,   0,   0,  20,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining3_simple_t3_gsub() {
    gsub_test(
        "gsub_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25,  00,  00],
        &[00, 20,  21,  22,  23,  24,  25,  00,  00]
    )
}

#[test]
fn chaining3_simple_t3_gpos() {
    gpos_test(
        "gpos_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25,  00,  00],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining3_simple_t4_gsub() {
    gsub_test(
        "gsub_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25],
        &[00, 20,  21,  22,  23,  24,  25]
    )
}

#[test]
fn chaining3_simple_t4_gpos() {
    gpos_test(
        "gpos_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24,  25],
        &[0,   0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining3_simple_t5_gsub() {
    gsub_test(
        "gsub_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24],
        &[00, 20,  21,  22,  23,  24]
    )
}

#[test]
fn chaining3_simple_t5_gpos() {
    gpos_test(
        "gpos_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23,  24],
        &[0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining3_simple_t6_gsub() {
    gsub_test(
        "gsub_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 00,  21,  22,  23,  24,  25,  26,  00],
        &[00, 00,  21,  22,  23,  24,  25,  26,  00]
    )
}

#[test]
fn chaining3_simple_t6_gpos() {
    gpos_test(
        "gpos_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 00,  21,  22,  23,  24,  25,  26,  00],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining3_simple_t7_gsub() {
    gsub_test(
        "gsub_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[ 21,  22,  23,  24,  25,  26,  00],
        &[ 21,  22,  23,  24,  25,  26,  00]
    )
}

#[test]
fn chaining3_simple_t7_gpos() {
    gpos_test(
        "gpos_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[ 21,  22,  23,  24,  25,  26,  00],
        &[  0,   0,   0,   0,   0,   0,   0],
        &[  0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining3_simple_t8_gsub() {
    gsub_test(
        "gsub_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[22,  23,  24,  25,  26,  00],
        &[22,  23,  24,  25,  26,  00]
    )
}

#[test]
fn chaining3_simple_t8_gpos() {
    gpos_test(
        "gpos_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[22,  23,  24,  25,  26,  00],
        &[ 0,   0,   0,   0,   0,   0],
        &[ 0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining3_simple_t9_gsub() {
    gsub_test(
        "gsub_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  00,  24,  25,  26,  00],
        &[00, 20,  21,  22,  00,  24,  25,  26,  00]
    )
}

#[test]
fn chaining3_simple_t9_gpos() {
    gpos_test(
        "gpos_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  00,  24,  25,  26,  00],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining3_simple_t10_gsub() {
    gsub_test(
        "gsub_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23],
        &[00, 20,  21,  22,  23]
    )
}

#[test]
fn chaining3_simple_t10_gpos() {
    gpos_test(
        "gpos_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22,  23],
        &[0,   0,   0,   0,   0],
        &[0,   0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining3_simple_t11_gsub() {
    gsub_test(
        "gsub_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22],
        &[00, 20,  21,  22]
    )
}

#[test]
fn chaining3_simple_t11_gpos() {
    gpos_test(
        "gpos_chaining3_simple_f2.otf",
        "latn", "UNKN", "test",
        &[00, 20,  21,  22],
        &[0,   0,   0,   0],
        &[0,   0,   0,   0],
        None,None
    )
}

#[test]
fn chaining3_next_glyph_t1_gsub() {
    gsub_test(
        "gsub_chaining3_next_glyph_f1.otf",
        "latn", "UNKN", "test",
        &[00,  22,   21,   22,   21,   22,  21,  00],
        &[00,  22,   61,   22,   61,   22,  21,  00]
    )
}

#[test]
fn chaining3_next_glyph_t1_gpos() {
    gpos_test(
        "gpos_chaining3_next_glyph_f1.otf",
        "latn", "UNKN", "test",
        &[00,  22,   21,   22,   21,   22,  21,  00],
        &[0,    0,   20,    0,   20,    0,   0,   0],
        &[0,    0,    0,    0,    0,    0,   0,   0],
        None,None
    )
}

#[test]
fn chaining3_boundary_t1_gsub() {
    gsub_test(
        "gsub_chaining3_boundary_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   21,   22,   23,   00]
    )
}

#[test]
fn chaining3_boundary_t1_gpos() {
    gpos_test(
        "gpos_chaining3_boundary_f1.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,    0,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining3_boundary_t2_gsub() {
    gsub_test(
        "gsub_chaining3_boundary_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   61,   22,   23,   00]
    )
}

#[test]
fn chaining3_boundary_t2_gpos() {
    gpos_test(
        "gpos_chaining3_boundary_f2.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,   20,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining3_boundary_t3_gsub() {
    gsub_test(
        "gsub_chaining3_boundary_f3.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   61,   22,   23,   00]
    )
}

#[test]
fn chaining3_boundary_t3_gpos() {
    gpos_test(
        "gpos_chaining3_boundary_f3.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,   20,    0,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining3_boundary_t4_gsub() {
    gsub_test(
        "gsub_chaining3_boundary_f4.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[00,  20,   21,   62,   23,   00]
    )
}

#[test]
fn chaining3_boundary_t4_gpos() {
    gpos_test(
        "gpos_chaining3_boundary_f4.otf",
        "latn", "UNKN", "test",
        &[00,  20,   21,   22,   23,   00],
        &[0,    0,    0,   20,    0,    0],
        &[0,    0,    0,    0,    0,    0],
        None,None
    )
}

#[test]
fn chaining3_successive_t1_gsub() {
    gsub_test(
        "gsub_chaining3_successive_f1.otf",
        "latn", "UNKN", "test",
        &[00,  25,  20,   21,   22,   23,   24,  00],
        &[00,  25,  20,   61,         63,   24,  00]
    )
}

#[test]
fn chaining3_successive_t1_gpos() {
    gpos_test(
        "gpos_chaining3_successive_f1.otf",
        "latn", "UNKN", "test",
        &[00,  25,  20,   21,   22,   23,   24,  00],
        &[0,    0,   0,   20,   20,    0,    0,   0],
        &[0,    0,   0,    0,    0,    0,    0,   0],
        None,None
    )
}

#[test]
fn chaining3_lookupflag_t1_gsub() {
    gsub_test(
        "gsub_chaining3_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[00, 20, 90, 21, 91, 22, 92, 23, 93, 94, 24, 90, 25, 91, 26, 00],
        &[00, 20, 90, 21, 91, 22, 92, 63, 93, 94, 24, 90, 25, 91, 26, 00]
    )
}

#[test]
#[ignore = "invalid test? Harfbuzz also ignores see NOTE: lookupflag in aots2testrust.xsl"]
fn chaining3_lookupflag_t1_gpos() {
    gpos_test(
        "gpos_chaining3_lookupflag_f1.otf",
        "latn", "UNKN", "test",
        &[00, 20, 90, 21, 91, 22, 92, 23, 93, 94, 24, 90, 25, 91, 26, 00],
        &[ 0,  0,  0,  0,  0,  0,  0, 20,  0,  0,  0,  0,  0,  0,  0,  0],
        &[ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
        None,None
    )
}

#[test]
fn cmap0_test1() {
    cmap_test(
        "cmap0_font1.otf",
        3,
        1,
        &[0,  0x01, 0x33, 0x34, 0x35, 0x36, 0x37, 0xffff],
        &[0,  0,       0,   17,   56,   12,    0,      0]
    )
}

#[test]
fn cmap2_test1() {
    cmap_test(
        "cmap2_font1.otf",
        3,
        1,
        &[0,  1, 0x33, 0x34, 0x35, 0x36, 0x37, 0x8431, 0x8432, 0x8434, 0x9232, 0xffff],
        &[0,  0,    0,   17,   56,   12,    0,      0,     20,     22,     23, 0]
    )
}

#[test]
fn cmap4_test1() {
    cmap_test(
        "cmap4_font1.otf",
        3,
        1,
        &[0,  1, 16, 17, 18, 30, 31, 199, 200, 205, 210, 211, 0xffff],
        &[0,  0,  0, 40, 41, 53,  0,   0, 256, 261, 266,   0,      0]
    )
}

#[test]
fn cmap4_test2() {
    cmap_test(
        "cmap4_font2.otf",
        3,
        1,
        &[0,  1, 16, 17, 18, 30, 31, 199, 200, 205, 210, 211, 0xffff],
        &[0,  0,  0,  0,  0,  0,  0,   0,   0,   0,   0,   0,      0]
    )
}

#[test]
fn cmap4_test3() {
    cmap_test(
        "cmap4_font3.otf",
        3,
        1,
        &[0,  1, 16, 17, 18, 30, 31, 199, 200, 205, 210, 211, 0xffff],
        &[0,  0,  0,  0,  0,  0,  0,   0,   0,   0,   0,   0, 0xfffe]
    )
}

#[test]
fn cmap4_test4a() {
    cmap_test(
        "cmap4_font4.otf",
        3,
        1,
        &[0,  44999, 45000, 45001, 45099, 45100, 45101],
        &[0,      0, 44500, 44501, 44599, 44600,     0]
    )
}

#[test]
fn cmap4_test4b() {
    cmap_test(
        "cmap4_font4.otf",
        3,
        1,
        &[0,  64999, 65000, 65001, 65035, 65036, 65037, 65100, 65101],
        &[0,      0, 65500, 65501, 65535,     0,     1,    64,     0]
    )
}

#[test]
fn cmap4_test4c() {
    cmap_test(
        "cmap4_font4.otf",
        3,
        1,
        &[0,  99,   100,  499, 500, 501, 1000, 1001],
        &[0,  0,  65136, 65535, 0,    1,  500,    0]
    )
}

#[test]
fn cmap6_test1() {
    cmap_test(
        "cmap6_font1.otf",
        3,
        1,
        &[0,  1, 33, 34, 35, 36, 37, 0xffff],
        &[0,  0,  0, 17, 56, 12,  0,      0]
    )
}

#[test]
fn cmap6_test2() {
    cmap_test(
        "cmap6_font2.otf",
        3,
        1,
        &[0,  1, 33, 34, 35, 36, 37, 0xffff],
        &[0,  0,  0,  0,  0,  0,  0,      0]
    )
}

#[test]
#[ignore = "cmap subtable format 8 is not yet implemented"]
fn cmap8_test1() {
    cmap_test(
        "cmap8_font1.otf",
        3,
        1,
        &[0,  1, 0x33, 0x34, 0x35, 0x36, 0x37, 0x8431, 0x8432, 0x8434, 0x9232, 0x109422, 0x109423, 0x109424, 0x109425, 0xffff],
        &[0,  0,    0,   17,   56,   12,    0,      0,     20,     22,     23,        0,       26,       27,       32,      0]
    )
}

#[test]
fn cmap10_test1() {
    cmap_test(
        "cmap10_font1.otf",
        3,
        1,
        &[0,  1, 0x9232, 0x109422, 0x109423, 0x109424, 0x109425, 0xffff],
        &[0,  0,      0,        0,       26,       27,       32,      0]
    )
}

#[test]
fn cmap10_test2() {
    cmap_test(
        "cmap10_font2.otf",
        3,
        1,
        &[0,  1, 33, 34, 35, 36, 37, 0xffff],
        &[0,  0,  0,  0,  0,  0,  0,      0]
    )
}

#[test]
fn cmap12_test1() {
    cmap_test(
        "cmap12_font1.otf",
        3,
        1,
        &[0,  1, 16, 0x101723, 0x101724, 0x101727, 0x101728, 0x102522, 0x102523, 0x102527, 0x102528, 0xffff],
        &[0,  0,  0,       23,       24,       27,        0,        0,       53,       57,        0,      0]
    )
}

#[test]
#[ignore = "CMAP format 14 not yet implemented"]
fn cmap14_test1a() {
    cmap_uvs_test(
        "cmap14_font1.otf",
        &[0x4e00, 0xe0100, 0x4e03, 0xe0100, 0x4e04, 0xe0100],
        &[            10,              13,              14]
    )
}

#[test]
#[ignore = "CMAP format 14 not yet implemented"]
fn cmap14_test1b() {
    cmap_uvs_test(
        "cmap14_font1.otf",
        &[0x4e10, 0xe0100, 0x4e11, 0xe0100],
        &[            25,              26]
    )
}

#[test]
#[ignore = "CMAP format 14 not yet implemented"]
fn cmap14_test1c() {
    cmap_uvs_test(
        "cmap14_font1.otf",
        &[0x4e00, 0xe0101, 0x4e01, 0xe0100],
        &[             0,               0]
    )
}
