const byte PinOut [] = { 10, 9, 8 };
const byte PinInp [] = {  5, 6, 7 };
const int  Npin      = sizeof(PinInp);
char s [90];
// -----------------------------------------------------------------------------
void
fault (
    byte pinOut,
    byte pinInp,
    int  lvl )
{
    if (pinOut == pinInp)
        sprintf (s, "fault: %d %d %s - non-conductive",
                                    pinOut, pinInp, lvl ? "H" : "L" );
    else
        sprintf (s, "fault: %d %d %s - cross-connect",
                                    pinOut, pinInp, lvl ? "H" : "L" );
    Serial.println (s);
}
// -----------------------------------------------------------------------------
void
test (void)
{
    for (int n = 0; n < Npin; n++)  {
        digitalWrite (PinOut [n], LOW);     // pull low
        for (int i = 0; i < Npin; i++)  {
            byte inp = digitalRead (PinInp [i]);
            if (n == i)  {
                if (LOW != inp)
                    fault (n, i, inp);
            }
            else  {
                if (LOW == inp)
                    fault (n, i, inp);
            }
        }
        digitalWrite (PinOut [n], HIGH);
    }
}
// -----------------------------------------------------------------------------
void
setup (void)
{
    Serial.begin (9600);
    for (int n = 0; n < Npin; n++)  {
        pinMode      (PinInp [n], INPUT_PULLUP);
        pinMode      (PinOut [n], OUTPUT);
        digitalWrite (PinOut [n], HIGH);
    }
    test ();
}
void
loop (void)
{
}