Documentation Index
Fetch the complete documentation index at: https://docs.privora.xyz/llms.txt
Use this file to discover all available pages before exploring further.
The test environment provides assertion methods for verifying encrypted computation results.
Integer Assertions
Assert that an encrypted value equals an expected plaintext:
// Assert u8 value
env.assert_encrypted_eq_u8(&hash, 100);
// Assert u32 value
env.assert_encrypted_eq_u32(&hash, 100000);
// Assert u64 value
env.assert_encrypted_eq_u64(&hash, 10000000000);
These methods:
- Fetch the ciphertext from the data store
- Decrypt using the test environment’s client key
- Compare against the expected value
- Panic with a descriptive message on mismatch
Boolean Assertions
Assert encrypted boolean values:
// Assert encrypted boolean is true
env.assert_encrypted_true(&bool_hash);
// Assert encrypted boolean is false
env.assert_encrypted_false(&bool_hash);
Custom Assertions
For more complex assertions, fetch and decrypt manually:
// Fetch and decrypt
let actual: u8 = env.fetch_and_decrypt_u8(&hash);
// Custom assertion
assert!(actual >= 50, "Value should be at least 50, got {}", actual);
assert!(actual <= 100, "Value should be at most 100, got {}", actual);
Assertion Failure Messages
On failure, assertions provide clear messages:
thread 'test_addition' panicked at 'Encrypted u8 mismatch: expected 80, got 70'
Testing Comparisons
Test that FHE comparisons produce correct results:
#[test]
fn test_comparison() {
let mut env = FheTestEnv::new();
// Create test values
let a_hash = env.encrypt_and_submit_u8(100);
let b_hash = env.encrypt_and_submit_u8(50);
// ... run comparison instruction ...
// Verify comparison result (a >= b should be true)
env.assert_encrypted_true(&result_bool_hash);
}
Testing Min/Max
#[test]
fn test_min_max() {
let mut env = FheTestEnv::new();
let a_hash = env.encrypt_and_submit_u8(100);
let b_hash = env.encrypt_and_submit_u8(50);
// ... run min instruction ...
// min(100, 50) = 50
env.assert_encrypted_eq_u8(&min_result_hash, 50);
// ... run max instruction ...
// max(100, 50) = 100
env.assert_encrypted_eq_u8(&max_result_hash, 100);
}
Complete Test Example
#[test]
fn test_order_matching() {
let mut env = FheTestEnv::new();
env.deploy_program(PROGRAM_ID, include_bytes!("../program.so"));
let payer = env.create_funded_keypair();
// Setup: buy_price=100, sell_price=95
// Expected: can_match=true, fill_price=95
let buy_price_hash = env.encrypt_and_submit_u8(100);
let sell_price_hash = env.encrypt_and_submit_u8(95);
let buy_qty_hash = env.encrypt_and_submit_u8(50);
let sell_qty_hash = env.encrypt_and_submit_u8(30);
// ... build and send transaction ...
env.sync_data_store_to_syscalls();
// ... send transaction ...
env.sync_data_store_from_syscalls();
// Read result from account
let result_account = env.svm.get_account(&result_pubkey).unwrap();
let fill_price_hash: [u8; 32] = result_account.data[0..32].try_into().unwrap();
let fill_qty_hash: [u8; 32] = result_account.data[32..64].try_into().unwrap();
// Verify: fill_price = sell_price = 95
env.assert_encrypted_eq_u8(&fill_price_hash, 95);
// Verify: fill_qty = min(50, 30) = 30
env.assert_encrypted_eq_u8(&fill_qty_hash, 30);
}