二七王:Balance.readystate 改为深拷贝下发,扩展深拷贝守卫测试
o_desk.prepare 是 do_prepare 就地置 1、do_new_paiju 就地重建的活数组, 整根挂进 deskinfo.Balance.readystate 会让「已发出的包」随后续准备操作被回改。 与 get_playproc / get_seatlist / get_pushlist / get_bottomcards 同一条标准,改为下发副本。 test_rpc 扩展既有的深拷贝守卫:正面(内容逐格相等)+ 非空转(活数组确实变过) + 反面(已发出的包不被回改、改副本不影响本体)。反向验证:去掉 .concat() 后两条断言转红。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -770,4 +770,19 @@ t.eq('座位牌况 get_seatlist 内容与活表逐格相等', JS(slNow), JS(sl.p
|
||||
slNow[0][0][0] = 9;
|
||||
t.eq('座位牌况 get_seatlist 是深拷贝(改副本不影响本体)', sl.pj.seatlist[0][0][0] !== 9, true);
|
||||
|
||||
// ===================== Balance.readystate 必须以深拷贝下发(不把活数组挂进下发包)=====================
|
||||
// o_desk.prepare 是一张全程就地改写的活数组(do_prepare 把某一格置 1、do_new_paiju 就地重建)。
|
||||
// 它此前被整根挂进 deskinfo.Balance.readystate,与 playproc / seatlist / pushlist 同级的隐患:
|
||||
// 已发出的包会随后续准备操作被回改。标准与 get_playproc 一致——下发副本。
|
||||
const rs = driveToSettle("00000");
|
||||
const rsLive = E.get_deskinfo(rs.c.o_room, 0).Balance.readystate;
|
||||
t.eq('准备状态 内容与活数组逐格相等', JS(rsLive), JS(rs.c.o_desk.prepare));
|
||||
t.eq('准备状态 发包时刻三家皆未准备 → 用例起点明确', JS(rsLive), JS([0, 0, 0]));
|
||||
rs.c.o_desk.prepare[1] = 1; //模拟「包已发出之后,1 号位按了准备」(do_prepare 的就地写)
|
||||
t.eq('准备状态 活数组确实变过 → 用例非空转', JS(rs.c.o_desk.prepare), JS([0, 1, 0]));
|
||||
t.eq('准备状态 下发的是深拷贝(已发出的包不被后续准备操作回改)', JS(rsLive), JS([0, 0, 0]));
|
||||
// 反面:改副本不得影响本体
|
||||
rsLive[2] = 9;
|
||||
t.eq('准备状态 是深拷贝(改副本不影响本体)', rs.c.o_desk.prepare[2], 0);
|
||||
|
||||
process.exit(t.done('rpc') ? 0 : 1);
|
||||
|
||||
Reference in New Issue
Block a user