| Index: sdch/open_vcdiff/depot/opensource/open-vcdiff/src/codetable_test.cc
|
| ===================================================================
|
| --- sdch/open_vcdiff/depot/opensource/open-vcdiff/src/codetable_test.cc (revision 2678)
|
| +++ sdch/open_vcdiff/depot/opensource/open-vcdiff/src/codetable_test.cc (working copy)
|
| @@ -1,254 +0,0 @@
|
| -// Copyright 2008 Google Inc.
|
| -// Author: Lincoln Smith
|
| -//
|
| -// Licensed 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 at
|
| -//
|
| -// 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.
|
| -//
|
| -// Unit tests for struct VCDiffCodeTableData, found in codetable.h.
|
| -
|
| -#include <config.h>
|
| -#include "codetable.h"
|
| -#include "addrcache.h"
|
| -#include "testing.h"
|
| -
|
| -namespace open_vcdiff {
|
| -namespace {
|
| -
|
| -class CodeTableTest : public testing::Test {
|
| - protected:
|
| - CodeTableTest()
|
| - : code_table_data_(VCDiffCodeTableData::kDefaultCodeTableData) { }
|
| -
|
| - virtual ~CodeTableTest() { }
|
| -
|
| - virtual void SetUp() {
|
| - // Default code table must pass
|
| - EXPECT_TRUE(ValidateCodeTable());
|
| - }
|
| -
|
| - static void AddExerciseOpcode(unsigned char inst1,
|
| - unsigned char mode1,
|
| - unsigned char size1,
|
| - unsigned char inst2,
|
| - unsigned char mode2,
|
| - unsigned char size2,
|
| - int opcode) {
|
| - g_exercise_code_table_->inst1[opcode] = inst1;
|
| - g_exercise_code_table_->mode1[opcode] = mode1;
|
| - g_exercise_code_table_->size1[opcode] = (inst1 == VCD_NOOP) ? 0 : size1;
|
| - g_exercise_code_table_->inst2[opcode] = inst2;
|
| - g_exercise_code_table_->mode2[opcode] = mode2;
|
| - g_exercise_code_table_->size2[opcode] = (inst2 == VCD_NOOP) ? 0 : size2;
|
| - }
|
| -
|
| - static void SetUpTestCase() {
|
| - g_exercise_code_table_ = new VCDiffCodeTableData;
|
| - int opcode = 0;
|
| - for (unsigned char inst_mode1 = 0;
|
| - inst_mode1 <= VCD_LAST_INSTRUCTION_TYPE + kLastExerciseMode;
|
| - ++inst_mode1) {
|
| - unsigned char inst1 = inst_mode1;
|
| - unsigned char mode1 = 0;
|
| - if (inst_mode1 > VCD_COPY) {
|
| - inst1 = VCD_COPY;
|
| - mode1 = inst_mode1 - VCD_COPY;
|
| - }
|
| - for (unsigned char inst_mode2 = 0;
|
| - inst_mode2 <= VCD_LAST_INSTRUCTION_TYPE + kLastExerciseMode;
|
| - ++inst_mode2) {
|
| - unsigned char inst2 = inst_mode2;
|
| - unsigned char mode2 = 0;
|
| - if (inst_mode2 > VCD_COPY) {
|
| - inst2 = VCD_COPY;
|
| - mode2 = inst_mode2 - VCD_COPY;
|
| - }
|
| - AddExerciseOpcode(inst1, mode1, 0, inst2, mode2, 0, opcode++);
|
| - AddExerciseOpcode(inst1, mode1, 0, inst2, mode2, 255, opcode++);
|
| - AddExerciseOpcode(inst1, mode1, 255, inst2, mode2, 0, opcode++);
|
| - AddExerciseOpcode(inst1, mode1, 255, inst2, mode2, 255, opcode++);
|
| - }
|
| - }
|
| - // This is a CHECK rather than an EXPECT because it validates only
|
| - // the logic of the test, not of the code being tested.
|
| - CHECK_EQ(VCDiffCodeTableData::kCodeTableSize, opcode);
|
| -
|
| - EXPECT_TRUE(VCDiffCodeTableData::kDefaultCodeTableData.Validate());
|
| - EXPECT_TRUE(g_exercise_code_table_->Validate(kLastExerciseMode));
|
| - }
|
| -
|
| - static void TearDownTestCase() {
|
| - delete g_exercise_code_table_;
|
| - }
|
| -
|
| - void VerifyInstruction(unsigned char opcode,
|
| - unsigned char inst,
|
| - unsigned char size,
|
| - unsigned char mode) {
|
| - EXPECT_EQ(inst, code_table_data_.inst1[opcode]);
|
| - EXPECT_EQ(size, code_table_data_.size1[opcode]);
|
| - EXPECT_EQ(mode, code_table_data_.mode1[opcode]);
|
| - EXPECT_EQ(VCD_NOOP, code_table_data_.inst2[opcode]);
|
| - EXPECT_EQ(0, code_table_data_.size2[opcode]);
|
| - EXPECT_EQ(0, code_table_data_.mode2[opcode]);
|
| - }
|
| -
|
| - bool ValidateCodeTable() {
|
| - return code_table_data_.Validate();
|
| - }
|
| -
|
| - // This value is designed so that the total number of inst values and modes
|
| - // will equal 8 (VCD_NOOP, VCD_ADD, VCD_RUN, VCD_COPY modes 0 - 4).
|
| - // Eight combinations of inst and mode, times two possible size values,
|
| - // squared (because there are two instructions per opcode), makes
|
| - // exactly 256 possible instruction combinations, which fits kCodeTableSize
|
| - // (the number of opcodes in the table.)
|
| - static const int kLastExerciseMode = 4;
|
| -
|
| - // A code table that exercises as many combinations as possible:
|
| - // 2 instructions, each is a NOOP, ADD, RUN, or one of 5 copy modes
|
| - // (== 8 total combinations of inst and mode), and each has
|
| - // size == 0 or 255 (2 possibilities.)
|
| - static VCDiffCodeTableData* g_exercise_code_table_;
|
| -
|
| - // The code table used by the current test.
|
| - VCDiffCodeTableData code_table_data_;
|
| -};
|
| -
|
| -VCDiffCodeTableData* CodeTableTest::g_exercise_code_table_ = NULL;
|
| -
|
| -// These tests make sure that ValidateCodeTable() catches particular
|
| -// error conditions in a custom code table.
|
| -
|
| -// All possible combinations of inst and mode should have an opcode with size 0.
|
| -TEST_F(CodeTableTest, MissingCopyMode) {
|
| - VerifyInstruction(/* opcode */ 131, VCD_COPY, /* size */ 0, /* mode */ 7);
|
| - code_table_data_.size1[131] = 0xFF;
|
| - // Now there is no opcode expressing COPY with mode 7 and size 0.
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, MissingAdd) {
|
| - VerifyInstruction(/* opcode */ 1, VCD_ADD, /* size */ 0, /* mode */ 0);
|
| - code_table_data_.size1[1] = 0xFF; // Add size 0 => size 255
|
| - // Now there is no opcode expressing ADD with size 0.
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, MissingRun) {
|
| - VerifyInstruction(/* opcode */ 0, VCD_RUN, /* size */ 0, /* mode */ 0);
|
| - code_table_data_.size1[0] = 0xFF; // Run size 0 => size 255
|
| - // Now there is no opcode expressing RUN with size 0.
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, BadOpcode) {
|
| - VerifyInstruction(/* opcode */ 0, VCD_RUN, /* size */ 0, /* mode */ 0);
|
| - code_table_data_.inst1[0] = VCD_LAST_INSTRUCTION_TYPE + 1;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| - code_table_data_.inst1[0] = 0xFF;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, BadMode) {
|
| - VerifyInstruction(/* opcode */ 131, VCD_COPY, /* size */ 0, /* mode */ 7);
|
| - code_table_data_.mode1[131] = VCDiffAddressCache::DefaultLastMode() + 1;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| - code_table_data_.mode1[131] = 0xFF;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, AddWithNonzeroMode) {
|
| - VerifyInstruction(/* opcode */ 1, VCD_ADD, /* size */ 0, /* mode */ 0);
|
| - code_table_data_.mode1[1] = 1;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, RunWithNonzeroMode) {
|
| - VerifyInstruction(/* opcode */ 0, VCD_RUN, /* size */ 0, /* mode */ 0);
|
| - code_table_data_.mode1[0] = 1;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, NoOpWithNonzeroMode) {
|
| - VerifyInstruction(/* opcode */ 20, VCD_COPY, /* size */ 4, /* mode */ 0);
|
| - code_table_data_.inst1[20] = VCD_NOOP;
|
| - code_table_data_.mode1[20] = 0;
|
| - code_table_data_.size1[20] = 0;
|
| - EXPECT_TRUE(ValidateCodeTable());
|
| - code_table_data_.mode1[20] = 1;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, NoOpWithNonzeroSize) {
|
| - VerifyInstruction(/* opcode */ 20, VCD_COPY, /* size */ 4, /* mode */ 0);
|
| - code_table_data_.inst1[20] = VCD_NOOP;
|
| - code_table_data_.mode1[20] = 0;
|
| - code_table_data_.size1[20] = 0;
|
| - EXPECT_TRUE(ValidateCodeTable());
|
| - code_table_data_.size1[20] = 1;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, BadSecondOpcode) {
|
| - VerifyInstruction(/* opcode */ 20, VCD_COPY, /* size */ 4, /* mode */ 0);
|
| - code_table_data_.inst2[20] = VCD_LAST_INSTRUCTION_TYPE + 1;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| - code_table_data_.inst2[20] = 0xFF;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, BadSecondMode) {
|
| - VerifyInstruction(/* opcode */ 20, VCD_COPY, /* size */ 4, /* mode */ 0);
|
| - code_table_data_.inst2[20] = VCD_COPY;
|
| - EXPECT_TRUE(ValidateCodeTable());
|
| - code_table_data_.mode2[20] = VCDiffAddressCache::DefaultLastMode() + 1;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| - code_table_data_.mode2[20] = 0xFF;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, AddSecondWithNonzeroMode) {
|
| - VerifyInstruction(/* opcode */ 20, VCD_COPY, /* size */ 4, /* mode */ 0);
|
| - code_table_data_.inst2[20] = VCD_ADD;
|
| - EXPECT_TRUE(ValidateCodeTable());
|
| - code_table_data_.mode2[20] = 1;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, RunSecondWithNonzeroMode) {
|
| - VerifyInstruction(/* opcode */ 20, VCD_COPY, /* size */ 4, /* mode */ 0);
|
| - code_table_data_.inst2[20] = VCD_RUN;
|
| - EXPECT_TRUE(ValidateCodeTable());
|
| - code_table_data_.mode2[20] = 1;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, SecondNoOpWithNonzeroMode) {
|
| - VerifyInstruction(/* opcode */ 20, VCD_COPY, /* size */ 4, /* mode */ 0);
|
| - EXPECT_EQ(VCD_NOOP, code_table_data_.inst2[20]);
|
| - code_table_data_.mode2[20] = 1;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, SecondNoOpWithNonzeroSize) {
|
| - VerifyInstruction(/* opcode */ 20, VCD_COPY, /* size */ 4, /* mode */ 0);
|
| - EXPECT_EQ(VCD_NOOP, code_table_data_.inst2[20]);
|
| - code_table_data_.size2[20] = 1;
|
| - EXPECT_FALSE(ValidateCodeTable());
|
| -}
|
| -
|
| -TEST_F(CodeTableTest, ValidateExerciseCodeTable) {
|
| - EXPECT_TRUE(g_exercise_code_table_->Validate(kLastExerciseMode));
|
| -}
|
| -
|
| -} // unnamed namespace
|
| -} // namespace open_vcdiff
|
|
|