1ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===- unittests/Support/EndianStreamTest.cpp - EndianStream.h tests ------===// 2ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// 3ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// The LLVM Compiler Infrastructure 4ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// 5ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// This file is distributed under the University of Illinois Open Source 6ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// License. See LICENSE.TXT for details. 7ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// 8ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===----------------------------------------------------------------------===// 9ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 10ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/ADT/SmallString.h" 11ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/Support/EndianStream.h" 12ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/Support/DataTypes.h" 13ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "gtest/gtest.h" 14ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesusing namespace llvm; 15ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesusing namespace support; 16ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 17ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesnamespace { 18ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 19ebe69fe11e48d322045d5949c83283927a0d790bStephen HinesTEST(EndianStream, WriteInt32LE) { 20ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SmallString<16> data; 21ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 22ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines { 23ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines raw_svector_ostream OS(data); 24ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines endian::Writer<little> LE(OS); 25ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines LE.write(static_cast<int32_t>(-1362446643)); 26ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 27ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 28ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[0]), 0xCD); 29ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[1]), 0xB6); 30ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[2]), 0xCA); 31ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[3]), 0xAE); 32ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 33ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 34ebe69fe11e48d322045d5949c83283927a0d790bStephen HinesTEST(EndianStream, WriteInt32BE) { 35ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SmallVector<char, 16> data; 36ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 37ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines { 38ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines raw_svector_ostream OS(data); 39ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines endian::Writer<big> BE(OS); 40ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines BE.write(static_cast<int32_t>(-1362446643)); 41ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 42ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 43ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[0]), 0xAE); 44ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[1]), 0xCA); 45ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[2]), 0xB6); 46ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[3]), 0xCD); 47ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 48ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 49ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 50ebe69fe11e48d322045d5949c83283927a0d790bStephen HinesTEST(EndianStream, WriteFloatLE) { 51ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SmallString<16> data; 52ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 53ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines { 54ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines raw_svector_ostream OS(data); 55ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines endian::Writer<little> LE(OS); 56ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines LE.write(12345.0f); 57ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 58ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 59ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[0]), 0x00); 60ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[1]), 0xE4); 61ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[2]), 0x40); 62ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[3]), 0x46); 63ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 64ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 65ebe69fe11e48d322045d5949c83283927a0d790bStephen HinesTEST(EndianStream, WriteFloatBE) { 66ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SmallVector<char, 16> data; 67ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 68ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines { 69ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines raw_svector_ostream OS(data); 70ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines endian::Writer<big> BE(OS); 71ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines BE.write(12345.0f); 72ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 73ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 74ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[0]), 0x46); 75ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[1]), 0x40); 76ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[2]), 0xE4); 77ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[3]), 0x00); 78ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 79ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 80ebe69fe11e48d322045d5949c83283927a0d790bStephen HinesTEST(EndianStream, WriteInt64LE) { 81ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SmallString<16> data; 82ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 83ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines { 84ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines raw_svector_ostream OS(data); 85ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines endian::Writer<little> LE(OS); 86ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines LE.write(static_cast<int64_t>(-136244664332342323)); 87ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 88ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 89ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[0]), 0xCD); 90ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[1]), 0xAB); 91ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[2]), 0xED); 92ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[3]), 0x1B); 93ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[4]), 0x33); 94ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[5]), 0xF6); 95ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[6]), 0x1B); 96ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[7]), 0xFE); 97ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 98ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 99ebe69fe11e48d322045d5949c83283927a0d790bStephen HinesTEST(EndianStream, WriteInt64BE) { 100ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SmallVector<char, 16> data; 101ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 102ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines { 103ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines raw_svector_ostream OS(data); 104ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines endian::Writer<big> BE(OS); 105ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines BE.write(static_cast<int64_t>(-136244664332342323)); 106ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 107ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 108ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[0]), 0xFE); 109ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[1]), 0x1B); 110ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[2]), 0xF6); 111ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[3]), 0x33); 112ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[4]), 0x1B); 113ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[5]), 0xED); 114ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[6]), 0xAB); 115ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[7]), 0xCD); 116ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 117ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 118ebe69fe11e48d322045d5949c83283927a0d790bStephen HinesTEST(EndianStream, WriteDoubleLE) { 119ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SmallString<16> data; 120ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 121ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines { 122ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines raw_svector_ostream OS(data); 123ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines endian::Writer<little> LE(OS); 124ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines LE.write(-2349214918.58107); 125ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 126ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 127ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[0]), 0x20); 128ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[1]), 0x98); 129ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[2]), 0xD2); 130ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[3]), 0x98); 131ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[4]), 0xC5); 132ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[5]), 0x80); 133ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[6]), 0xE1); 134ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[7]), 0xC1); 135ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 136ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 137ebe69fe11e48d322045d5949c83283927a0d790bStephen HinesTEST(EndianStream, WriteDoubleBE) { 138ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SmallVector<char, 16> data; 139ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 140ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines { 141ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines raw_svector_ostream OS(data); 142ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines endian::Writer<big> BE(OS); 143ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines BE.write(-2349214918.58107); 144ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 145ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 146ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[0]), 0xC1); 147ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[1]), 0xE1); 148ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[2]), 0x80); 149ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[3]), 0xC5); 150ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[4]), 0x98); 151ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[5]), 0xD2); 152ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[6]), 0x98); 153ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines EXPECT_EQ(static_cast<uint8_t>(data[7]), 0x20); 154ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 155ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 156de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarTEST(EndianStream, WriteArrayLE) { 157de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar SmallString<16> Data; 158de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 159de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar { 160de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar raw_svector_ostream OS(Data); 161de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar endian::Writer<little> LE(OS); 162de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar LE.write<uint16_t>({0x1234, 0x5678}); 163de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 164de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 165de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[0]), 0x34); 166de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[1]), 0x12); 167de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[2]), 0x78); 168de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[3]), 0x56); 169de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 170de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 171de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarTEST(EndianStream, WriteVectorLE) { 172de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar SmallString<16> Data; 173de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 174de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar { 175de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar raw_svector_ostream OS(Data); 176de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar endian::Writer<little> LE(OS); 177de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar std::vector<uint16_t> Vec{0x1234, 0x5678}; 178de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar LE.write<uint16_t>(Vec); 179de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 180de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 181de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[0]), 0x34); 182de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[1]), 0x12); 183de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[2]), 0x78); 184de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[3]), 0x56); 185de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 186de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 187de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarTEST(EndianStream, WriteFloatArrayLE) { 188de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar SmallString<16> Data; 189de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 190de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar { 191de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar raw_svector_ostream OS(Data); 192de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar endian::Writer<little> LE(OS); 193de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar LE.write<float>({12345.0f, 12346.0f}); 194de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 195de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 196de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[0]), 0x00); 197de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[1]), 0xE4); 198de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[2]), 0x40); 199de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[3]), 0x46); 200de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 201de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[4]), 0x00); 202de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[5]), 0xE8); 203de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[6]), 0x40); 204de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar EXPECT_EQ(static_cast<uint8_t>(Data[7]), 0x46); 205de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 206de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 207ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 208ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} // end anon namespace 209