Не зная, какие у вас правила, сложно сказать наверняка, но при условии, что они примерно такие, «пароль должен содержать не менее 8 символов, как минимум одну заглавную букву, одну строчную букву, одну цифру и один специальный символ». «тогда невозможно даже с помощью грубой силы проверить достаточное количество сгенерированных паролей, чтобы доказать правильность алгоритма (поскольку для этого потребуется где-то более 8 ^ 70 = 1,63x10 ^ 63 проверок в зависимости от того, сколько специальных символов вы назначите для использования, что займет очень и очень много времени, чтобы завершить).
В конечном итоге все, что вы можете сделать, - это проверить столько паролей, сколько это возможно, и, если они нарушат правила, вы знаете, что алгоритм неверен. Наверное, лучше всего оставить его включенным на ночь, а если утром все будет хорошо, скорее всего, все будет в порядке.
Если вы хотите быть вдвойне уверенным в работе, то реализуйте внешнюю функцию, которая вызывает функцию генерации пароля в цикле и проверяет ее на соответствие правилам. Если это не удается, зарегистрируйте ошибку, указывающую на это (так что вы знаете, что это нужно исправить), и сгенерируйте другой пароль. Продолжайте, пока не получите тот, который соответствует правилам.