summaryrefslogtreecommitdiff
path: root/testsuite/tests/rts/ipeEventLog.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/rts/ipeEventLog.c')
-rw-r--r--testsuite/tests/rts/ipeEventLog.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/testsuite/tests/rts/ipeEventLog.c b/testsuite/tests/rts/ipeEventLog.c
new file mode 100644
index 0000000000..9260269f5a
--- /dev/null
+++ b/testsuite/tests/rts/ipeEventLog.c
@@ -0,0 +1,60 @@
+#include "Rts.h"
+#include "RtsAPI.h"
+#include "rts/IPE.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+extern void dumpIPEToEventLog(void);
+InfoProvEnt *makeAnyProvEntry(Capability *cap, int i);
+
+int main(int argc, char *argv[]) {
+ hs_init(&argc, &argv);
+ Capability *cap = rts_lock();
+
+ // Force the creation of 4 IpeBufferListNodes (381 IPEs)
+ for (int i = 0; i < 381; i++) {
+
+ InfoProvEnt **ipeList_1 = malloc(sizeof(InfoProvEnt *) * 2);
+ ipeList_1[0] = makeAnyProvEntry(cap, i);
+ ipeList_1[1] = NULL;
+
+ registerInfoProvList(ipeList_1);
+ }
+
+ // Register an IPE list with two elements
+ HaskellObj one = rts_mkInt(cap, 1);
+
+ InfoProvEnt *provEntA = malloc(sizeof(InfoProvEnt));
+ provEntA->info = (StgInfoTable *)one->header.info;
+ provEntA->prov.table_name = "table_name_a";
+ provEntA->prov.closure_desc = "closure_desc_a";
+ provEntA->prov.ty_desc = "ty_desc_a";
+ provEntA->prov.label = "label_a";
+ provEntA->prov.module = "module_a";
+ provEntA->prov.srcloc = "srcloc_a";
+
+ HaskellObj two = rts_mkInt(cap, 2);
+
+ InfoProvEnt *provEntB = malloc(sizeof(InfoProvEnt));
+ provEntB->info = (StgInfoTable *)two->header.info;
+ provEntB->prov.table_name = "table_name_b";
+ provEntB->prov.closure_desc = "closure_desc_b";
+ provEntB->prov.ty_desc = "ty_desc_b";
+ provEntB->prov.label = "label_b";
+ provEntB->prov.module = "module_b";
+ provEntB->prov.srcloc = "srcloc_b";
+
+ InfoProvEnt **ipeList_2 = malloc(sizeof(InfoProvEnt *) * 3);
+ ipeList_2[0] = provEntA;
+ ipeList_2[1] = provEntB;
+ ipeList_2[2] = NULL;
+
+ registerInfoProvList(ipeList_2);
+
+ // Trace all IPE events. Expected count (see Makefile): 381 + 2 = 383
+ dumpIPEToEventLog();
+
+ rts_unlock(cap);
+ hs_exit();
+}