blob: e7e819dd034e8f2b302a56b5c26da5eec84b2941 [file] [log] [blame]
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +02001#include <cstdlib>
2#include <cstdio>
Christophe Favergeonfeb73932020-05-20 14:48:06 +02003
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +02004#include "TestDesc.h"
Christophe Favergeonfeb73932020-05-20 14:48:06 +02005#if defined(EMBEDDED)
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +02006#include "FPGA.h"
Christophe Favergeonfeb73932020-05-20 14:48:06 +02007#else
8#include "Semihosting.h"
9#endif
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020010#include "IORunner.h"
11#include "ArrayMemory.h"
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020012using namespace std;
13
Christophe Favergeon59aeeea2019-11-20 13:39:05 +010014#ifdef BENCHMARK
15#define MEMSIZE 300000
16#else
Christophe Favergeond3e4eb92019-10-22 12:12:22 +010017#define MEMSIZE 230000
Christophe Favergeon59aeeea2019-11-20 13:39:05 +010018#endif
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020019
20// Dummy (will be generated by python scripts)
21// char* array describing the tests and the input patterns.
22// Reference patterns are ignored in this case.
23#include "TestDrive.h"
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020024
25
Christophe Favergeon74a31ba2019-09-09 09:14:18 +010026
Christophe Favergeond99acab2020-05-11 13:40:39 +020027int testmain(const char *patterns)
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020028{
29 char *memoryBuf=NULL;
Christophe Favergeon74a31ba2019-09-09 09:14:18 +010030
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020031 memoryBuf = (char*)malloc(MEMSIZE);
32 if (memoryBuf !=NULL)
33 {
34 try
35 {
36 // Choice of a memory manager.
37 // Here we choose the Array one (only implemented one)
38 Client::ArrayMemory memory(memoryBuf,MEMSIZE);
39
40 // There is also possibility of using "FPGA" io
Christophe Favergeonfeb73932020-05-20 14:48:06 +020041 #if defined(EMBEDDED)
42 Client::FPGA io(testDesc,patterns);
43 #else
44 Client::Semihosting io("../TestDesc.txt","../Patterns","../Output","../Parameters");
45 #endif
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020046
47
48 // Pattern Manager making the link between IO and Memory
49 Client::PatternMgr mgr(&io,&memory);
50
51
52 // A Runner to run the test.
53 // An IO runner is driven by some IO
54 // In future one may have a client/server runner driven
55 // by a server running on a host.
Christophe Favergeonfeb73932020-05-20 14:48:06 +020056 #if defined(EMBEDDED)
Christophe Favergeon909d0162020-04-28 10:39:58 +020057 Client::IORunner runner(&io,&mgr,Testing::kTestOnly);
Christophe Favergeonfeb73932020-05-20 14:48:06 +020058 #else
59 // Works also in embedded but slower since data is dumped
60 Client::IORunner runner(&io,&mgr,Testing::kTestAndDump);
61 #endif
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020062
63
64 // Root object containing all the tests
65 Root d(1);
66
67 // Runner applied to the tree of tests
68 d.accept(&runner);
69
70 }
71 catch(...)
72 {
73 printf("Exception\n");
74 }
75
76
77 free(memoryBuf);
78 }
79 else
80 {
81 printf("NOT ENOUGH MEMORY\n");
82 }
83
84 /* code */
85 return 0;
86}