aboutsummaryrefslogtreecommitdiffstats
path: root/manual/CHAPTER_StateOfTheArt/cmp_tbdata.c
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2014-01-28 06:55:47 +0100
committerClifford Wolf <clifford@clifford.at>2014-01-28 06:55:47 +0100
commit2cb47355d4b3e8021a88f68f7a5f33ce46ff51b0 (patch)
tree83a3e52f3a46f2db264106798e416da63e7ae743 /manual/CHAPTER_StateOfTheArt/cmp_tbdata.c
parent842ca2f011a6030faccc690986accb0ca8035ec8 (diff)
downloadyosys-2cb47355d4b3e8021a88f68f7a5f33ce46ff51b0.tar.gz
yosys-2cb47355d4b3e8021a88f68f7a5f33ce46ff51b0.tar.bz2
yosys-2cb47355d4b3e8021a88f68f7a5f33ce46ff51b0.zip
Renamed manual/FILES_* directories
Diffstat (limited to 'manual/CHAPTER_StateOfTheArt/cmp_tbdata.c')
-rw-r--r--manual/CHAPTER_StateOfTheArt/cmp_tbdata.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/manual/CHAPTER_StateOfTheArt/cmp_tbdata.c b/manual/CHAPTER_StateOfTheArt/cmp_tbdata.c
new file mode 100644
index 000000000..b188144dd
--- /dev/null
+++ b/manual/CHAPTER_StateOfTheArt/cmp_tbdata.c
@@ -0,0 +1,67 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <string.h>
+
+int line = 0;
+char buffer1[1024];
+char buffer2[1024];
+
+void check(bool ok)
+{
+ if (ok)
+ return;
+ // fprintf(stderr, "Error in testbench output compare (line=%d):\n-%s\n+%s\n", line, buffer1, buffer2);
+ exit(1);
+}
+
+int main(int argc, char **argv)
+{
+ FILE *f1, *f2;
+ bool eof1, eof2;
+ int i;
+
+ check(argc == 3);
+
+ f1 = fopen(argv[1], "r");
+ f2 = fopen(argv[2], "r");
+
+ check(f1 && f2);
+
+ while (!feof(f1) && !feof(f2))
+ {
+ line++;
+ buffer1[0] = 0;
+ buffer2[0] = 0;
+
+ eof1 = fgets(buffer1, 1024, f1) == NULL;
+ eof2 = fgets(buffer2, 1024, f2) == NULL;
+
+ if (*buffer1 && buffer1[strlen(buffer1)-1] == '\n')
+ buffer1[strlen(buffer1)-1] = 0;
+
+ if (*buffer2 && buffer2[strlen(buffer2)-1] == '\n')
+ buffer2[strlen(buffer2)-1] = 0;
+
+ check(eof1 == eof2);
+
+ for (i = 0; buffer1[i] || buffer2[i]; i++)
+ {
+ check(buffer1[i] != 0 && buffer2[i] != 0);
+
+ // first argument is the reference. An 'z' or 'x'
+ // here means we don't care about the result.
+ if (buffer1[i] == 'z' || buffer1[i] == 'x')
+ continue;
+
+ check(buffer1[i] == buffer2[i]);
+ }
+ }
+
+ check(feof(f1) && feof(f2));
+
+ fclose(f1);
+ fclose(f2);
+ return 0;
+}
+