00001 #include "FullBypassSummaryWriter.h" 00002 #include "SctData/FullBypassTestResult.h" 00003 #include "SummaryManager.h" 00004 #include "SctData/ModuleDefect.h" 00005 00006 namespace SctData { 00007 namespace TestSummary{ 00008 void FullBypassSummaryWriter::write(const TestResult& t, std::ostream& out) const throw(Sct::IoError, Sct::LogicError) 00009 { 00010 const FullBypassTestResult& result = dynamic_cast<const FullBypassTestResult&>(t); 00011 out << "#\n%FullBypassTest\n#\n"; 00012 out << "#NConfigs " << result.getNConfig() << endl; 00013 out << "#Vdd = " << result.getTestPointAt(0) << " -> " << result.getTestPointAt(result.getNScans()-1) << endl; 00014 out << "#\n#Vmin\n#token\tr_tkn\ttoken\tr_tkn\n" << endl; 00015 for (unsigned ichip=0; ichip<nChipModule; ichip+=2){ 00016 out << "#" << getChipName(ichip) << "\t\t" << getChipName(ichip+1) << endl; 00017 out << result.getChipResult(ichip).vdd_direct << "\t" << result.getChipResult(ichip).vdd_bypass << "\t" 00018 << result.getChipResult(ichip+1).vdd_direct << "\t" << result.getChipResult(ichip+1).vdd_bypass << endl; 00019 } 00020 00021 out << "#Comment" << endl; 00022 for (unsigned ichip=0; ichip<nChipModule; ichip+=2){ 00023 out << "#" << getChipName(ichip) << "\t\t" << getChipName(ichip+1) << endl; 00024 out << reason(result.getChipResult(ichip).status_direct) << "\t" 00025 << reason(result.getChipResult(ichip).status_bypass) << "\t" 00026 << reason(result.getChipResult(ichip+1).status_direct) << "\t" 00027 << reason(result.getChipResult(ichip+1).status_bypass) << endl; 00028 } 00029 00030 out << endl; 00031 00032 SummaryWriter::write(t.getDefects(), out); 00033 } 00034 00035 string FullBypassSummaryWriter::reason(const short int status){ 00036 switch (status) { 00037 case -3: 00038 return "\"Failing maximal tested Vdd\""; 00039 case -2: 00040 return "\"Not Tested\""; 00041 case -1: 00042 return "\"Minimal accessible\""; 00043 case 0: 00044 return "\"Minimal functional\""; 00045 case 1: 00046 return "\"Minimal tested\""; 00047 default: 00048 return "\"Unknown!\""; 00049 } 00050 } 00051 00052 bool FullBypassSummaryWriter::inMap = SummaryManager::instance().addWriter("SctData::FullBypassTestResult", shared_ptr<SummaryWriter>(new FullBypassSummaryWriter())); 00053 } 00054 }