Example #1
0
void symex_parseoptionst::report_properties(
  const path_searcht::property_mapt &property_map)
{
  for(path_searcht::property_mapt::const_iterator
      it=property_map.begin();
      it!=property_map.end();
      it++)
  {
    if(get_ui()==ui_message_handlert::XML_UI)
    {
      xmlt xml_result("result");
      xml_result.set_attribute("claim", id2string(it->first));

      std::string status_string;

      switch(it->second.status)
      {
      case path_searcht::PASS: status_string="OK"; break;
      case path_searcht::FAIL: status_string="FAILURE"; break;
      case path_searcht::NOT_REACHED: status_string="OK"; break;
      }

      xml_result.set_attribute("status", status_string);

      std::cout << xml_result << "\n";
    }
    else
    {
      status() << "[" << it->first << "] "
               << it->second.description << ": ";
      switch(it->second.status)
      {
      case path_searcht::PASS: status() << "OK"; break;
      case path_searcht::FAIL: status() << "FAILED"; break;
      case path_searcht::NOT_REACHED: status() << "OK"; break;
      }
      status() << eom;
    }

    if(cmdline.isset("show-trace") &&
       it->second.status==path_searcht::FAIL)
      show_counterexample(it->second.error_trace);
  }

  if(!cmdline.isset("property"))
  {
    status() << eom;

    unsigned failed=0;

    for(path_searcht::property_mapt::const_iterator
        it=property_map.begin();
        it!=property_map.end();
        it++)
      if(it->second.status==path_searcht::FAIL)
        failed++;

    status() << "** " << failed
             << " of " << property_map.size() << " failed"
             << eom;
  }
}
Example #2
0
satcheckt::resultt ranking_synthesis_satt::check_for_counterexample(
   const exprt &templ,
   c_valuest &c_values,
   fine_timet &conversion_time,
   fine_timet &solver_time)
{
  satcheckt::resultt result;

  satcheckt solver;
  bv_pointerst converter(ns, solver);   

  solver.set_message_handler(get_message_handler());
  solver.set_verbosity(verbosity);
  converter.set_message_handler(get_message_handler());
  converter.set_verbosity(verbosity);

  show_coefficients(c_values);

  fine_timet before = current_time();
  converter.set_to_true(templ);

  for(c_valuest::const_iterator it=c_values.begin();
      it!=c_values.end();
      it++)
  {
    equal_exprt eq;

    if(it->first.get("identifier")=="termination::constant$C")
    {
      mp_integer cval;
      if(to_integer(largest_constant, cval))
        throw "number conversion failed";

      mp_integer b=cval * it->second;

      eq=equal_exprt(it->first,
                        from_integer(b, it->first.type()));
    }
    else
      eq=equal_exprt(it->first, from_integer(it->second, it->first.type()));

    converter.set_to_true(eq);
  }

  conversion_time+=current_time()-before;

  before = current_time();
  result=solver.prop_solve();
  solver_time+=current_time()-before;
  solver_calls++;

  std::string output;
  
  if(result==satcheckt::P_SATISFIABLE)    
    show_counterexample(converter);
  else if(result==satcheckt::P_UNSATISFIABLE)
    output += " ... YES!\n";
  else
    output += "ERROR\n";
  
  debug(output);

  return result;
}