blob: 964d05514f18b95292f5e8ad51d3d3bb91fdeb99 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* License); you may not use this file except in compliance
* with the License. You may obtain a copy of the License a
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#include "common/row_record.h"
#include <gtest/gtest.h>
#include <vector>
#include "common/tsblock/tuple_desc.h"
namespace storage {
TEST(FieldTest, DefaultConstructor) {
Field field;
EXPECT_EQ(field.type_, common::INVALID_DATATYPE);
}
TEST(FieldTest, TypeConstructor) {
Field field(common::BOOLEAN);
EXPECT_EQ(field.type_, common::BOOLEAN);
}
TEST(FieldTest, IsType) {
Field field(common::BOOLEAN);
EXPECT_TRUE(field.is_type(common::BOOLEAN));
EXPECT_FALSE(field.is_type(common::INT32));
}
TEST(FieldTest, IsLiteral) {
Field field1(common::BOOLEAN);
EXPECT_TRUE(field1.is_literal());
Field field2(common::INT64);
EXPECT_TRUE(field2.is_literal());
Field field3(common::INVALID_DATATYPE);
EXPECT_FALSE(field3.is_literal());
}
TEST(FieldTest, SetValue) {
Field field;
common::PageArena pa; // dosen't matter
int32_t i32_val = 123;
field.set_value(common::INT32, &i32_val, common::get_len(common::INT32),
pa);
EXPECT_EQ(field.type_, common::INT32);
EXPECT_EQ(field.value_.ival_, 123);
double d_val = 3.14;
field.set_value(common::DOUBLE, &d_val, common::get_len(common::DOUBLE),
pa);
EXPECT_EQ(field.type_, common::DOUBLE);
EXPECT_DOUBLE_EQ(field.value_.dval_, 3.14);
}
TEST(FieldTest, MakeField) {
Field* field = make(common::BOOLEAN);
EXPECT_EQ(field->type_, common::BOOLEAN);
delete field;
}
TEST(FieldTest, MakeLiteralInt64) {
Field* field = make_literal(int64_t(12345));
EXPECT_EQ(field->type_, common::INT64);
EXPECT_EQ(field->value_.lval_, 12345);
delete field;
}
TEST(FieldTest, MakeLiteralDouble) {
Field* field = make_literal(3.14);
EXPECT_EQ(field->type_, common::DOUBLE);
EXPECT_DOUBLE_EQ(field->value_.dval_, 3.14);
delete field;
}
TEST(FieldTest, MakeLiteralBool) {
Field* field = make_literal(true);
EXPECT_EQ(field->type_, common::BOOLEAN);
EXPECT_TRUE(field->value_.bval_);
delete field;
}
TEST(FieldTest, MakeNullLiteral) {
Field* field = make_null_literal();
EXPECT_EQ(field->type_, common::NULL_TYPE);
delete field;
}
TEST(RowRecordTest, ConstructorWithColNum) {
RowRecord row_record(5);
EXPECT_EQ(row_record.get_fields()->size(), 5);
for (Field* field : *row_record.get_fields()) {
EXPECT_EQ(field->type_, common::NULL_TYPE);
}
}
TEST(RowRecordTest, ConstructorWithTimestamp) {
RowRecord row_record(1625140800, 5);
EXPECT_EQ(row_record.get_timestamp(), 1625140800);
EXPECT_EQ(row_record.get_fields()->size(), 5);
for (Field* field : *row_record.get_fields()) {
EXPECT_EQ(field->type_, common::NULL_TYPE);
}
}
TEST(RowRecordTest, AddField) {
RowRecord row_record(5);
Field* field = make_literal(int64_t(12345));
row_record.add_field(field);
EXPECT_EQ(row_record.get_fields()->size(), 6);
EXPECT_EQ(row_record.get_field(5)->value_.lval_, 12345);
}
TEST(RowRecordTest, AddFieldLargeQuantities) {
RowRecord row_record(5);
for (int i = 0; i < 10000; i++) {
Field* field = make_literal(int64_t(12345));
row_record.add_field(field);
}
EXPECT_EQ(row_record.get_fields()->size(), 10000 + 5);
}
TEST(RowRecordTest, SetAndGetTimestamp) {
RowRecord row_record(5);
row_record.set_timestamp(1625140800);
EXPECT_EQ(row_record.get_timestamp(), 1625140800);
}
} // namespace storage