approximated > native. */ final class CalculationFidelity { const NATIVE = 'native'; const APPROXIMATED = 'approximated'; const REJECTED = 'rejected'; /** * Merge allocation fidelity into scan-level fidelity (worst wins). * * @param string $current Current scan fidelity. * @param string $incoming Allocation fidelity. * @return string */ public static function merge( $current, $incoming ) { $rank = array( self::NATIVE => 0, self::APPROXIMATED => 1, self::REJECTED => 2, ); $c = isset( $rank[ (string) $current ] ) ? $rank[ (string) $current ] : 0; $i = isset( $rank[ (string) $incoming ] ) ? $rank[ (string) $incoming ] : 0; if ( $i > $c ) { return (string) $incoming; } return (string) $current; } /** * Whether fidelity means the coupon must not produce full-price financial findings. * * @param string $fidelity Fidelity. * @return bool */ public static function is_rejected( $fidelity ) { return self::REJECTED === (string) $fidelity; } /** * Prevent instantiation. */ private function __construct() {} }