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