29 for(
int i = 1; i <= numStates; ++i) {
37 unsigned int numMarked = 1 + (rand() % std::min(2, numStates));
38 std::set<int> markedStates;
39 while(markedStates.size() < numMarked) {
40 int state = 1 + (rand() % numStates);
41 markedStates.insert(state);
46 std::vector<Idx> events;
47 for(
int i = 0; i < numEvents; ++i) {
48 char eventName =
'a' + i;
49 Idx event = nra.
InsEvent(std::string(1, eventName));
50 events.push_back(event);
54 int targetTransitions = numStates * numEvents;
55 int transitionsAdded = 0;
58 for(
int state = 1; state <= numStates; ++state) {
59 Idx event = events[rand() % events.size()];
60 Idx target = 1 + (rand() % numStates);
69 while(transitionsAdded < targetTransitions) {
70 Idx source = 1 + (rand() % numStates);
71 Idx event = events[rand() % events.size()];
72 Idx target = 1 + (rand() % numStates);
85 unsigned int rSize = 1 + (rand() % std::min(2, numStates));
86 std::set<int> rStates;
87 while(rStates.size() < rSize) {
88 int state = 1 + (rand() % numStates);
89 rStates.insert(state);
94 for(
int state = 1; state <= numStates; ++state) {
108 std::cout <<
"======== PseudoDet Algorithm Validation ========" << std::endl;
111 srand(time(
nullptr));
114 std::vector<int> stateCounts = {3, 5, 10, 15, 20, 30, 50, 75, 100};
115 std::vector<int> eventCounts = {3, 4, 5, 7};
116 int testsPerConfig = 3;
118 std::cout <<
"State_Count\tEvent_Count\tNRA_States\tNRA_Trans\tDRA_States\tDRA_Trans\tTime_ms\tStatus" << std::endl;
119 std::cout <<
"==========================================================================" << std::endl;
122 int successfulTests = 0;
124 for(
int numStates : stateCounts) {
125 for(
int numEvents : eventCounts) {
126 for(
int test = 0; test < testsPerConfig; ++test) {
134 int nraStates = nra.
Size();
139 auto startTime = std::chrono::high_resolution_clock::now();
143 auto endTime = std::chrono::high_resolution_clock::now();
144 auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime);
147 int draStates = dra.
Size();
150 std::cout << numStates <<
"\t\t" << numEvents <<
"\t\t"
151 << nraStates <<
"\t\t" << nraTransitions <<
"\t\t"
152 << draStates <<
"\t\t" << draTransitions <<
"\t\t"
153 << duration.count() <<
"\t\tSUCCESS" << std::endl;
157 }
catch(
const std::exception& e) {
158 std::cout << numStates <<
"\t\t" << numEvents <<
"\t\t"
159 <<
"N/A\t\tN/A\t\tN/A\t\tN/A\t\tN/A\t\tFAILED: " << e.what() << std::endl;
161 std::cout << numStates <<
"\t\t" << numEvents <<
"\t\t"
162 <<
"N/A\t\tN/A\t\tN/A\t\tN/A\t\tN/A\t\tFAILED: Unknown error" << std::endl;
173 std::cout <<
"======== Pseudo-Determinization Example ========" << std::endl;
177 NRA.
Read(
"pseudotest/test4.gen");
#define FAUDES_TEST_DIFF()
#define FAUDES_TEST_DUMP(mes, dat)
virtual void Insert(const T &rElem)
bool SetTransition(Idx x1, Idx ev, Idx x2)
void RabinAcceptance(const faudes::RabinAcceptance &rRabAcc)
void Read(const std::string &rFileName, const std::string &rLabel="", const Type *pContext=0)
bool ExistsTransition(const std::string &rX1, const std::string &rEv, const std::string &rX2) const
void SetInitState(Idx index)
void SetMarkedState(Idx index)
Idx TransRelSize(void) const
void PseudoDet(const RabinAutomaton &rGen, RabinAutomaton &rRes)
RabinAutomaton GenerateRandomNRA(int numStates, int numEvents)