From d8e500b2d785b6c8e12ceb25efe68c32aad46a8b Mon Sep 17 00:00:00 2001 From: Determinant Date: Fri, 13 Jul 2018 14:35:03 -0400 Subject: finish Bits impl --- test/.gitignore | 1 + test/CMakeLists.txt | 3 ++ test/test_stream.cpp | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 test/test_stream.cpp (limited to 'test') diff --git a/test/.gitignore b/test/.gitignore index b308815..9b5c5f5 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -1,2 +1,3 @@ test_msg +test_stream Makefile diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 423229b..bedaaa3 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -22,3 +22,6 @@ add_executable(test_msg test_msg.cpp) target_link_libraries(test_msg salticidae) + +add_executable(test_stream test_stream.cpp) +target_link_libraries(test_stream salticidae) diff --git a/test/test_stream.cpp b/test/test_stream.cpp new file mode 100644 index 0000000..0e05146 --- /dev/null +++ b/test/test_stream.cpp @@ -0,0 +1,79 @@ +/** + * Copyright (c) 2018 Cornell University. + * + * Author: Ted Yin + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include "salticidae/stream.h" + +using salticidae::DataStream; +using salticidae::get_hash; +using salticidae::get_hex; +using salticidae::Bits; + +void print(const Bits &a, int n) { + for (int i = 0; i < n; i++) + printf("%d", a.get(i)); + puts(""); +} + +int main() { + int n = 80; + Bits a(n); + for (int i = 0; i < n; i++) + { + a.set(i); + print(a, n); + } + for (int i = n - 1; i >= 0; i--) + { + a.unset(i); + print(a, n); + } + std::vector idxs; + for (int i = 0; i < 1000; i++) + { + idxs.push_back(rand() % n); + a.flip(idxs.back()); + print(a, n); + } + for (auto idx: idxs) + { + a.flip(idx); + print(a, n); + } + for (int i = 0; i < n; i++) + if (i & 1) a.set(i); + print(a, n); + for (int i = 0; i < n; i++) + if (i & 1) a.unset(i); + else a.set(i); + print(a, n); + printf("%s size: %d\n", get_hex(a).c_str(), a.size()); + DataStream s; + s << a; + Bits b; + s >> b; + printf("%s\n", get_hex(b).c_str()); + print(b, b.size()); + return 0; +} -- cgit v1.2.3-70-g09d2