Property based testing is a paradigm which either generates tests using or verifies code with a set of characteristics about the code asserted by the programmer. For example, when testing a multiplication function, I know whenever a negative number is multiplied by a negative number, the answer must be positive. A toolkit for property based testing may generate random test cases which pass two negative numbers which attempt to double check the validity of the programmers assertion on the code. Some well known libraries for property based testing are Haskell's `QuickCheck` and TypeScript's `fast-check`

Model Based Testing is a testing methodology which involved describing the expected behavior of a binary when run on a closed system (sometimes called a SUT or System Under Test), and comparing it to the actual results of executing the binary. Often model based tests are generated automatically via theorems.

Fuzzing is a technique in which invalid, corrupted, or unexpected data is fed into a system in an attempt to induce a crash or malfunction. Unlike the aforementioned methods, fuzzing does not seek to test for a specific property but rather discover bugs via stress testing. An example of fuzzing might be feeding corrupted UTF-8 data into a Large Language Model in order to ascertain it's resistance to incomprehensible data.
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence