LightNest / tests /test_robust_patch_rl.py
LIghtJUNction's picture
Cursor
Add the October 17 experiment source without the result archives.
3f69d68 verified
Raw History Blame Contribute Delete
1.38 kB
import random
import unittest
from lightnest.learned_patch import MAX_WINDOW
from lightnest.train_patch_rl import execution_reward, passes
from lightnest.train_robust_patch_rl import FAMILIES, TRAIN_COMMANDS, TEST_COMMANDS, make_task
class RobustTests(unittest.TestCase):
def test_templates_disjoint(self):
self.assertFalse(set(sum(TRAIN_COMMANDS.values(),())) & set(sum(TEST_COMMANDS.values(),())))
def test_semantic_oracles_and_none(self):
rng=random.Random(123)
for held in (False,True):
for family in FAMILIES:
e,cc=make_task(rng,family,held)
negative=family in ('already_correct','negation','keep','negation_dead')
self.assertEqual(passes(e.binary,cc),negative)
self.assertEqual(execution_reward(e.binary,MAX_WINDOW,0,cc),1 if negative else -1)
if negative:
self.assertEqual(execution_reward(e.binary,0,e.binary[0],cc),-1)
def test_distractor_edit_not_rewarded(self):
e,cc=make_task(random.Random(51),'dead_before')
# Exhaustively evaluate single-byte add/sub toggles for this test only.
successes=[]
for i,b in enumerate(e.binary):
if execution_reward(e.binary,i,b^64,cc)>0: successes.append(i)
self.assertEqual(len(successes),1)
if __name__=='__main__': unittest.main()