修复 Arc::make_mut 遗留问题

增加 基础数据对比方法
This commit is contained in:
YuWuKunCheng
2026-06-05 16:35:31 +08:00
parent 823a24d364
commit e33b1f0744
17 changed files with 1809 additions and 24 deletions
+95 -2
View File
@@ -387,7 +387,7 @@ impl 中枢 {
pub fn (
: Arc<线>, : Arc<线>, : Arc<线>, : i64, : &str
) -> Self {
debug_assert!(Self::(&, &, &), "中枢.创建 基础检查失败");
assert!(Self::(&, &, &), "中枢.创建 基础检查失败");
Self::new(
0,
format!("{}中枢<{}>", , ..read().unwrap()),
@@ -566,7 +566,7 @@ impl 中枢 {
} else {
if .is_empty() {
// 仍在范围内:延伸中枢
debug_assert!(
assert!(
[_idx]
.
.read()
@@ -615,6 +615,99 @@ impl 中枢 {
}
}
}
/// 结构化相等校验 — 递归校验基础序列虚线和第三买卖线,返回 (是否相等, 差异描述)
pub fn (&self, other: &Self, : f64) -> (bool, String) {
if self..load(Ordering::Relaxed) != other..load(Ordering::Relaxed) {
return (
false,
format!(
"中枢: [序号] 不等 A={},B={}",
self..load(Ordering::Relaxed),
other..load(Ordering::Relaxed)
),
);
}
if *self..read().unwrap() != *other..read().unwrap() {
return (
false,
format!(
"中枢: [标识] 不等 A={},B={}",
self..read().unwrap(),
other..read().unwrap()
),
);
}
if self..load(Ordering::Relaxed) != other..load(Ordering::Relaxed) {
return (
false,
format!(
"中枢: [级别] 不等 A={},B={}",
self..load(Ordering::Relaxed),
other..load(Ordering::Relaxed)
),
);
}
// 基础序列
let a_seq = self..read().unwrap();
let b_seq = other..read().unwrap();
if a_seq.len() != b_seq.len() {
return (
false,
format!(
"中枢: [基础序列] 长度不一致 A={},B={}",
a_seq.len(),
b_seq.len()
),
);
}
for (idx, (a, b)) in a_seq.iter().zip(b_seq.iter()).enumerate() {
let (eq, msg) = a.(b, );
if !eq {
return (false, format!("中枢: 基础序列[{idx}]虚线异常 >> {msg}"));
}
}
// 第三买卖线
let = |: &str,
a: &Option<Arc<线>>,
b: &Option<Arc<线>>,
: f64|
-> Result<(), String> {
match (a, b) {
(None, None) => Ok(()),
(Some(x), Some(y)) => {
let (eq, msg) = x.(y, );
if eq {
Ok(())
} else {
Err(format!("中枢: [{名}]子虚线异常 >> {msg}"))
}
}
_ => Err(format!(
"中枢: [{名}]空值不一致 A={},B={}",
a.is_some(),
b.is_some()
)),
}
};
(
"第三买卖线",
&self.线.read().unwrap(),
&other.线.read().unwrap(),
,
)
.map_err(|e| (false, e))
.ok();
(
"本级_第三买卖线",
&self._第三买卖线.read().unwrap(),
&other._第三买卖线.read().unwrap(),
,
)
.map_err(|e| (false, e))
.ok();
(true, "中枢: 全部字段一致".into())
}
}
impl std::fmt::Display for {