use crate::chess::bitboard::Bitboard;
use crate::chess::movegen::magic::Magic;
#[rustfmt::skip]
pub const BISHOP_MAGICS: [Magic; 64] = [
Magic { mask: Bitboard(0x40201008040200), shift: 0x6, magic: 0x2202826830444, offset: 0x0 },
Magic { mask: Bitboard(0x402010080400), shift: 0x5, magic: 0x805d00400408000, offset: 0x40 },
Magic { mask: Bitboard(0x4020100a00), shift: 0x5, magic: 0x808080241808a00, offset: 0x60 },
Magic { mask: Bitboard(0x40221400), shift: 0x5, magic: 0x2104040280008400, offset: 0x80 },
Magic { mask: Bitboard(0x2442800), shift: 0x5, magic: 0xa004104508500400, offset: 0xa0 },
Magic { mask: Bitboard(0x204085000), shift: 0x5, magic: 0x8220222c0000, offset: 0xc0 },
Magic { mask: Bitboard(0x20408102000), shift: 0x5, magic: 0xc84008411081000, offset: 0xe0 },
Magic { mask: Bitboard(0x2040810204000), shift: 0x6, magic: 0x1c1842110022030, offset: 0x100 },
Magic { mask: Bitboard(0x20100804020000), shift: 0x5, magic: 0x30a49002a204, offset: 0x140 },
Magic { mask: Bitboard(0x40201008040000), shift: 0x5, magic: 0x8002040104440082, offset: 0x160 },
Magic { mask: Bitboard(0x4020100a0000), shift: 0x5, magic: 0x9302080081220092, offset: 0x180 },
Magic { mask: Bitboard(0x4022140000), shift: 0x5, magic: 0x85002c4044818408, offset: 0x1a0 },
Magic { mask: Bitboard(0x244280000), shift: 0x5, magic: 0x608141420400080, offset: 0x1c0 },
Magic { mask: Bitboard(0x20408500000), shift: 0x5, magic: 0x8100020e02200100, offset: 0x1e0 },
Magic { mask: Bitboard(0x2040810200000), shift: 0x5, magic: 0x1110a202010c4081, offset: 0x200 },
Magic { mask: Bitboard(0x4081020400000), shift: 0x5, magic: 0x208ca0082311018, offset: 0x220 },
Magic { mask: Bitboard(0x10080402000200), shift: 0x5, magic: 0x6011209810092804, offset: 0x240 },
Magic { mask: Bitboard(0x20100804000400), shift: 0x5, magic: 0x10002001610900, offset: 0x260 },
Magic { mask: Bitboard(0x4020100a000a00), shift: 0x7, magic: 0x1284180804240090, offset: 0x280 },
Magic { mask: Bitboard(0x402214001400), shift: 0x7, magic: 0x808001120404001, offset: 0x300 },
Magic { mask: Bitboard(0x24428002800), shift: 0x7, magic: 0x10800400a04008, offset: 0x380 },
Magic { mask: Bitboard(0x2040850005000), shift: 0x7, magic: 0x9000600820100, offset: 0x400 },
Magic { mask: Bitboard(0x4081020002000), shift: 0x5, magic: 0x2000421010880, offset: 0x480 },
Magic { mask: Bitboard(0x8102040004000), shift: 0x5, magic: 0x2a0100808c0105, offset: 0x4a0 },
Magic { mask: Bitboard(0x8040200020400), shift: 0x5, magic: 0x824200304202400, offset: 0x4c0 },
Magic { mask: Bitboard(0x10080400040800), shift: 0x5, magic: 0x100808012002248c, offset: 0x4e0 },
Magic { mask: Bitboard(0x20100a000a1000), shift: 0x7, magic: 0x2402010820810400, offset: 0x500 },
Magic { mask: Bitboard(0x40221400142200), shift: 0x9, magic: 0x40708003c020420, offset: 0x580 },
Magic { mask: Bitboard(0x2442800284400), shift: 0x9, magic: 0x8001010000104002, offset: 0x780 },
Magic { mask: Bitboard(0x4085000500800), shift: 0x7, magic: 0x80820211004200, offset: 0x980 },
Magic { mask: Bitboard(0x8102000201000), shift: 0x5, magic: 0x410808051280810, offset: 0xa00 },
Magic { mask: Bitboard(0x10204000402000), shift: 0x5, magic: 0x200820000804440, offset: 0xa20 },
Magic { mask: Bitboard(0x4020002040800), shift: 0x5, magic: 0x1048444500102040, offset: 0xa40 },
Magic { mask: Bitboard(0x8040004081000), shift: 0x5, magic: 0x20008808003c1080, offset: 0xa60 },
Magic { mask: Bitboard(0x100a000a102000), shift: 0x7, magic: 0x804400404402, offset: 0xa80 },
Magic { mask: Bitboard(0x22140014224000), shift: 0x9, magic: 0x100c20082180080, offset: 0xb00 },
Magic { mask: Bitboard(0x44280028440200), shift: 0x9, magic: 0x14400100d0510040, offset: 0xd00 },
Magic { mask: Bitboard(0x8500050080400), shift: 0x7, magic: 0x494102000b004c, offset: 0xf00 },
Magic { mask: Bitboard(0x10200020100800), shift: 0x5, magic: 0x811080882820200, offset: 0xf80 },
Magic { mask: Bitboard(0x20400040201000), shift: 0x5, magic: 0x8008030010900, offset: 0xfa0 },
Magic { mask: Bitboard(0x2000204081000), shift: 0x5, magic: 0xc20114c010a000, offset: 0xfc0 },
Magic { mask: Bitboard(0x4000408102000), shift: 0x5, magic: 0x4205008804002020, offset: 0xfe0 },
Magic { mask: Bitboard(0xa000a10204000), shift: 0x7, magic: 0x21004062015000, offset: 0x1000 },
Magic { mask: Bitboard(0x14001422400000), shift: 0x7, magic: 0x3000004200800804, offset: 0x1080 },
Magic { mask: Bitboard(0x28002844020000), shift: 0x7, magic: 0x21240051a010500, offset: 0x1100 },
Magic { mask: Bitboard(0x50005008040200), shift: 0x7, magic: 0x8011100100408200, offset: 0x1180 },
Magic { mask: Bitboard(0x20002010080400), shift: 0x5, magic: 0x60024082008100, offset: 0x1200 },
Magic { mask: Bitboard(0x40004020100800), shift: 0x5, magic: 0x8408401810952, offset: 0x1220 },
Magic { mask: Bitboard(0x20408102000), shift: 0x5, magic: 0x602024206400800, offset: 0x1240 },
Magic { mask: Bitboard(0x40810204000), shift: 0x5, magic: 0x2000806808141080, offset: 0x1260 },
Magic { mask: Bitboard(0xa1020400000), shift: 0x5, magic: 0x204032009c042000, offset: 0x1280 },
Magic { mask: Bitboard(0x142240000000), shift: 0x5, magic: 0x800840c0100, offset: 0x12a0 },
Magic { mask: Bitboard(0x284402000000), shift: 0x5, magic: 0x206485020220000, offset: 0x12c0 },
Magic { mask: Bitboard(0x500804020000), shift: 0x5, magic: 0x40090a001010400, offset: 0x12e0 },
Magic { mask: Bitboard(0x201008040200), shift: 0x5, magic: 0x8010103001204100, offset: 0x1300 },
Magic { mask: Bitboard(0x402010080400), shift: 0x5, magic: 0x810020224002800, offset: 0x1320 },
Magic { mask: Bitboard(0x2040810204000), shift: 0x6, magic: 0x404124804104800, offset: 0x1340 },
Magic { mask: Bitboard(0x4081020400000), shift: 0x5, magic: 0x9020a50082032000, offset: 0x1380 },
Magic { mask: Bitboard(0xa102040000000), shift: 0x5, magic: 0x4200182004a0800, offset: 0x13a0 },
Magic { mask: Bitboard(0x14224000000000), shift: 0x5, magic: 0x3014280001209828, offset: 0x13c0 },
Magic { mask: Bitboard(0x28440200000000), shift: 0x5, magic: 0x4020082010920880, offset: 0x13e0 },
Magic { mask: Bitboard(0x50080402000000), shift: 0x5, magic: 0x8200412042120608, offset: 0x1400 },
Magic { mask: Bitboard(0x20100804020000), shift: 0x5, magic: 0x40128820080b8128, offset: 0x1420 },
Magic { mask: Bitboard(0x40201008040200), shift: 0x6, magic: 0x1040080a006200a0, offset: 0x1440 },
];
#[rustfmt::skip]
pub const ROOK_MAGICS: [Magic; 64] = [
Magic { mask: Bitboard(0x101010101017e), shift: 0xc, magic: 0x2580104000800020, offset: 0x0 },
Magic { mask: Bitboard(0x202020202027c), shift: 0xb, magic: 0xc0001009e00040, offset: 0x1000 },
Magic { mask: Bitboard(0x404040404047a), shift: 0xb, magic: 0x680300020000880, offset: 0x1800 },
Magic { mask: Bitboard(0x8080808080876), shift: 0xb, magic: 0x100100020090014, offset: 0x2000 },
Magic { mask: Bitboard(0x1010101010106e), shift: 0xb, magic: 0x2900021100080004, offset: 0x2800 },
Magic { mask: Bitboard(0x2020202020205e), shift: 0xb, magic: 0x20001100a004804, offset: 0x3000 },
Magic { mask: Bitboard(0x4040404040403e), shift: 0xb, magic: 0x400020088411014, offset: 0x3800 },
Magic { mask: Bitboard(0x8080808080807e), shift: 0xc, magic: 0x80104021000180, offset: 0x4000 },
Magic { mask: Bitboard(0x1010101017e00), shift: 0xb, magic: 0x203002143008008, offset: 0x5000 },
Magic { mask: Bitboard(0x2020202027c00), shift: 0xa, magic: 0x2001802010400082, offset: 0x5800 },
Magic { mask: Bitboard(0x4040404047a00), shift: 0xa, magic: 0x1801008200084, offset: 0x5c00 },
Magic { mask: Bitboard(0x8080808087600), shift: 0xa, magic: 0x4000801000800800, offset: 0x6000 },
Magic { mask: Bitboard(0x10101010106e00), shift: 0xa, magic: 0x10808008003400, offset: 0x6400 },
Magic { mask: Bitboard(0x20202020205e00), shift: 0xa, magic: 0x15000288040100, offset: 0x6800 },
Magic { mask: Bitboard(0x40404040403e00), shift: 0xa, magic: 0x4a000804020007, offset: 0x6c00 },
Magic { mask: Bitboard(0x80808080807e00), shift: 0xb, magic: 0x14808000c1000180, offset: 0x7000 },
Magic { mask: Bitboard(0x10101017e0100), shift: 0xb, magic: 0x9808000400a28, offset: 0x7800 },
Magic { mask: Bitboard(0x20202027c0200), shift: 0xa, magic: 0x1002818040032001, offset: 0x8000 },
Magic { mask: Bitboard(0x40404047a0400), shift: 0xa, magic: 0x810808020041000, offset: 0x8400 },
Magic { mask: Bitboard(0x8080808760800), shift: 0xa, magic: 0x80084200200a0130, offset: 0x8800 },
Magic { mask: Bitboard(0x101010106e1000), shift: 0xa, magic: 0x11000d000800, offset: 0x8c00 },
Magic { mask: Bitboard(0x202020205e2000), shift: 0xa, magic: 0xa04008002008004, offset: 0x9000 },
Magic { mask: Bitboard(0x404040403e4000), shift: 0xa, magic: 0x106004040010080, offset: 0x9400 },
Magic { mask: Bitboard(0x808080807e8000), shift: 0xb, magic: 0x20001408401, offset: 0x9800 },
Magic { mask: Bitboard(0x101017e010100), shift: 0xb, magic: 0x210800280204000, offset: 0xa000 },
Magic { mask: Bitboard(0x202027c020200), shift: 0xa, magic: 0x4050004040082000, offset: 0xa800 },
Magic { mask: Bitboard(0x404047a040400), shift: 0xa, magic: 0x1a00200280100280, offset: 0xac00 },
Magic { mask: Bitboard(0x8080876080800), shift: 0xa, magic: 0x221208900100500, offset: 0xb000 },
Magic { mask: Bitboard(0x1010106e101000), shift: 0xa, magic: 0x110100248800, offset: 0xb400 },
Magic { mask: Bitboard(0x2020205e202000), shift: 0xa, magic: 0x8400800a0080, offset: 0xb800 },
Magic { mask: Bitboard(0x4040403e404000), shift: 0xa, magic: 0x2801000100820004, offset: 0xbc00 },
Magic { mask: Bitboard(0x8080807e808000), shift: 0xb, magic: 0x100802180004500, offset: 0xc000 },
Magic { mask: Bitboard(0x1017e01010100), shift: 0xb, magic: 0x824000800860, offset: 0xc800 },
Magic { mask: Bitboard(0x2027c02020200), shift: 0xa, magic: 0x50004001402002, offset: 0xd000 },
Magic { mask: Bitboard(0x4047a04040400), shift: 0xa, magic: 0x802000801000, offset: 0xd400 },
Magic { mask: Bitboard(0x8087608080800), shift: 0xa, magic: 0xa1001821005000, offset: 0xd800 },
Magic { mask: Bitboard(0x10106e10101000), shift: 0xa, magic: 0x800400800800, offset: 0xdc00 },
Magic { mask: Bitboard(0x20205e20202000), shift: 0xa, magic: 0x1c0080800200, offset: 0xe000 },
Magic { mask: Bitboard(0x40403e40404000), shift: 0xa, magic: 0x11420c004810, offset: 0xe400 },
Magic { mask: Bitboard(0x80807e80808000), shift: 0xb, magic: 0x100e182000401, offset: 0xe800 },
Magic { mask: Bitboard(0x17e0101010100), shift: 0xb, magic: 0x80400c2181498000, offset: 0xf000 },
Magic { mask: Bitboard(0x27c0202020200), shift: 0xa, magic: 0x6000402010034005, offset: 0xf800 },
Magic { mask: Bitboard(0x47a0404040400), shift: 0xa, magic: 0x4000200100110044, offset: 0xfc00 },
Magic { mask: Bitboard(0x8760808080800), shift: 0xa, magic: 0x10008488008010, offset: 0x10000 },
Magic { mask: Bitboard(0x106e1010101000), shift: 0xa, magic: 0x110018010024, offset: 0x10400 },
Magic { mask: Bitboard(0x205e2020202000), shift: 0xa, magic: 0xc0102004080140, offset: 0x10800 },
Magic { mask: Bitboard(0x403e4040404000), shift: 0xa, magic: 0x8a28010810840002, offset: 0x10c00 },
Magic { mask: Bitboard(0x807e8080808000), shift: 0xb, magic: 0x40008161060004, offset: 0x11000 },
Magic { mask: Bitboard(0x7e010101010100), shift: 0xb, magic: 0x5012448820200, offset: 0x11800 },
Magic { mask: Bitboard(0x7c020202020200), shift: 0xa, magic: 0x404402100820200, offset: 0x12000 },
Magic { mask: Bitboard(0x7a040404040400), shift: 0xa, magic: 0x820200d00104100, offset: 0x12400 },
Magic { mask: Bitboard(0x76080808080800), shift: 0xa, magic: 0x101200c0200a00, offset: 0x12800 },
Magic { mask: Bitboard(0x6e101010101000), shift: 0xa, magic: 0xcc0081080080, offset: 0x12c00 },
Magic { mask: Bitboard(0x5e202020202000), shift: 0xa, magic: 0x802401420080, offset: 0x13000 },
Magic { mask: Bitboard(0x3e404040404000), shift: 0xa, magic: 0xc800462810010c00, offset: 0x13400 },
Magic { mask: Bitboard(0x7e808080808000), shift: 0xb, magic: 0x8400028104104200, offset: 0x13800 },
Magic { mask: Bitboard(0x7e01010101010100), shift: 0xc, magic: 0x120809021020042, offset: 0x14000 },
Magic { mask: Bitboard(0x7c02020202020200), shift: 0xb, magic: 0x480b2002040810a, offset: 0x15000 },
Magic { mask: Bitboard(0x7a04040404040400), shift: 0xb, magic: 0x680041003020000b, offset: 0x15800 },
Magic { mask: Bitboard(0x7608080808080800), shift: 0xb, magic: 0x110000411002009, offset: 0x16000 },
Magic { mask: Bitboard(0x6e10101010101000), shift: 0xb, magic: 0x200100502800021d, offset: 0x16800 },
Magic { mask: Bitboard(0x5e20202020202000), shift: 0xb, magic: 0x22000409102802, offset: 0x17000 },
Magic { mask: Bitboard(0x3e40404040404000), shift: 0xb, magic: 0x10a610080b0c, offset: 0x17800 },
Magic { mask: Bitboard(0x7e80808080808000), shift: 0xc, magic: 0xe20080840700c022, offset: 0x18000 },
];