38 lines
2.0 KiB
Python
38 lines
2.0 KiB
Python
"""Pure audit-format tests; no neural trajectory or GPU required."""
|
|
import hashlib
|
|
import struct
|
|
import unittest
|
|
import numpy as np
|
|
from oracle_full import queue_summary,QUEUE_HEADER
|
|
from compare_trial import bit_equal
|
|
|
|
class ProtocolTests(unittest.TestCase):
|
|
def test_queue_chunk_independence_and_readonly(self):
|
|
edges=np.array([0,4,2,2,19000000],dtype=np.int64);mask=np.array([1,0,1,1,0],dtype=np.uint8)
|
|
edges.flags.writeable=False;mask.flags.writeable=False
|
|
expected=hashlib.sha256(QUEUE_HEADER+struct.pack('<qq',18,len(edges))+edges.astype('<i8').tobytes()+mask.tobytes()).hexdigest()
|
|
a=queue_summary(18,edges,mask,chunk_bytes=16)
|
|
b=queue_summary(18,edges,lambda x,y:mask[x:y],chunk_bytes=24)
|
|
self.assertEqual(a,b);self.assertEqual(a['joint_sha256'],expected)
|
|
self.assertEqual(a['accepted_count'],3);self.assertEqual(a['count'],5)
|
|
self.assertNotEqual(a['joint_sha256'],queue_summary(19,edges,mask)['joint_sha256'])
|
|
|
|
def test_empty_coverage(self):
|
|
e=np.empty(0,np.int64);m=np.empty(0,np.uint8)
|
|
a,b=queue_summary(0,e,m),queue_summary(1,e,m)
|
|
self.assertEqual(a['count'],0);self.assertEqual(a['ordered_edge_sha256'],hashlib.sha256(b'').hexdigest())
|
|
self.assertNotEqual(a['joint_sha256'],b['joint_sha256'])
|
|
|
|
def test_order_and_guard_not_ignored(self):
|
|
e=np.array([5,1,9],np.int64);m=np.array([1,1,0],np.uint8)
|
|
original=queue_summary(20,e,m)
|
|
self.assertNotEqual(original['joint_sha256'],queue_summary(20,e[::-1],m)['joint_sha256'])
|
|
self.assertNotEqual(original['joint_sha256'],queue_summary(20,e,1-m)['joint_sha256'])
|
|
|
|
def test_signed_zero_is_not_equal(self):
|
|
self.assertFalse(bit_equal(np.array([0.],np.float64),np.array([-0.],np.float64)))
|
|
self.assertFalse(bit_equal(np.array([1.],np.float64),np.array([1.],np.float32)))
|
|
self.assertTrue(bit_equal(np.array([1.,-0.],np.float64),np.array([1.,-0.],np.float64)))
|
|
|
|
if __name__=='__main__':unittest.main()
|