ref: 89a06a82109d27cccbf135a4931265d8d80d46fc
parent: d5ed56a1568715bceaad3edf3dd0e20722560967
author: qwx <qwx@sciops.net>
date: Wed Mar 30 01:43:38 EDT 2022
add pairing heap test script from execution logs in path
--- /dev/null
+++ b/test/pheap.awk
@@ -1,0 +1,60 @@
+#!/bin/awk -f
+# "(open|pop|decreasekey|remain|occ)" memaddr "["x y"]" "g" g
+BEGIN{
+ print \
+"#include <u.h>\n" \
+"#include <libc.h>\n" \
+"#include \"asif.h\"\n" \
+"debuglevel = Logtrace;\n\n" \
+"void main(void) {\n" \
+"Pairheap *queue, *a;\n" \
+"int i;\n" \
+"queue = nil;\n"
+}
+$1 == "open" {
+ v = $3 " " $4
+ if(!(v in g))
+ g[v] = $6
+ if(!(v in n))
+ n[v] = ni++
+ print \
+"Pairheap *a" n[v] " = pushqueue(" $6 ", estrdup(\"" v "\"), &queue);"
+}
+$1 == "pop" {
+ v = $3 " " $4
+ if(g[v] != $6)
+ print "warning: cost g mismatch: " g[v] " vs " $0 >"/fd/2"
+ if(n[v] == "")
+ print "warning: empty name: " $0 >"/fd/2"
+ print \
+"a = popqueue(&queue);\n" \
+ "\ti = strcmp((char*)a->aux, \"" v "\");\n" \
+ "\tassert(i == 0);\n" \
+ "\tassert(a->n == " $6 ");"
+}
+$1 == "decreasekey" {
+ v = $3 " " $4
+ d = g[v] - $6
+ if(g[v] == 0)
+ print "warning: undefined node \"" v "\" is decreased!" >"/fd/2"
+ g[v] = $6
+ print \
+"decreasekey(a" n[v] ", " d ", &queue);"
+}
+$1 == "remain" {
+ v = $3 " " $4
+ print \
+"a = popqueue(&queue);\n" \
+ "\ti = strcmp((char*)a->aux, \"" v "\");\n" \
+ "\tassert(i == 0);"
+}
+$1 == "occ" {
+ print \
+"// " $0
+}
+END {
+ print \
+"a = popqueue(&queue);\n" \
+"assert(a == nil);\n" \
+"}"
+}