Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(749)

Unified Diff: forth/ForthTests.cpp

Issue 1559823002: remove forth experiment (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « forth/ForthParser.h ('k') | forth/StdWords.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: forth/ForthTests.cpp
diff --git a/forth/ForthTests.cpp b/forth/ForthTests.cpp
deleted file mode 100644
index 8dc06c05be27f1696a502f493d17bf07c9b6cb15..0000000000000000000000000000000000000000
--- a/forth/ForthTests.cpp
+++ /dev/null
@@ -1,407 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "Forth.h"
-#include "SkString.h"
-
-class Reporter {
-public:
- int fFailureCount;
-
- Reporter() : fFailureCount(0) {}
- void reportFailure(const char expression[], const char file[], int line);
- void reportFailure(const char msg[]);
-};
-
-typedef void (*ForthWordTestProc)(ForthWord*, ForthEngine*, Reporter*);
-
-#define FORTH_ASSERT(reporter, expression) \
- do { \
- if (!(expression)) { \
- reporter->reportFailure(#expression, __FILE__, __LINE__); \
- } \
- } while (0)
-
-static void drop_test0(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(-17);
- word->exec(fe);
- FORTH_ASSERT(reporter, 0 == fe->depth());
-}
-
-static void drop_test1(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(-17);
- fe->push(93);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, -17 == fe->peek(0));
-}
-
-static void dup_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(-17);
- word->exec(fe);
- FORTH_ASSERT(reporter, 2 == fe->depth());
- FORTH_ASSERT(reporter, -17 == fe->peek(0));
- FORTH_ASSERT(reporter, -17 == fe->peek(1));
-}
-
-static void swap_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(-17);
- fe->push(42);
- word->exec(fe);
- FORTH_ASSERT(reporter, 2 == fe->depth());
- FORTH_ASSERT(reporter, -17 == fe->peek(0));
- FORTH_ASSERT(reporter, 42 == fe->peek(1));
-}
-
-static void over_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(1);
- fe->push(2);
- word->exec(fe);
- FORTH_ASSERT(reporter, 3 == fe->depth());
- FORTH_ASSERT(reporter, 1 == fe->peek(0));
- FORTH_ASSERT(reporter, 2 == fe->peek(1));
- FORTH_ASSERT(reporter, 1 == fe->peek(2));
-}
-
-static void rot_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(1);
- fe->push(2);
- fe->push(3);
- word->exec(fe);
- FORTH_ASSERT(reporter, 3 == fe->depth());
- FORTH_ASSERT(reporter, 2 == fe->peek(2));
- FORTH_ASSERT(reporter, 3 == fe->peek(1));
- FORTH_ASSERT(reporter, 1 == fe->peek(0));
-}
-
-static void rrot_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(1);
- fe->push(2);
- fe->push(3);
- word->exec(fe);
- FORTH_ASSERT(reporter, 3 == fe->depth());
- FORTH_ASSERT(reporter, 2 == fe->peek(0));
- FORTH_ASSERT(reporter, 1 == fe->peek(1));
- FORTH_ASSERT(reporter, 3 == fe->peek(2));
-}
-
-static void swap2_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(1);
- fe->push(2);
- fe->push(3);
- fe->push(4);
- word->exec(fe);
- FORTH_ASSERT(reporter, 4 == fe->depth());
- FORTH_ASSERT(reporter, 2 == fe->peek(0));
- FORTH_ASSERT(reporter, 1 == fe->peek(1));
- FORTH_ASSERT(reporter, 4 == fe->peek(2));
- FORTH_ASSERT(reporter, 3 == fe->peek(3));
-}
-
-static void dup2_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(1);
- fe->push(2);
- word->exec(fe);
- FORTH_ASSERT(reporter, 4 == fe->depth());
- FORTH_ASSERT(reporter, 1 == fe->peek(3));
- FORTH_ASSERT(reporter, 2 == fe->peek(2));
- FORTH_ASSERT(reporter, 1 == fe->peek(1));
- FORTH_ASSERT(reporter, 2 == fe->peek(0));
-}
-
-static void over2_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(1);
- fe->push(2);
- fe->push(3);
- fe->push(4);
- word->exec(fe);
- FORTH_ASSERT(reporter, 6 == fe->depth());
- FORTH_ASSERT(reporter, 1 == fe->peek(5));
- FORTH_ASSERT(reporter, 2 == fe->peek(4));
- FORTH_ASSERT(reporter, 3 == fe->peek(3));
- FORTH_ASSERT(reporter, 4 == fe->peek(2));
- FORTH_ASSERT(reporter, 1 == fe->peek(1));
- FORTH_ASSERT(reporter, 2 == fe->peek(0));
-}
-
-static void drop2_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(1);
- fe->push(2);
- fe->push(3);
- fe->push(4);
- word->exec(fe);
- FORTH_ASSERT(reporter, 2 == fe->depth());
- FORTH_ASSERT(reporter, 1 == fe->peek(1));
- FORTH_ASSERT(reporter, 2 == fe->peek(0));
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
-static void iadd_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(35);
- fe->push(99);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 134 == fe->top());
- fe->push(-135);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, -1 == fe->top());
-}
-
-static void isub_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(35);
- fe->push(99);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 35-99 == fe->top());
-}
-
-static void imul_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(15);
- fe->push(-20);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, -300 == fe->top());
- fe->push(0);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 0 == fe->top());
-}
-
-static void idiv_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(100);
- fe->push(25);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 4 == fe->top());
- fe->setTop(10);
- fe->push(-3);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, -3 == fe->top());
- fe->setTop(-1);
- fe->push(-1);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 1 == fe->top());
-}
-
-static void imod_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(10);
- fe->push(3);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 1 == fe->top());
- fe->push(5);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 1 == fe->top());
-}
-
-static void idivmod_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(10);
- fe->push(3);
- word->exec(fe);
- FORTH_ASSERT(reporter, 2 == fe->depth());
- FORTH_ASSERT(reporter, 1 == fe->peek(1));
- FORTH_ASSERT(reporter, 3 == fe->peek(0));
-}
-
-static void idot_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(1);
- fe->push(2);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 1 == fe->top());
-}
-
-static void iabs_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(10);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 10 == fe->top());
- fe->setTop(-10);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 10 == fe->top());
-}
-
-static void inegate_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(10);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, -10 == fe->top());
- fe->setTop(-10);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 10 == fe->top());
-}
-
-static void imin_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(10);
- fe->push(3);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 3 == fe->top());
- fe->push(-10);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, -10 == fe->top());
-}
-
-static void imax_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(10);
- fe->push(3);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 10 == fe->top());
- fe->push(-10);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 10 == fe->top());
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-static void logical_and_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- const static int data[] = {
- 0, 0, 0,
- 2, 0, 0,
- 0, -1, 0,
- 1, 5, -1
- };
- for (size_t i = 0; i < SK_ARRAY_COUNT(data)/3; i++) {
- fe->push(data[i*3 + 0]);
- fe->push(data[i*3 + 1]);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, data[i*3 + 2] == fe->top());
- fe->pop();
- }
-}
-
-static void logical_or_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- const static int data[] = {
- 0, 0, 0,
- 2, 0, -1,
- 0, -1, -1,
- 1, 5, -1
- };
- for (size_t i = 0; i < SK_ARRAY_COUNT(data)/3; i++) {
- fe->push(data[i*3 + 0]);
- fe->push(data[i*3 + 1]);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, data[i*3 + 2] == fe->top());
- fe->pop();
- }
-}
-
-static void logical_not_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- const static int data[] = {
- 0, -1,
- 5, 0,
- -1, 0
- };
- for (size_t i = 0; i < SK_ARRAY_COUNT(data)/2; i++) {
- fe->push(data[i*2 + 0]);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, data[i*2 + 1] == fe->top());
- fe->pop();
- }
-}
-
-static void if_dup_test(ForthWord* word, ForthEngine* fe, Reporter* reporter) {
- fe->push(10);
- word->exec(fe);
- FORTH_ASSERT(reporter, 2 == fe->depth());
- FORTH_ASSERT(reporter, 10 == fe->peek(1));
- FORTH_ASSERT(reporter, 10 == fe->peek(0));
- fe->pop();
- fe->pop();
- fe->push(0);
- word->exec(fe);
- FORTH_ASSERT(reporter, 1 == fe->depth());
- FORTH_ASSERT(reporter, 0 == fe->top());
-}
-
-static const struct {
- const char* fName;
- ForthWordTestProc fProc;
-} gRecs[] = {
- { "DROP", drop_test0 }, { "DROP", drop_test1 },
- { "DUP", dup_test },
- { "SWAP", swap_test },
- { "OVER", over_test },
- { "ROT", rot_test },
- { "-ROT", rrot_test },
- { "2SWAP", swap2_test },
- { "2DUP", dup2_test },
- { "2OVER", over2_test },
- { "2DROP", drop2_test },
-
- { "+", iadd_test },
- { "-", isub_test },
- { "*", imul_test },
- { "/", idiv_test },
- { "MOD", imod_test },
- { "/MOD", idivmod_test },
-
-// { ".", idot_test },
- { "ABS", iabs_test },
- { "NEGATE", inegate_test },
- { "MIN", imin_test },
- { "MAX", imax_test },
-
- { "AND", logical_and_test },
- { "OR", logical_or_test },
- { "0=", logical_not_test },
- { "?DUP", if_dup_test },
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-void Reporter::reportFailure(const char expression[], const char file[],
- int line) {
- SkDebugf("failed %s:%d: %s\n", file, line, expression);
- fFailureCount += 1;
-}
-
-void Reporter::reportFailure(const char msg[]) {
- SkDebugf("%s\n");
- fFailureCount += 1;
-}
-
-void Forth_test_stdwords(bool verbose);
-void Forth_test_stdwords(bool verbose) {
- ForthEnv env;
- Reporter reporter;
-
- for (size_t i = 0; i < SK_ARRAY_COUNT(gRecs); i++) {
- ForthEngine engine(NULL);
-
- ForthWord* word = env.findWord(gRecs[i].fName);
- if (NULL == word) {
- SkString str;
- str.printf("--- can't find stdword %d", gRecs[i].fName);
- reporter.reportFailure(str.c_str());
- } else {
- if (verbose) {
- SkDebugf("--- testing %s %p\n", gRecs[i].fName, word);
- }
- gRecs[i].fProc(word, &engine, &reporter);
- }
- }
-
- if (0 == reporter.fFailureCount) {
- SkDebugf("--- success!\n");
- } else {
- SkDebugf("--- %d failures\n", reporter.fFailureCount);
- }
-}
« no previous file with comments | « forth/ForthParser.h ('k') | forth/StdWords.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698