episodic-memory-testing
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseEpisodic Memory Testing Patterns
情景记忆测试模式
Specialized testing patterns for the episodic memory system.
针对情景记忆系统的专用测试模式。
Episode Lifecycle Testing
情节生命周期测试
Complete Flow
完整流程
rust
#[tokio::test]
async fn test_complete_episode_lifecycle() {
let memory = setup_memory().await;
// 1. Start episode
let id = memory.start_episode("Test task", ctx, TaskType::CodeGen).await;
assert!(!id.is_empty());
// 2. Log steps
memory.log_execution_step(id.clone(), step1).await;
memory.log_execution_step(id.clone(), step2).await;
// 3. Complete episode
memory.complete_episode(id.clone(), TaskOutcome::Success, None).await?;
// 4. Verify
let episode = memory.get_episode(&id).await?;
assert_eq!(episode.outcome, TaskOutcome::Success);
assert_eq!(episode.steps.len(), 2);
}rust
#[tokio::test]
async fn test_complete_episode_lifecycle() {
let memory = setup_memory().await;
// 1. Start episode
let id = memory.start_episode("Test task", ctx, TaskType::CodeGen).await;
assert!(!id.is_empty());
// 2. Log steps
memory.log_execution_step(id.clone(), step1).await;
memory.log_execution_step(id.clone(), step2).await;
// 3. Complete episode
memory.complete_episode(id.clone(), TaskOutcome::Success, None).await?;
// 4. Verify
let episode = memory.get_episode(&id).await?;
assert_eq!(episode.outcome, TaskOutcome::Success);
assert_eq!(episode.steps.len(), 2);
}ID Uniqueness
ID唯一性
rust
#[tokio::test]
async fn test_episode_ids_unique() {
let ids: HashSet<String> = (0..100)
.map(|i| memory.start_episode(format!("Task {}", i), ctx, type_).await)
.collect();
assert_eq!(ids.len(), 100);
}rust
#[tokio::test]
async fn test_episode_ids_unique() {
let ids: HashSet<String> = (0..100)
.map(|i| memory.start_episode(format!("Task {}", i), ctx, type_).await)
.collect();
assert_eq!(ids.len(), 100);
}Pattern Extraction Testing
模式提取测试
rust
#[tokio::test]
async fn test_pattern_extraction() {
let patterns = memory.extract_patterns(episode_id).await?;
assert!(!patterns.is_empty());
for pattern in &patterns {
assert!(!pattern.name.is_empty());
assert!(pattern.frequency > 0.0);
}
}rust
#[tokio::test]
async fn test_pattern_extraction() {
let patterns = memory.extract_patterns(episode_id).await?;
assert!(!patterns.is_empty());
for pattern in &patterns {
assert!(!pattern.name.is_empty());
assert!(pattern.frequency > 0.0);
}
}Reward Scoring Testing
奖励评分测试
rust
#[tokio::test]
async fn test_reward_score_bounds() {
let perfect = calculate_reward_score(1.0, 1.0);
assert!(perfect >= 0.9);
let zero_efficiency = calculate_reward_score(0.0, 1.0);
assert!(zero_efficiency < perfect);
}rust
#[tokio::test]
async fn test_reward_score_bounds() {
let perfect = calculate_reward_score(1.0, 1.0);
assert!(perfect >= 0.9);
let zero_efficiency = calculate_reward_score(0.0, 1.0);
assert!(zero_efficiency < perfect);
}Memory Retrieval Testing
记忆检索测试
rust
#[tokio::test]
async fn test_retrieval_by_context() {
let rust_memories = memory.retrieve_context("rust", Some(10)).await?;
assert!(rust_memories.len() >= 1);
assert!(rust_memories.iter().all(|m| m.context.language == "rust"));
}rust
#[tokio::test]
async fn test_retrieval_by_context() {
let rust_memories = memory.retrieve_context("rust", Some(10)).await?;
assert!(rust_memories.len() >= 1);
assert!(rust_memories.iter().all(|m| m.context.language == "rust"));
}Best Practices
最佳实践
- Use setup functions for memory initialization
- Clean up after tests
- Test edge cases (empty episodes, failed operations)
- Verify state transitions
- Mock embedding providers for speed
- 使用初始化函数完成记忆模块初始化
- 测试后清理资源
- 测试边缘情况(空情节、失败操作)
- 验证状态转换
- 模拟嵌入提供商以提升测试速度