import subprocess

green = '\033[32m'
red = '\033[31m'
clr = '\033[0m'

expected = {
  "2048 dm uc": 0.8903,
  "1024 dm uc": 0.8731,
  "2048 dm sc": 0.9104,
  "1024 dm sc": 0.8903,
  "2048 fa uc": 0.9174,
  "1024 fa uc": 0.8918,
  "2048 fa sc": 0.9167,
  "1024 fa sc": 0.8955,
}

for (args, ex) in expected.items():
  try:
    command = ['./cache_sim'] + args.split(' ') + [ ]
    sim = subprocess.Popen(command, stdout=subprocess.PIPE)
    sim.wait()
    subprocess.check_call(('grep', f'Hit Rate: {ex}'), stdin = sim.stdout)
    print(f'[{green}V{clr}] {args}: {ex}')
  except:
    print(f'[{red}X{clr}] {args}: {ex}')

    # Optimally, we would tee the output from the original sim here, but it's too teedious :)
    sim2 = subprocess.Popen(command)
    sim2.wait()
    print()
