diff options
| -rw-r--r-- | tests/test-Handles.cc | 81 | ||||
| -rw-r--r-- | tests/test-Tasks.cc | 8 | 
2 files changed, 77 insertions, 12 deletions
diff --git a/tests/test-Handles.cc b/tests/test-Handles.cc index 5f09fca..c8a650f 100644 --- a/tests/test-Handles.cc +++ b/tests/test-Handles.cc @@ -4,6 +4,8 @@  #include <Buffer.h>  #include <BStream.h>  #include <ZHandle.h> +#include <TaskMan.h> +#include <StacklessTask.h>  #ifdef _WIN32  void ctime_r(const time_t * t, char * str) { @@ -74,11 +76,41 @@ class DiscreteCos {  DiscreteCos dc; +class DataGenerator { +  public: +      DataGenerator() { generate(); } +    static const size_t size = 128 * 1024; +    const uint8_t * getData() { return (uint8_t *) m_data; } + +  private: +    static const int nEntries = size / 4; +    void generate() { +        for (int i = 0; i < nEntries; i++) { +            int64_t c = dc.cos(i); +            // This version is actually too hardcore, and generates +            // uncompressible data. Fun! +//          c *= ((int64_t(i) * 100) << 24) / nEntries; +            // this one is technically wrong, but at least it produces +            // compressible data, so who cares about maths. +            c *= i % (10 * 1024); +            c >>= 24; +            m_data[i] = c; +        } +    } + +    int32_t m_data[nEntries]; +}; + +DataGenerator dg; +  using namespace Balau; -void MainTask::Do() { -    Printer::log(M_STATUS, "Test::Handles running."); +class SimpleTaskTest : public Task { +    virtual void Do(); +    const char * getName() const { return "SimpleTaskTest"; } +}; +void SimpleTaskTest::Do() {      bool failed = false;      try {          IO<Input> i(new Input("SomeInexistantFile.txt")); @@ -109,12 +141,12 @@ void MainTask::Do() {      TAssert(s == i->getSize());      i->rseek(0, SEEK_SET); -    char * buf1 = (char *) malloc(i->getSize()); +    char * buf1 = (char *) Balau::malloc(i->getSize());      ssize_t r = i->read(buf1, s + 15);      Printer::log(M_STATUS, "Read %zi bytes (instead of %" PRIi64 ")", r, s + 15);      TAssert(i->isEOF()) -    char * buf2 = (char *) malloc(i->getSize()); +    char * buf2 = (char *) Balau::malloc(i->getSize());      i->rseek(0, SEEK_SET);      TAssert(!i->isEOF());      TAssert(i->rtell() == 0); @@ -222,6 +254,47 @@ void MainTask::Do() {          String f = s->readString();          TAssert(f == "foobar");      } +} + +class StacklessTaskTest : public StacklessTask { +    virtual void Do(); +    const char * getName() const { return "StacklessTaskTest"; } +    IO<Handle> h; +    IO<ZStream> z; +}; + +void StacklessTaskTest::Do() { +    StacklessBegin(); +    h = new Output("tests/data.raw"); +    StacklessOperation(h.asA<Output>()->open()); +    StacklessOperation(h->write(dg.getData(), dg.size)); +    StacklessOperation(h->close()); +    h = new Output("tests/data.gz"); +    StacklessOperation(h.asA<Output>()->open()); +    z = new ZStream(h, Z_BEST_COMPRESSION, ZStream::GZIP); +    StacklessOperation(z->write(dg.getData(), dg.size)); +    StacklessOperation(z->close()); +    StacklessEnd(); +} + +void MainTask::Do() { +    Printer::log(M_STATUS, "Test::Handles running."); + +    Events::TaskEvent taskEvt; + +    TaskMan::registerTask(new SimpleTaskTest(), &taskEvt); +    waitFor(&taskEvt); +    TAssert(!taskEvt.gotSignal()); +    yield(); +    TAssert(taskEvt.gotSignal()); +    taskEvt.ack(); + +    TaskMan::registerTask(new StacklessTaskTest(), &taskEvt); +    waitFor(&taskEvt); +    TAssert(!taskEvt.gotSignal()); +    yield(); +    TAssert(taskEvt.gotSignal()); +    taskEvt.ack();      Printer::log(M_STATUS, "Test::Handles passed.");  } diff --git a/tests/test-Tasks.cc b/tests/test-Tasks.cc index 33bdd72..9184f97 100644 --- a/tests/test-Tasks.cc +++ b/tests/test-Tasks.cc @@ -2,7 +2,6 @@  #include <Task.h>  #include <TaskMan.h>  #include <StacklessTask.h> -#include <Input.h>  using namespace Balau; @@ -51,16 +50,9 @@ class TestStackless : public StacklessTask {          StacklessOperation(m_operation->Do());          TAssert(m_operation->completed());          delete m_operation; -        m_handle = new Input("tests/rtest.txt"); -        StacklessOperation(m_handle->open()); -        StacklessOperation(r = m_handle->read(buf, 25)); -        TAssert(r == 10); -        StacklessOperation(m_handle->close());          StacklessEnd();      }      TestOperation * m_operation; -    IO<Input> m_handle; -    char buf[25];  };  static void yieldingFunction() {  | 
