14df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni/* 24df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * Copyright 2017, The Android Open Source Project 34df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * 44df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * Licensed under the Apache License, Version 2.0 (the "License"); 54df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * you may not use this file except in compliance with the License. 64df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * You may obtain a copy of the License at 74df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * 84df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * http://www.apache.org/licenses/LICENSE-2.0 94df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * 104df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * Unless required by applicable law or agreed to in writing, software 114df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * distributed under the License is distributed on an "AS IS" BASIS, 124df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * See the License for the specific language governing permissions and 144df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * limitations under the License. 154df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni */ 164df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 174df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni#include "word_stream.h" 183f30b6202dd5ad6ff66959131d216405850ed152Yang Ni 194df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni#include "gtest/gtest.h" 204df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 213f30b6202dd5ad6ff66959131d216405850ed152Yang Ni#include <vector> 223f30b6202dd5ad6ff66959131d216405850ed152Yang Ni 234df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ninamespace android { 244df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ninamespace spirit { 254df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 264df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang NiTEST(WordStreamTest, testStringOutput1) { 274df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni std::unique_ptr<OutputWordStream> OS(OutputWordStream::Create()); 284df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni *OS << "ABCDEFG"; 294df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni auto words = OS->getWords(); 304df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni const std::vector<uint8_t> bytes((uint8_t *)words.data(), 314df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni (uint8_t *)(words.data() + words.size())); 324df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni const std::vector<uint8_t> bytesExpected = {0x41, 0x42, 0x43, 0x44, 334df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 0x45, 0x46, 0x47, 0x00}; 344df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni EXPECT_EQ(bytesExpected, bytes); 354df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} 364df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 374df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang NiTEST(WordStreamTest, testStringOutput2) { 384df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni std::unique_ptr<OutputWordStream> OS(OutputWordStream::Create()); 394df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni *OS << "GLSL.std.450"; 404df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni auto words = OS->getWords(); 414df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni const std::vector<uint8_t> bytes((uint8_t *)words.data(), 424df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni (uint8_t *)(words.data() + words.size())); 434df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni const std::vector<uint8_t> bytesExpected = { 444df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 454df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00}; 464df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni EXPECT_EQ(bytesExpected, bytes); 474df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} 484df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 494df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang NiTEST(WordStreamTest, testStringInput1) { 504df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni uint8_t bytes[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x00}; 514df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni std::vector<uint32_t> words((uint32_t *)bytes, 524df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni (uint32_t *)(bytes + sizeof(bytes))); 534df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni std::unique_ptr<InputWordStream> IS(InputWordStream::Create(words)); 543f30b6202dd5ad6ff66959131d216405850ed152Yang Ni std::string s; 554df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni *IS >> &s; 563f30b6202dd5ad6ff66959131d216405850ed152Yang Ni EXPECT_STREQ("ABCDEFG", s.c_str()); 574df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} 584df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 594df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang NiTEST(WordStreamTest, testStringInput2) { 604df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni uint8_t bytes[] = {0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 614df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00}; 624df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni std::vector<uint32_t> words((uint32_t *)bytes, 634df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni (uint32_t *)(bytes + sizeof(bytes))); 644df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni std::unique_ptr<InputWordStream> IS(InputWordStream::Create(words)); 653f30b6202dd5ad6ff66959131d216405850ed152Yang Ni std::string s; 664df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni *IS >> &s; 673f30b6202dd5ad6ff66959131d216405850ed152Yang Ni EXPECT_STREQ("GLSL.std.450", s.c_str()); 684df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} 694df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 704df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} // namespace spirit 714df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} // namespace android 72