@@ -43,3 +43,52 @@ async def test_latest_value_cache() -> None:
4343    await  asyncio .sleep (0 )
4444
4545    assert  cache .get () ==  19 
46+ 
47+ 
48+ @pytest .mark .integration  
49+ async  def  test_latest_value_cache_key () ->  None :
50+     """Ensure LatestValueCache works with keys.""" 
51+     channel  =  Broadcast [tuple [int , str ]](name = "lvc_test" )
52+ 
53+     cache  =  LatestValueCache (channel .new_receiver (), key = lambda  x : x [0 ])
54+     sender  =  channel .new_sender ()
55+ 
56+     assert  not  cache .has_value ()
57+     with  pytest .raises (ValueError , match = "No value has been received yet." ):
58+         cache .get ()
59+     with  pytest .raises (ValueError , match = "No value received for key: 0" ):
60+         cache .get (0 )
61+ 
62+     await  sender .send ((5 , "a" ))
63+     await  sender .send ((6 , "b" ))
64+     await  sender .send ((5 , "c" ))
65+     await  asyncio .sleep (0 )
66+ 
67+     assert  cache .has_value ()
68+     assert  cache .has_value (5 )
69+     assert  cache .has_value (6 )
70+     assert  not  cache .has_value (7 )
71+ 
72+     assert  cache .get () ==  (5 , "c" )
73+     assert  cache .get (5 ) ==  (5 , "c" )
74+     assert  cache .get (6 ) ==  (6 , "b" )
75+ 
76+     with  pytest .raises (ValueError , match = "No value received for key: 7" ):
77+         cache .get (7 )
78+ 
79+     await  sender .send ((12 , "d" ))
80+     await  asyncio .sleep (0 )
81+ 
82+     assert  cache .get () ==  (12 , "d" )
83+     assert  cache .get () ==  (12 , "d" )
84+     assert  cache .get (12 ) ==  (12 , "d" )
85+     assert  cache .get (12 ) ==  (12 , "d" )
86+     assert  cache .get (5 ) ==  (5 , "c" )
87+     assert  cache .get (6 ) ==  (6 , "b" )
88+ 
89+     await  sender .send ((6 , "e" ))
90+     await  sender .send ((6 , "f" ))
91+     await  sender .send ((6 , "g" ))
92+     await  asyncio .sleep (0 )
93+ 
94+     assert  cache .get (6 ) ==  (6 , "g" )
0 commit comments