use std::collections::HashMap;
use std::sync::Arc;
use std::sync::atomic::AtomicBool;
use atomic_refcell::AtomicRefCell;
use crate::common::counter::hardware_counter::HardwareCounterCell;
use crate::segment::common::utils::IndexesMap;
use crate::segment::id_tracker::in_memory_id_tracker::InMemoryIdTracker;
use crate::segment::index::PayloadIndexRead;
use crate::segment::index::payload_config::PayloadConfig;
use crate::segment::index::struct_payload_index::StructPayloadIndexReadView;
use crate::segment::index::visited_pool::VisitedPool;
use crate::segment::payload_storage::in_memory_payload_storage::InMemoryPayloadStorage;
use crate::segment::types::{Filter, VectorNameBuf};
use crate::segment::vector_storage::VectorStorageEnum;
#[test]
fn smoke_view_over_in_memory_backends() {
let payload: Arc<AtomicRefCell<InMemoryPayloadStorage>> =
Arc::new(AtomicRefCell::new(InMemoryPayloadStorage::default()));
let id_tracker = InMemoryIdTracker::new();
let vector_storages: HashMap<VectorNameBuf, Arc<AtomicRefCell<VectorStorageEnum>>> =
HashMap::new();
let field_indexes = IndexesMap::new();
let config = PayloadConfig::default();
let visited_pool = VisitedPool::new();
let view: StructPayloadIndexReadView<'_, _, _, VectorStorageEnum, _> =
StructPayloadIndexReadView {
payload: &payload,
id_tracker: &id_tracker,
vector_storages: &vector_storages,
field_indexes: &field_indexes,
config: &config,
visited_pool: &visited_pool,
};
let hw_counter = HardwareCounterCell::new();
let is_stopped = AtomicBool::new(false);
let indexed = view.indexed_fields();
assert!(indexed.is_empty(), "no indexed fields configured");
let empty_filter = Filter::default();
let result = view
.query_points(&empty_filter, &hw_counter, &is_stopped)
.expect("query_points");
assert!(result.is_empty(), "no points in tracker");
assert_eq!(view.available_point_count(), 0);
}