blob: 8e14920ad42666bf4f170b499312e7c632a2263a [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 Favergeon71060102022-03-07 11:05:01 +010014#ifndef MEMSIZE
Christophe Favergeon59aeeea2019-11-20 13:39:05 +010015#ifdef BENCHMARK
16#define MEMSIZE 300000
17#else
Christophe Favergeond3e4eb92019-10-22 12:12:22 +010018#define MEMSIZE 230000
Christophe Favergeon59aeeea2019-11-20 13:39:05 +010019#endif
Christophe Favergeon71060102022-03-07 11:05:01 +010020#endif
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020021
22// Dummy (will be generated by python scripts)
23// char* array describing the tests and the input patterns.
24// Reference patterns are ignored in this case.
25#include "TestDrive.h"
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020026
Christophe Favergeon3d6b7102021-05-20 13:16:37 +020027extern "C" void testmain_hook (void) __attribute__ ((weak));
28
29void testmain_hook(void)
30{
31
32}
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020033
Christophe Favergeond99acab2020-05-11 13:40:39 +020034int testmain(const char *patterns)
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020035{
Christophe Favergeon3d6b7102021-05-20 13:16:37 +020036 testmain_hook();
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020037 char *memoryBuf=NULL;
Christophe Favergeon74a31ba2019-09-09 09:14:18 +010038
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020039 memoryBuf = (char*)malloc(MEMSIZE);
40 if (memoryBuf !=NULL)
41 {
42 try
43 {
44 // Choice of a memory manager.
45 // Here we choose the Array one (only implemented one)
46 Client::ArrayMemory memory(memoryBuf,MEMSIZE);
47
48 // There is also possibility of using "FPGA" io
Christophe Favergeonfeb73932020-05-20 14:48:06 +020049 #if defined(EMBEDDED)
50 Client::FPGA io(testDesc,patterns);
51 #else
52 Client::Semihosting io("../TestDesc.txt","../Patterns","../Output","../Parameters");
53 #endif
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020054
Christophe Favergeon3d6b7102021-05-20 13:16:37 +020055
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020056 // Pattern Manager making the link between IO and Memory
57 Client::PatternMgr mgr(&io,&memory);
58
59
60 // A Runner to run the test.
61 // An IO runner is driven by some IO
62 // In future one may have a client/server runner driven
63 // by a server running on a host.
Christophe Favergeonfeb73932020-05-20 14:48:06 +020064 #if defined(EMBEDDED)
Christophe Favergeon909d0162020-04-28 10:39:58 +020065 Client::IORunner runner(&io,&mgr,Testing::kTestOnly);
Christophe Favergeon4eadae92020-05-29 11:44:53 +020066 //Client::IORunner runner(&io,&mgr,Testing::kTestAndDump);
Christophe Favergeonfeb73932020-05-20 14:48:06 +020067 #else
68 // Works also in embedded but slower since data is dumped
69 Client::IORunner runner(&io,&mgr,Testing::kTestAndDump);
70 #endif
Christophe Favergeon3b2a0ee2019-06-12 13:29:14 +020071
72
73 // Root object containing all the tests
74 Root d(1);
75
76 // Runner applied to the tree of tests
77 d.accept(&runner);
78
79 }
80 catch(...)
81 {
82 printf("Exception\n");
83 }
84
85
86 free(memoryBuf);
87 }
88 else
89 {
90 printf("NOT ENOUGH MEMORY\n");
91 }
92
93 /* code */
94 return 0;
95}