use std::collections::BTreeMap;
use super::{
Certificate, CertificateLevels, CertificateStrength, ConformanceLevel, CoverageMetrics,
EngineResult, EngineStatus, OpOutcome, OpResult, TrackReport,
};
use crate::spec::law::LawViolation;
use crate::spec::types::ParityFailure;
impl Certificate {
#[must_use]
#[inline]
pub(crate) fn new(
backend_name: String,
backend_version: String,
spec_version: u32,
level: CertificateLevels,
certificate_hash: [u8; 32],
strength: CertificateStrength,
witness_count: u64,
witness_count_by_op: BTreeMap<String, u64>,
proof_status: String,
integer_track: TrackReport,
float_track: Option<TrackReport>,
approximate_track: Option<TrackReport>,
ops: Vec<OpResult>,
unsupported_ops: Vec<String>,
engines: Vec<EngineResult>,
registry_hash: [u8; 32],
coverage: CoverageMetrics,
) -> Self {
Self {
backend_name,
backend_version,
spec_version,
level,
certificate_hash,
strength,
witness_count,
witness_count_by_op,
proof_status,
integer_track,
float_track,
approximate_track,
ops,
unsupported_ops,
engines,
registry_hash,
coverage,
}
}
#[must_use]
#[inline]
pub fn backend_name(&self) -> &str {
&self.backend_name
}
#[must_use]
#[inline]
pub fn backend_version(&self) -> &str {
&self.backend_version
}
#[must_use]
#[inline]
pub fn spec_version(&self) -> u32 {
self.spec_version
}
#[must_use]
#[inline]
pub fn level(&self) -> CertificateLevels {
self.level
}
#[must_use]
#[inline]
pub fn certificate_hash(&self) -> &[u8; 32] {
&self.certificate_hash
}
#[must_use]
#[inline]
pub fn strength(&self) -> CertificateStrength {
self.strength
}
#[must_use]
#[inline]
pub fn witness_count(&self) -> u64 {
self.witness_count
}
#[must_use]
#[inline]
pub fn witness_count_by_op(&self) -> &BTreeMap<String, u64> {
&self.witness_count_by_op
}
#[must_use]
#[inline]
pub fn proof_status(&self) -> &str {
&self.proof_status
}
#[must_use]
#[inline]
pub fn integer_track(&self) -> &TrackReport {
&self.integer_track
}
#[must_use]
#[inline]
pub fn float_track(&self) -> &Option<TrackReport> {
&self.float_track
}
#[must_use]
#[inline]
pub fn approximate_track(&self) -> &Option<TrackReport> {
&self.approximate_track
}
#[must_use]
#[inline]
pub fn ops(&self) -> &[OpResult] {
&self.ops
}
#[must_use]
#[inline]
pub fn unsupported_ops(&self) -> &[String] {
&self.unsupported_ops
}
#[must_use]
#[inline]
pub fn engines(&self) -> &[EngineResult] {
&self.engines
}
#[must_use]
#[inline]
pub fn registry_hash(&self) -> &[u8; 32] {
&self.registry_hash
}
#[must_use]
#[inline]
pub fn coverage(&self) -> &CoverageMetrics {
&self.coverage
}
}
impl OpResult {
#[must_use]
#[inline]
pub fn id(&self) -> &str {
&self.id
}
#[must_use]
#[inline]
pub fn archetype(&self) -> &str {
&self.archetype
}
#[must_use]
#[inline]
pub fn outcome(&self) -> OpOutcome {
self.outcome
}
#[must_use]
#[inline]
pub fn parity_passed(&self) -> bool {
self.parity_passed
}
#[must_use]
#[inline]
pub fn laws_verified(&self) -> &[String] {
&self.laws_verified
}
#[must_use]
#[inline]
pub fn laws_failed(&self) -> &[LawViolation] {
&self.laws_failed
}
#[must_use]
#[inline]
pub fn parity_failures(&self) -> &[ParityFailure] {
&self.parity_failures
}
#[must_use]
#[inline]
pub fn cases_tested(&self) -> u64 {
self.cases_tested
}
#[must_use]
#[inline]
pub fn witness_count(&self) -> u64 {
self.witness_count
}
}
impl TrackReport {
#[must_use]
#[inline]
pub fn level(&self) -> Option<ConformanceLevel> {
self.level
}
#[must_use]
#[inline]
pub fn ops(&self) -> &[OpResult] {
&self.ops
}
#[must_use]
#[inline]
pub fn unsupported_ops(&self) -> &[String] {
&self.unsupported_ops
}
#[must_use]
#[inline]
pub fn coverage(&self) -> &CoverageMetrics {
&self.coverage
}
}
impl EngineResult {
#[must_use]
#[inline]
pub fn id(&self) -> &str {
&self.id
}
#[must_use]
#[inline]
pub fn status(&self) -> EngineStatus {
self.status
}
#[must_use]
#[inline]
pub fn invariants_verified(&self) -> &[String] {
&self.invariants_verified
}
#[must_use]
#[inline]
pub fn invariants_failed(&self) -> &[String] {
&self.invariants_failed
}
#[must_use]
#[inline]
pub fn cases_tested(&self) -> u64 {
self.cases_tested
}
}