### Question:
CRC16 { public static int MCRF4XX(@NonNull final byte[] data, final int offset, final int length) { return CRC(0x1021, 0xFFFF, data, offset, length, true, true, 0x0000); } private  CRC16(); static int CCITT_Kermit(@NonNull final byte[] data, final int offset, final int length); static int CCITT_FALSE(@NonNull final byte[] data, final int offset, final int length); static int MCRF4XX(@NonNull final byte[] data, final int offset, final int length); static int AUG_CCITT(@NonNull final byte[] data, final int offset, final int length); static int ARC(@NonNull final byte[] data, final int offset, final int length); static int MAXIM(@NonNull final byte[] data, final int offset, final int length); static int CRC(final int poly, final int init, @NonNull final byte[] data, final int offset, final int length, final boolean refin, final boolean refout, final int xorout);  }### Answer:
@Test public void MCRF4XX_123456789() { final byte[] data = "123456789".getBytes(); assertEquals(0x6F91, CRC16.MCRF4XX(data, 0, 9)); }
@Test public void MCRF4XX_CGMS() { final byte[] data = new byte[] { 0x3E, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 }; assertEquals(0x2F01, CRC16.MCRF4XX(data, 0, 10)); }
@Test public void MCRF4XX_A() { final byte[] data = new byte[] { 'A' }; assertEquals(0x5C0A, CRC16.MCRF4XX(data, 0, 1)); }
@Test public void MCRF4XX_8552F189() { final byte[] data = new byte[] {(byte) 0x58, (byte) 0x25, (byte) 0x1F, (byte) 0x98}; assertEquals(0x07F1, CRC16.MCRF4XX(data, 0, 4)); }