wedb_standalone 0.1.1

单机网络服务底座:RESP 协议帧、AOF 逻辑层与节点服务编排(对标 Garnet libs/server 单机半区)
//! 字节数组键比较器(对标 libs/server/ByteArrayWrapperComparer.cs)
//!
//! C# 为 IEqualityComparer<ByteArrayWrapper>(字节序列相等 + 字节哈希);
//! rust 键相等即切片相等,哈希经 gxhash 承接,本结构承接相等判定。

use crate::byte_array_wrapper::ByteArrayWrapper;

/// 字节数组键比较器
#[derive(Debug, Default, Clone, Copy)]
pub struct ByteArrayWrapperComparer;

impl ByteArrayWrapperComparer {
  /// libs/server/ByteArrayWrapperComparer.cs:Equals
  ///
  /// 字节序列逐字节相等(C# ReadOnlySpan.SequenceEqual)
  pub fn equals(left: &ByteArrayWrapper, right: &ByteArrayWrapper) -> bool {
    left.read_only_span() == right.read_only_span()
  }
}

#[cfg(test)]
mod tests {
  use super::*;

  #[test]
  fn equals_is_byte_sequence_equality() {
    let a = ByteArrayWrapper::copy_from(b"key-1");
    let b = ByteArrayWrapper::copy_from(b"key-1");
    let c = ByteArrayWrapper::copy_from(b"key-2");
    assert!(ByteArrayWrapperComparer::equals(&a, &b));
    assert!(!ByteArrayWrapperComparer::equals(&a, &c));
    assert!(ByteArrayWrapperComparer::equals(&a, &a));
  }
}