summaryrefslogtreecommitdiff
path: root/testsuite/tests
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests')
-rw-r--r--testsuite/tests/rts/all.T33
-rw-r--r--testsuite/tests/rts/ipe/all.T33
-rw-r--r--testsuite/tests/rts/ipe/ipeEventLog.c24
-rw-r--r--testsuite/tests/rts/ipe/ipeEventLog.stderr (renamed from testsuite/tests/rts/ipeEventLog.stderr)0
-rw-r--r--testsuite/tests/rts/ipe/ipeEventLog_fromMap.c29
-rw-r--r--testsuite/tests/rts/ipe/ipeEventLog_fromMap.stderr20
-rw-r--r--testsuite/tests/rts/ipe/ipeMap.c159
-rw-r--r--testsuite/tests/rts/ipe/ipe_lib.c78
-rw-r--r--testsuite/tests/rts/ipe/ipe_lib.h17
-rw-r--r--testsuite/tests/rts/ipeEventLog.c60
-rw-r--r--testsuite/tests/rts/ipeEventLog_fromMap.c35
-rw-r--r--testsuite/tests/rts/ipeEventLog_fromMap.stderr2
-rw-r--r--testsuite/tests/rts/ipeEventLog_lib.c42
-rw-r--r--testsuite/tests/rts/ipeMap.c209
14 files changed, 360 insertions, 381 deletions
diff --git a/testsuite/tests/rts/all.T b/testsuite/tests/rts/all.T
index 955289b91f..c361e87b2f 100644
--- a/testsuite/tests/rts/all.T
+++ b/testsuite/tests/rts/all.T
@@ -196,37 +196,6 @@ test('EventlogOutput_IPE',
def noCapabilityOutputFilter(s):
return re.sub(r'[a-f0-9]+: IPE:', 'IPE:', s)
-# Manually create IPE entries and dump them to event log (stderr).
-test('ipeEventLog',
- [ c_src,
- extra_files(['ipeEventLog_lib.c']),
- extra_run_opts('+RTS -va -RTS'),
- grep_errmsg('IPE:'),
- only_ways(debug_ways),
- normalise_errmsg_fun(noCapabilityOutputFilter),
- ignore_stdout,
- # Due to issues on Darwin CI runners that couldn't be tracked down.
- # In general this test should work on Darwin - Just not on our CI.
- when(opsys('darwin'), fragile(0))
- ],
- compile_and_run, ['ipeEventLog_lib.c'])
-
-# Manually create IPE entries, force the initialization of the underlying hash map
-# and dump them to event log (stderr).
-test('ipeEventLog_fromMap',
- [ c_src,
- extra_files(['ipeEventLog_lib.c']),
- extra_run_opts('+RTS -va -RTS'),
- grep_errmsg('IPE:'),
- only_ways(debug_ways),
- normalise_errmsg_fun(noCapabilityOutputFilter),
- ignore_stdout,
- # Due to issues on Darwin CI runners that couldn't be tracked down.
- # In general this test should work on Darwin - Just not on our CI.
- when(opsys('darwin'), fragile(0))
- ],
- compile_and_run, ['ipeEventLog_lib.c'])
-
test('T4059', [], makefile_test, ['T4059'])
# Test for #4274
@@ -509,8 +478,6 @@ test('T19381',
test('T20199', [ grep_errmsg('Hello') ]
, makefile_test, [])
-test('ipeMap', [c_src], compile_and_run, [''])
-
test('cloneMyStack', [extra_files(['cloneStackLib.c'])], compile_and_run, ['cloneStackLib.c'])
test('cloneMyStack2', ignore_stdout, compile_and_run, [''])
test('cloneMyStack_retBigStackFrame', [extra_files(['cloneStackLib.c']), ignore_stdout], compile_and_run, ['cloneStackLib.c'])
diff --git a/testsuite/tests/rts/ipe/all.T b/testsuite/tests/rts/ipe/all.T
new file mode 100644
index 0000000000..15af42f588
--- /dev/null
+++ b/testsuite/tests/rts/ipe/all.T
@@ -0,0 +1,33 @@
+test('ipeMap', [extra_files(['ipe_lib.c', 'ipe_lib.h']), c_src], compile_and_run, ['ipe_lib.c'])
+
+# Manually create IPE entries and dump them to event log (stderr).
+test('ipeEventLog',
+ [ c_src,
+ extra_files(['ipe_lib.c', 'ipe_lib.h']),
+ extra_run_opts('+RTS -va -RTS'),
+ grep_errmsg('table_name_'),
+ only_ways(debug_ways),
+ normalise_errmsg_fun(noCapabilityOutputFilter),
+ ignore_stdout,
+ # Due to issues on Darwin CI runners that couldn't be tracked down.
+ # In general this test should work on Darwin - Just not on our CI.
+ when(opsys('darwin'), fragile(0))
+ ],
+ compile_and_run, ['ipe_lib.c'])
+
+# Manually create IPE entries, force the initialization of the underlying hash map
+# and dump them to event log (stderr).
+test('ipeEventLog_fromMap',
+ [ c_src,
+ extra_files(['ipe_lib.c', 'ipe_lib.h']),
+ extra_run_opts('+RTS -va -RTS'),
+ grep_errmsg('table_name_'),
+ only_ways(debug_ways),
+ normalise_errmsg_fun(noCapabilityOutputFilter),
+ ignore_stdout,
+ # Due to issues on Darwin CI runners that couldn't be tracked down.
+ # In general this test should work on Darwin - Just not on our CI.
+ when(opsys('darwin'), fragile(0))
+ ],
+ compile_and_run, ['ipe_lib.c'])
+
diff --git a/testsuite/tests/rts/ipe/ipeEventLog.c b/testsuite/tests/rts/ipe/ipeEventLog.c
new file mode 100644
index 0000000000..b59642fc5b
--- /dev/null
+++ b/testsuite/tests/rts/ipe/ipeEventLog.c
@@ -0,0 +1,24 @@
+#include "Rts.h"
+#include "RtsAPI.h"
+#include "rts/IPE.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "ipe_lib.h"
+
+int main(int argc, char *argv[]) {
+ hs_init(&argc, &argv);
+ Capability *cap = rts_lock();
+
+ IpeBufferListNode *list1 = makeAnyProvEntries(cap, 0, 10);
+ IpeBufferListNode *list2 = makeAnyProvEntries(cap, 0, 10);
+
+ registerInfoProvList(list1);
+ registerInfoProvList(list2);
+
+ // Trace all IPE events. Expected count (see Makefile): 381 + 2 = 383
+ dumpIPEToEventLog();
+
+ rts_unlock(cap);
+ hs_exit();
+}
diff --git a/testsuite/tests/rts/ipeEventLog.stderr b/testsuite/tests/rts/ipe/ipeEventLog.stderr
index 95e012c710..95e012c710 100644
--- a/testsuite/tests/rts/ipeEventLog.stderr
+++ b/testsuite/tests/rts/ipe/ipeEventLog.stderr
diff --git a/testsuite/tests/rts/ipe/ipeEventLog_fromMap.c b/testsuite/tests/rts/ipe/ipeEventLog_fromMap.c
new file mode 100644
index 0000000000..631ba8298f
--- /dev/null
+++ b/testsuite/tests/rts/ipe/ipeEventLog_fromMap.c
@@ -0,0 +1,29 @@
+#include "Rts.h"
+#include "RtsAPI.h"
+#include "rts/IPE.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "ipe_lib.h"
+
+int main(int argc, char *argv[]) {
+ hs_init(&argc, &argv);
+ Capability *cap = rts_lock();
+
+ HaskellObj one = rts_mkInt(cap, 1);
+
+ IpeBufferListNode *list1 = makeAnyProvEntries(cap, 0, 10);
+ IpeBufferListNode *list2 = makeAnyProvEntries(cap, 0, 10);
+
+ registerInfoProvList(list1);
+ registerInfoProvList(list2);
+
+ // Query an IPE to initialize the underlying hash map.
+ lookupIPE(list1->entries[0].info);
+
+ // Trace all IPE events.
+ dumpIPEToEventLog();
+
+ rts_unlock(cap);
+ hs_exit();
+}
diff --git a/testsuite/tests/rts/ipe/ipeEventLog_fromMap.stderr b/testsuite/tests/rts/ipe/ipeEventLog_fromMap.stderr
new file mode 100644
index 0000000000..606de64766
--- /dev/null
+++ b/testsuite/tests/rts/ipe/ipeEventLog_fromMap.stderr
@@ -0,0 +1,20 @@
+7f8f9c139740: IPE: table_name table_name_000, closure_desc closure_desc_000, ty_desc ty_desc_000, label label_000, module module_000, srcloc srcloc_000
+7f8f9c139740: IPE: table_name table_name_001, closure_desc closure_desc_001, ty_desc ty_desc_001, label label_001, module module_001, srcloc srcloc_001
+7f8f9c139740: IPE: table_name table_name_002, closure_desc closure_desc_002, ty_desc ty_desc_002, label label_002, module module_002, srcloc srcloc_002
+7f8f9c139740: IPE: table_name table_name_003, closure_desc closure_desc_003, ty_desc ty_desc_003, label label_003, module module_003, srcloc srcloc_003
+7f8f9c139740: IPE: table_name table_name_004, closure_desc closure_desc_004, ty_desc ty_desc_004, label label_004, module module_004, srcloc srcloc_004
+7f8f9c139740: IPE: table_name table_name_005, closure_desc closure_desc_005, ty_desc ty_desc_005, label label_005, module module_005, srcloc srcloc_005
+7f8f9c139740: IPE: table_name table_name_006, closure_desc closure_desc_006, ty_desc ty_desc_006, label label_006, module module_006, srcloc srcloc_006
+7f8f9c139740: IPE: table_name table_name_007, closure_desc closure_desc_007, ty_desc ty_desc_007, label label_007, module module_007, srcloc srcloc_007
+7f8f9c139740: IPE: table_name table_name_008, closure_desc closure_desc_008, ty_desc ty_desc_008, label label_008, module module_008, srcloc srcloc_008
+7f8f9c139740: IPE: table_name table_name_009, closure_desc closure_desc_009, ty_desc ty_desc_009, label label_009, module module_009, srcloc srcloc_009
+7f8f9c139740: IPE: table_name table_name_000, closure_desc closure_desc_000, ty_desc ty_desc_000, label label_000, module module_000, srcloc srcloc_000
+7f8f9c139740: IPE: table_name table_name_001, closure_desc closure_desc_001, ty_desc ty_desc_001, label label_001, module module_001, srcloc srcloc_001
+7f8f9c139740: IPE: table_name table_name_002, closure_desc closure_desc_002, ty_desc ty_desc_002, label label_002, module module_002, srcloc srcloc_002
+7f8f9c139740: IPE: table_name table_name_003, closure_desc closure_desc_003, ty_desc ty_desc_003, label label_003, module module_003, srcloc srcloc_003
+7f8f9c139740: IPE: table_name table_name_004, closure_desc closure_desc_004, ty_desc ty_desc_004, label label_004, module module_004, srcloc srcloc_004
+7f8f9c139740: IPE: table_name table_name_005, closure_desc closure_desc_005, ty_desc ty_desc_005, label label_005, module module_005, srcloc srcloc_005
+7f8f9c139740: IPE: table_name table_name_006, closure_desc closure_desc_006, ty_desc ty_desc_006, label label_006, module module_006, srcloc srcloc_006
+7f8f9c139740: IPE: table_name table_name_007, closure_desc closure_desc_007, ty_desc ty_desc_007, label label_007, module module_007, srcloc srcloc_007
+7f8f9c139740: IPE: table_name table_name_008, closure_desc closure_desc_008, ty_desc ty_desc_008, label label_008, module module_008, srcloc srcloc_008
+7f8f9c139740: IPE: table_name table_name_009, closure_desc closure_desc_009, ty_desc ty_desc_009, label label_009, module module_009, srcloc srcloc_009
diff --git a/testsuite/tests/rts/ipe/ipeMap.c b/testsuite/tests/rts/ipe/ipeMap.c
new file mode 100644
index 0000000000..f69ac75508
--- /dev/null
+++ b/testsuite/tests/rts/ipe/ipeMap.c
@@ -0,0 +1,159 @@
+#include <stdlib.h>
+#include <string.h>
+
+#include "Rts.h"
+#include "ipe_lib.h"
+
+void assertStringsEqual(const char *s1, const char *s2);
+void shouldFindNothingInAnEmptyIPEMap(Capability *cap);
+HaskellObj shouldFindOneIfItHasBeenRegistered(Capability *cap);
+void shouldFindTwoIfTwoHaveBeenRegistered(Capability *cap, HaskellObj fortyTwo);
+void shouldFindTwoFromTheSameList(Capability *cap);
+void shouldDealWithAnEmptyList(Capability *cap, HaskellObj);
+
+// This is a unit test for IPE.c, the IPE map.
+// Due to the nature of IPE having static state, the test cases are not
+// independent of each other!
+int main(int argc, char *argv[]) {
+ hs_init(&argc, &argv);
+ Capability *cap = rts_lock();
+
+ shouldFindNothingInAnEmptyIPEMap(cap);
+ HaskellObj fortyTwo = shouldFindOneIfItHasBeenRegistered(cap);
+ shouldFindTwoIfTwoHaveBeenRegistered(cap, fortyTwo);
+ shouldFindTwoFromTheSameList(cap);
+ shouldDealWithAnEmptyList(cap, fortyTwo);
+
+ rts_unlock(cap);
+ hs_exit();
+}
+
+void shouldFindNothingInAnEmptyIPEMap(Capability *cap) {
+ HaskellObj fortyTwo = UNTAG_CLOSURE(rts_mkInt(cap, 42));
+
+ InfoProvEnt *result = lookupIPE(get_itbl(fortyTwo));
+
+ if (result != NULL) {
+ errorBelch("Found entry in an empty IPE map!");
+ exit(1);
+ }
+}
+
+HaskellObj shouldFindOneIfItHasBeenRegistered(Capability *cap) {
+ IpeBufferListNode *node = malloc(sizeof(IpeBufferListNode) + sizeof(IpeBufferEntry));
+ StringTable st;
+ init_string_table(&st);
+
+ HaskellObj fortyTwo = UNTAG_CLOSURE(rts_mkInt(cap, 42));
+ node->entries[0] = makeAnyProvEntry(cap, &st, fortyTwo, 42);
+ node->count = 1;
+ node->next = NULL;
+ node->string_table = st.buffer;
+
+ registerInfoProvList(node);
+
+ InfoProvEnt *result = lookupIPE(get_itbl(fortyTwo));
+
+ if (result == NULL) {
+ errorBelch("shouldFindOneIfItHasBeenRegistered: Found no entry in IPE map!");
+ exit(1);
+ }
+
+ assertStringsEqual(result->prov.table_name, "table_name_042");
+ assertStringsEqual(result->prov.closure_desc, "closure_desc_042");
+ assertStringsEqual(result->prov.ty_desc, "ty_desc_042");
+ assertStringsEqual(result->prov.label, "label_042");
+ assertStringsEqual(result->prov.module, "module_042");
+ assertStringsEqual(result->prov.srcloc, "srcloc_042");
+
+ return fortyTwo;
+}
+
+void shouldFindTwoIfTwoHaveBeenRegistered(Capability *cap,
+ HaskellObj fortyTwo) {
+ IpeBufferListNode *node = malloc(sizeof(IpeBufferListNode) + sizeof(IpeBufferEntry));
+ StringTable st;
+ init_string_table(&st);
+
+ HaskellObj twentyThree = UNTAG_CLOSURE(rts_mkInt8(cap, 23));
+ node->entries[0] = makeAnyProvEntry(cap, &st, twentyThree, 23);
+ node->count = 1;
+ node->next = NULL;
+ node->string_table = st.buffer;
+
+ registerInfoProvList(node);
+
+ InfoProvEnt *resultFortyTwo =
+ lookupIPE(get_itbl(fortyTwo));
+ InfoProvEnt *resultTwentyThree =
+ lookupIPE(get_itbl(twentyThree));
+
+ if (resultFortyTwo == NULL) {
+ errorBelch("shouldFindTwoIfTwoHaveBeenRegistered(42): Found no entry in IPE map!");
+ exit(1);
+ }
+ if (resultTwentyThree == NULL) {
+ errorBelch("shouldFindTwoIfTwoHaveBeenRegistered(23): Found no entry in IPE map!");
+ exit(1);
+ }
+
+ assertStringsEqual(resultFortyTwo->prov.table_name, "table_name_042");
+ assertStringsEqual(resultTwentyThree->prov.table_name, "table_name_023");
+}
+
+void shouldFindTwoFromTheSameList(Capability *cap) {
+ IpeBufferListNode *node = malloc(sizeof(IpeBufferListNode) + 2 * sizeof(IpeBufferEntry));
+ StringTable st;
+ init_string_table(&st);
+
+ HaskellObj one = UNTAG_CLOSURE(rts_mkInt16(cap, 1));
+ HaskellObj two = UNTAG_CLOSURE(rts_mkInt32(cap, 2));
+ node->entries[0] = makeAnyProvEntry(cap, &st, one, 1);
+ node->entries[1] = makeAnyProvEntry(cap, &st, two, 2);
+ node->count = 2;
+ node->next = NULL;
+ node->string_table = st.buffer;
+
+ registerInfoProvList(node);
+
+ InfoProvEnt *resultOne = lookupIPE(get_itbl(one));
+ InfoProvEnt *resultTwo = lookupIPE(get_itbl(two));
+
+ if (resultOne == NULL) {
+ errorBelch("shouldFindTwoFromTheSameList(1): Found no entry in IPE map!");
+ exit(1);
+ }
+ if (resultTwo == NULL) {
+ errorBelch("shouldFindTwoFromTheSameList(2): Found no entry in IPE map!");
+ exit(1);
+ }
+
+ assertStringsEqual(resultOne->prov.table_name, "table_name_001");
+ assertStringsEqual(resultTwo->prov.table_name, "table_name_002");
+}
+
+void shouldDealWithAnEmptyList(Capability *cap, HaskellObj fortyTwo) {
+ IpeBufferListNode *node = malloc(sizeof(IpeBufferListNode));
+ node->count = 0;
+ node->next = NULL;
+ node->string_table = "";
+
+ registerInfoProvList(node);
+
+ InfoProvEnt *resultFortyTwo =
+ lookupIPE(get_itbl(fortyTwo));
+
+ if (resultFortyTwo == NULL) {
+ errorBelch("shouldDealWithAnEmptyList: Found no entry in IPE map!");
+ exit(1);
+ }
+
+ assertStringsEqual(resultFortyTwo->prov.table_name, "table_name_042");
+}
+
+void assertStringsEqual(const char *s1, const char *s2) {
+ if (strcmp(s1, s2) != 0) {
+ errorBelch("%s != %s", s1, s2);
+ exit(1);
+ }
+}
diff --git a/testsuite/tests/rts/ipe/ipe_lib.c b/testsuite/tests/rts/ipe/ipe_lib.c
new file mode 100644
index 0000000000..37bb20c738
--- /dev/null
+++ b/testsuite/tests/rts/ipe/ipe_lib.c
@@ -0,0 +1,78 @@
+#include "Rts.h"
+#include "rts/IPE.h"
+#include <string.h>
+#include "ipe_lib.h"
+
+void init_string_table(StringTable *st) {
+ st->size = 128;
+ st->n = 0;
+ st->buffer = malloc(st->size);
+}
+
+uint32_t add_string(StringTable *st, const char *s) {
+ const size_t len = strlen(s);
+ const uint32_t n = st->n;
+ if (st->n + len + 1 > st->size) {
+ const size_t new_size = 2*st->size + len;
+ st->buffer = realloc(st->buffer, new_size);
+ st->size = new_size;
+ }
+
+ memcpy(&st->buffer[st->n], s, len);
+ st->n += len;
+ st->buffer[st->n] = '\0';
+ st->n += 1;
+ return n;
+}
+
+IpeBufferEntry makeAnyProvEntry(Capability *cap, StringTable *st, HaskellObj closure, int i) {
+ IpeBufferEntry provEnt;
+ provEnt.info = get_itbl(closure);
+
+ unsigned int tableNameLength = strlen("table_name_") + 3 /* digits */ + 1 /* null character */;
+ char *tableName = malloc(sizeof(char) * tableNameLength);
+ snprintf(tableName, tableNameLength, "table_name_%03i", i);
+ provEnt.table_name = add_string(st, tableName);
+
+ unsigned int closureDescLength = strlen("closure_desc_") + 3 /* digits */ + 1 /* null character */;
+ char *closureDesc = malloc(sizeof(char) * closureDescLength);
+ snprintf(closureDesc, closureDescLength, "closure_desc_%03i", i);
+ provEnt.closure_desc = add_string(st, closureDesc);
+
+ unsigned int tyDescLength = strlen("ty_desc_") + 3 /* digits */ + 1 /* null character */;
+ char *tyDesc = malloc(sizeof(char) * tyDescLength);
+ snprintf(tyDesc, tyDescLength, "ty_desc_%03i", i);
+ provEnt.ty_desc = add_string(st, tyDesc);
+
+ unsigned int labelLength = strlen("label_") + 3 /* digits */ + 1 /* null character */;
+ char *label = malloc(sizeof(char) * labelLength);
+ snprintf(label, labelLength, "label_%03i", i);
+ provEnt.label = add_string(st, label);
+
+ unsigned int moduleLength = strlen("module_") + 3 /* digits */ + 1 /* null character */;
+ char *module = malloc(sizeof(char) * moduleLength);
+ snprintf(module, moduleLength, "module_%03i", i);
+ provEnt.module_name = add_string(st, module);
+
+ unsigned int srcLocLength = strlen("srcloc_") + 3 /* digits */ + 1 /* null character */;
+ char *srcLoc = malloc(sizeof(char) * srcLocLength);
+ snprintf(srcLoc, srcLocLength, "srcloc_%03i", i);
+ provEnt.srcloc = add_string(st, srcLoc);
+
+ return provEnt;
+}
+
+IpeBufferListNode *makeAnyProvEntries(Capability *cap, int start, int end) {
+ const int n = end - start;
+ IpeBufferListNode *node = malloc(sizeof(IpeBufferListNode) + n * sizeof(IpeBufferEntry));
+ StringTable st;
+ init_string_table(&st);
+ for (int i=start; i < end; i++) {
+ HaskellObj closure = rts_mkInt(cap, 42);
+ node->entries[i] = makeAnyProvEntry(cap, &st, closure, i);
+ }
+ node->next = NULL;
+ node->count = n;
+ node->string_table = st.buffer;
+ return node;
+}
diff --git a/testsuite/tests/rts/ipe/ipe_lib.h b/testsuite/tests/rts/ipe/ipe_lib.h
new file mode 100644
index 0000000000..8aaa1c361e
--- /dev/null
+++ b/testsuite/tests/rts/ipe/ipe_lib.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include "Rts.h"
+
+typedef struct {
+ char *buffer;
+ size_t n;
+ size_t size;
+} StringTable;
+
+void init_string_table(StringTable *st);
+uint32_t add_string(StringTable *st, const char *s);
+
+IpeBufferListNode *makeAnyProvEntries(Capability *cap, int start, int end);
+IpeBufferEntry makeAnyProvEntry(Capability *cap, StringTable *st, HaskellObj closure, int i);
+void dumpIPEToEventLog(void);
+
diff --git a/testsuite/tests/rts/ipeEventLog.c b/testsuite/tests/rts/ipeEventLog.c
deleted file mode 100644
index 9260269f5a..0000000000
--- a/testsuite/tests/rts/ipeEventLog.c
+++ /dev/null
@@ -1,60 +0,0 @@
-#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();
-}
diff --git a/testsuite/tests/rts/ipeEventLog_fromMap.c b/testsuite/tests/rts/ipeEventLog_fromMap.c
deleted file mode 100644
index 5bd9e4d034..0000000000
--- a/testsuite/tests/rts/ipeEventLog_fromMap.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#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();
-
- HaskellObj one = rts_mkInt(cap, 1);
-
- InfoProvEnt *provEnt_0 = makeAnyProvEntry(cap, 0);
- InfoProvEnt *provEnt_1 = makeAnyProvEntry(cap, 1);
-
- InfoProvEnt **ipeList_1 = malloc(sizeof(InfoProvEnt *) * 3);
- ipeList_1[0] = provEnt_0;
- ipeList_1[1] = provEnt_1;
- ipeList_1[2] = NULL;
-
- registerInfoProvList(ipeList_1);
-
- // Query an IPE to initialize the underlying hash map.
- lookupIPE(ipeList_1[0]->info);
-
- // Trace all IPE events.
- dumpIPEToEventLog();
-
- rts_unlock(cap);
- hs_exit();
-}
diff --git a/testsuite/tests/rts/ipeEventLog_fromMap.stderr b/testsuite/tests/rts/ipeEventLog_fromMap.stderr
deleted file mode 100644
index 7ad1fb998a..0000000000
--- a/testsuite/tests/rts/ipeEventLog_fromMap.stderr
+++ /dev/null
@@ -1,2 +0,0 @@
-IPE: table_name table_name_001, closure_desc closure_desc_001, ty_desc ty_desc_001, label label_001, module module_001, srcloc srcloc_001
-IPE: table_name table_name_000, closure_desc closure_desc_000, ty_desc ty_desc_000, label label_000, module module_000, srcloc srcloc_000
diff --git a/testsuite/tests/rts/ipeEventLog_lib.c b/testsuite/tests/rts/ipeEventLog_lib.c
deleted file mode 100644
index df54231fa7..0000000000
--- a/testsuite/tests/rts/ipeEventLog_lib.c
+++ /dev/null
@@ -1,42 +0,0 @@
-#include "Rts.h"
-#include "rts/IPE.h"
-#include <string.h>
-
-InfoProvEnt *makeAnyProvEntry(Capability *cap, int i) {
- HaskellObj fourtyTwo = rts_mkInt(cap, 42);
-
- InfoProvEnt *provEnt = malloc(sizeof(InfoProvEnt));
- provEnt->info = (StgInfoTable *)fourtyTwo->header.info;
-
- unsigned int tableNameLength = strlen("table_name_") + 3 /* digits */ + 1 /* null character */;
- char *tableName = malloc(sizeof(char) * tableNameLength);
- snprintf(tableName, tableNameLength, "table_name_%03i", i);
- provEnt->prov.table_name = tableName;
-
- unsigned int closureDescLength = strlen("closure_desc_") + 3 /* digits */ + 1 /* null character */;
- char *closureDesc = malloc(sizeof(char) * closureDescLength);
- snprintf(closureDesc, closureDescLength, "closure_desc_%03i", i);
- provEnt->prov.closure_desc = closureDesc;
-
- unsigned int tyDescLength = strlen("ty_desc_") + 3 /* digits */ + 1 /* null character */;
- char *tyDesc = malloc(sizeof(char) * tyDescLength);
- snprintf(tyDesc, tyDescLength, "ty_desc_%03i", i);
- provEnt->prov.ty_desc = tyDesc;
-
- unsigned int labelLength = strlen("label_") + 3 /* digits */ + 1 /* null character */;
- char *label = malloc(sizeof(char) * labelLength);
- snprintf(label, labelLength, "label_%03i", i);
- provEnt->prov.label = label;
-
- unsigned int moduleLength = strlen("module_") + 3 /* digits */ + 1 /* null character */;
- char *module = malloc(sizeof(char) * labelLength);
- snprintf(module, moduleLength, "module_%03i", i);
- provEnt->prov.module = module;
-
- unsigned int srcLocLength = strlen("srcloc_") + 3 /* digits */ + 1 /* null character */;
- char *srcLoc = malloc(sizeof(char) * srcLocLength);
- snprintf(srcLoc, srcLocLength, "srcloc_%03i", i);
- provEnt->prov.srcloc = srcLoc;
-
- return provEnt;
-}
diff --git a/testsuite/tests/rts/ipeMap.c b/testsuite/tests/rts/ipeMap.c
deleted file mode 100644
index 41e7e9fb89..0000000000
--- a/testsuite/tests/rts/ipeMap.c
+++ /dev/null
@@ -1,209 +0,0 @@
-#include <stdlib.h>
-#include <string.h>
-
-#include "Rts.h"
-
-void assertStringsEqual(char *s1, char *s2);
-void shouldFindNothingInAnEmptyIPEMap(Capability *cap);
-HaskellObj shouldFindOneIfItHasBeenRegistered(Capability *cap);
-void shouldFindTwoIfTwoHaveBeenRegistered(Capability *cap, HaskellObj fortyTwo);
-void shouldFindTwoFromTheSameList(Capability *cap);
-void shouldFindTheLastEntryOfManyLists(Capability *cap);
-void shouldDealWithAnEmptyList(Capability *cap, HaskellObj);
-
-// This is a unit test for IPE.c, the IPE map.
-// Due to the nature of IPE having static state, the test cases are not
-// independent of each other!
-int main(int argc, char *argv[]) {
- hs_init(&argc, &argv);
- Capability *cap = rts_lock();
-
- shouldFindNothingInAnEmptyIPEMap(cap);
- HaskellObj fortyTwo = shouldFindOneIfItHasBeenRegistered(cap);
- shouldFindTwoIfTwoHaveBeenRegistered(cap, fortyTwo);
- shouldFindTwoFromTheSameList(cap);
- shouldFindTheLastEntryOfManyLists(cap);
- shouldDealWithAnEmptyList(cap, fortyTwo);
-
- rts_unlock(cap);
- hs_exit();
-}
-
-void shouldFindNothingInAnEmptyIPEMap(Capability *cap) {
- HaskellObj fortyTwo = UNTAG_CLOSURE(rts_mkInt(cap, 42));
-
- InfoProvEnt *result = lookupIPE(get_itbl(fortyTwo));
-
- if (result != NULL) {
- errorBelch("Found entry in an empty IPE map!");
- exit(1);
- }
-}
-
-HaskellObj shouldFindOneIfItHasBeenRegistered(Capability *cap) {
- HaskellObj fortyTwo = UNTAG_CLOSURE(rts_mkInt(cap, 42));
-
- InfoProvEnt *provEnt = malloc(sizeof(InfoProvEnt));
- provEnt->info = get_itbl(fortyTwo);
- provEnt->prov.table_name = "table_name_42";
- provEnt->prov.closure_desc = "closure_desc_42";
- provEnt->prov.ty_desc = "ty_desc_42";
- provEnt->prov.label = "label_42";
- provEnt->prov.module = "module_42";
- provEnt->prov.srcloc = "srcloc_42";
-
- InfoProvEnt *ipeList[] = {provEnt, NULL};
-
- registerInfoProvList(ipeList);
- InfoProvEnt *result = lookupIPE(get_itbl(fortyTwo));
-
- if (result == NULL) {
- errorBelch("Found no entry in IPE map!");
- exit(1);
- }
-
- assertStringsEqual(result->prov.table_name, "table_name_42");
- assertStringsEqual(result->prov.closure_desc, "closure_desc_42");
- assertStringsEqual(result->prov.ty_desc, "ty_desc_42");
- assertStringsEqual(result->prov.label, "label_42");
- assertStringsEqual(result->prov.module, "module_42");
- assertStringsEqual(result->prov.srcloc, "srcloc_42");
-
- return fortyTwo;
-}
-
-void shouldFindTwoIfTwoHaveBeenRegistered(Capability *cap,
- HaskellObj fortyTwo) {
- HaskellObj twentyThree = UNTAG_CLOSURE(rts_mkInt8(cap, 23));
-
- InfoProvEnt *provEnt = malloc(sizeof(InfoProvEnt));
- provEnt->info = get_itbl(twentyThree);
- provEnt->prov.table_name = "table_name_23";
- provEnt->prov.closure_desc = "closure_desc_23";
- provEnt->prov.ty_desc = "ty_desc_23";
- provEnt->prov.label = "label_23";
- provEnt->prov.module = "module_23";
- provEnt->prov.srcloc = "srcloc_23";
-
- InfoProvEnt *ipeList[] = {provEnt, NULL};
-
- registerInfoProvList(ipeList);
-
- InfoProvEnt *resultFortyTwo =
- lookupIPE(get_itbl(fortyTwo));
- InfoProvEnt *resultTwentyThree =
- lookupIPE(get_itbl(twentyThree));
-
- if (resultFortyTwo == NULL || resultTwentyThree == NULL) {
- errorBelch("Found no entry in IPE map!");
- exit(1);
- }
-
- assertStringsEqual(resultFortyTwo->prov.table_name, "table_name_42");
- assertStringsEqual(resultTwentyThree->prov.table_name, "table_name_23");
-}
-
-void shouldFindTwoFromTheSameList(Capability *cap) {
- HaskellObj one = UNTAG_CLOSURE(rts_mkInt16(cap, 1));
-
- InfoProvEnt *provEntOne = malloc(sizeof(InfoProvEnt));
- provEntOne->info = get_itbl(one);
- provEntOne->prov.table_name = "table_name_1";
- provEntOne->prov.closure_desc = "closure_desc_1";
- provEntOne->prov.ty_desc = "ty_desc_1";
- provEntOne->prov.label = "label_1";
- provEntOne->prov.module = "module_1";
- provEntOne->prov.srcloc = "srcloc_1";
-
- HaskellObj two = UNTAG_CLOSURE(rts_mkInt32(cap, 2));
-
- InfoProvEnt *provEntTwo = malloc(sizeof(InfoProvEnt));
- provEntTwo->info = get_itbl(two);
- provEntTwo->prov.table_name = "table_name_2";
- provEntTwo->prov.closure_desc = "closure_desc_2";
- provEntTwo->prov.ty_desc = "ty_desc_2";
- provEntTwo->prov.label = "label_2";
- provEntTwo->prov.module = "module_2";
- provEntTwo->prov.srcloc = "srcloc_2";
-
- InfoProvEnt *ipeList[] = {provEntOne, provEntTwo, NULL};
-
- registerInfoProvList(ipeList);
-
- InfoProvEnt *resultOne = lookupIPE(get_itbl(one));
- InfoProvEnt *resultTwo = lookupIPE(get_itbl(two));
-
- if (resultOne == NULL || resultOne == NULL) {
- errorBelch("Found no entry in IPE map!");
- exit(1);
- }
-
- assertStringsEqual(resultOne->prov.table_name, "table_name_1");
- assertStringsEqual(resultTwo->prov.table_name, "table_name_2");
-}
-
-void shouldFindTheLastEntryOfManyLists(Capability *cap) {
- HaskellObj three = UNTAG_CLOSURE(rts_mkInt64(cap, 3));
-
- InfoProvEnt *provEntThree = malloc(sizeof(InfoProvEnt));
- provEntThree->info = get_itbl(three);
- provEntThree->prov.table_name = "table_name_3";
- provEntThree->prov.closure_desc = "closure_desc_3";
- provEntThree->prov.ty_desc = "ty_desc_3";
- provEntThree->prov.label = "label_3";
- provEntThree->prov.module = "module_3";
- provEntThree->prov.srcloc = "srcloc_3";
-
- HaskellObj four = UNTAG_CLOSURE(rts_mkWord8(cap, 4));
-
- InfoProvEnt *provEntFour = malloc(sizeof(InfoProvEnt));
- provEntFour->info = get_itbl(four);
- provEntFour->prov.table_name = "table_name_4";
- provEntFour->prov.closure_desc = "closure_desc_4";
- provEntFour->prov.ty_desc = "ty_desc_4";
- provEntFour->prov.label = "label_4";
- provEntFour->prov.module = "module_4";
- provEntFour->prov.srcloc = "srcloc_4";
-
- InfoProvEnt *ipeListThree[] = {provEntThree, NULL};
- InfoProvEnt *ipeListFour[] = {provEntFour, NULL};
-
- // Force the creation of 4 IpeBufferListNodes
- for (int i = 0; i <= 126 * 3 + 1; i++) {
- registerInfoProvList(ipeListThree);
- }
-
- registerInfoProvList(ipeListFour);
-
- InfoProvEnt *resultFour = lookupIPE(get_itbl(four));
-
- if (resultFour == NULL) {
- errorBelch("Found no entry in IPE map!");
- exit(1);
- }
-
- assertStringsEqual(resultFour->prov.table_name, "table_name_4");
-}
-
-void shouldDealWithAnEmptyList(Capability *cap, HaskellObj fortyTwo) {
- InfoProvEnt *emptyIpeList[] = {NULL};
-
- registerInfoProvList(emptyIpeList);
-
- InfoProvEnt *resultFortyTwo =
- lookupIPE(get_itbl(fortyTwo));
-
- if (resultFortyTwo == NULL) {
- errorBelch("Found no entry in IPE map!");
- exit(1);
- }
-
- assertStringsEqual(resultFortyTwo->prov.table_name, "table_name_42");
-}
-
-void assertStringsEqual(char *s1, char *s2) {
- if (strcmp(s1, s2) != 0) {
- errorBelch("%s != %s", s1, s2);
- exit(1);
- }
-}