summary refs log tree commit diff stats
path: root/tests/fragmentation/tfragment_alloc.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/fragmentation/tfragment_alloc.nim')
-rw-r--r--tests/fragmentation/tfragment_alloc.nim35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/fragmentation/tfragment_alloc.nim b/tests/fragmentation/tfragment_alloc.nim
new file mode 100644
index 000000000..cd45e2c47
--- /dev/null
+++ b/tests/fragmentation/tfragment_alloc.nim
@@ -0,0 +1,35 @@
+
+discard """
+  output: '''occupied ok: true
+total ok: true'''
+  disabled: "true"
+"""
+
+import strutils, data
+
+proc main =
+  var m = 0
+  for i in 0..1000_000:
+    let size = sizes[i mod sizes.len]
+    let p = alloc(size)
+    if p == nil:
+      quit "could not serve request!"
+    dealloc p
+ #   c_fprintf(stdout, "iteration: %ld size: %ld\n", i, size)
+  when defined(cpu64):
+    # see https://github.com/nim-lang/Nim/issues/8509
+    # this often made appveyor (on windows) fail with out of memory
+    when defined(posix):
+      # bug #7120
+      var x = alloc(((1 shl 29) - 4) * 8)
+      dealloc x
+
+main()
+
+let occ = getOccupiedMem()
+let total = getTotalMem()
+
+# Current values on Win64: 824KiB / 106.191MiB
+
+echo "occupied ok: ", occ < 2 * 1024 * 1024
+echo "total ok: ", total < 120 * 1024 * 1024