From 30a6d3412f4a254b1b933c11b3b2e3c8c772f528 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Wed, 1 Jun 2022 22:12:08 +0200 Subject: [PATCH] Test crypt level generator --- test/drlg_l1_test.cpp | 52 ++++++++++++++++++++--- test/fixtures/hellfire/21-2122696790.dun | Bin 0 -> 54404 bytes test/fixtures/hellfire/22-1191662129.dun | Bin 0 -> 54404 bytes test/fixtures/hellfire/23-97055268.dun | Bin 0 -> 54404 bytes test/fixtures/hellfire/24-1324803725.dun | Bin 0 -> 54404 bytes 5 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 test/fixtures/hellfire/21-2122696790.dun create mode 100644 test/fixtures/hellfire/22-1191662129.dun create mode 100644 test/fixtures/hellfire/23-97055268.dun create mode 100644 test/fixtures/hellfire/24-1324803725.dun diff --git a/test/drlg_l1_test.cpp b/test/drlg_l1_test.cpp index 2ad4991d6..005f61fdf 100644 --- a/test/drlg_l1_test.cpp +++ b/test/drlg_l1_test.cpp @@ -30,13 +30,16 @@ TEST(Drlg_l1, DRLG_Init_Globals) void TestCreateL5Dungeon(bool hellfire, int level, uint32_t seed, lvl_entry entry) { - pMegaTiles = std::make_unique(1648); - - MyPlayer->pOriginalCathedral = !hellfire; + if (level >= 1 && level <= 4) { + MyPlayer->pOriginalCathedral = !hellfire; + pMegaTiles = std::make_unique(206); + leveltype = DTYPE_CATHEDRAL; + } else if (level >= 21 && level <= 24) { + pMegaTiles = std::make_unique(216); + leveltype = DTYPE_CRYPT; + } currlevel = level; - leveltype = DTYPE_CATHEDRAL; - CreateL5Dungeon(seed, entry); std::string path = paths::BasePath(); @@ -157,4 +160,43 @@ TEST(Drlg_l1, CreateL5Dungeon_hellfire_4_1190318991) EXPECT_EQ(ViewPosition.y, 45); } +TEST(Drlg_l1, CreateL5Dungeon_crypt_1_2122696790) +{ + TestCreateL5Dungeon(true, 21, 2122696790, ENTRY_TWARPUP); + EXPECT_EQ(ViewPosition.x, 61); + EXPECT_EQ(ViewPosition.y, 80); + TestCreateL5Dungeon(true, 21, 2122696790, ENTRY_PREV); + EXPECT_EQ(ViewPosition.x, 53); + EXPECT_EQ(ViewPosition.y, 67); +} + +TEST(Drlg_l1, CreateL5Dungeon_crypt_2_1191662129) +{ + Quests[Q_PWATER]._qactive = QUEST_NOTAVAIL; + + TestCreateL5Dungeon(true, 22, 1191662129, ENTRY_MAIN); + EXPECT_EQ(ViewPosition.x, 71); + EXPECT_EQ(ViewPosition.y, 47); + TestCreateL5Dungeon(true, 22, 1191662129, ENTRY_PREV); + EXPECT_EQ(ViewPosition.x, 85); + EXPECT_EQ(ViewPosition.y, 71); +} + +TEST(Drlg_l1, CreateL5Dungeon_crypt_3_97055268) +{ + TestCreateL5Dungeon(true, 23, 97055268, ENTRY_MAIN); + EXPECT_EQ(ViewPosition.x, 71); + EXPECT_EQ(ViewPosition.y, 57); + TestCreateL5Dungeon(true, 23, 97055268, ENTRY_PREV); + EXPECT_EQ(ViewPosition.x, 81); + EXPECT_EQ(ViewPosition.y, 59); +} + +TEST(Drlg_l1, CreateL5Dungeon_crypt_4_1324803725) +{ + TestCreateL5Dungeon(true, 24, 1324803725, ENTRY_MAIN); + EXPECT_EQ(ViewPosition.x, 79); + EXPECT_EQ(ViewPosition.y, 47); +} + } // namespace diff --git a/test/fixtures/hellfire/21-2122696790.dun b/test/fixtures/hellfire/21-2122696790.dun new file mode 100644 index 0000000000000000000000000000000000000000..44af7d575962d9903245e662c84c36aed655ec7f GIT binary patch literal 54404 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 PG(;HJFsU&xKL-8}R!%R% literal 0 HcmV?d00001 diff --git a/test/fixtures/hellfire/22-1191662129.dun b/test/fixtures/hellfire/22-1191662129.dun new file mode 100644 index 0000000000000000000000000000000000000000..d4a4d9650550429181a0ede99d956948bd743dd5 GIT binary patch literal 54404 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 TOhV$9Tf6#tek6WrSybNu+*C5C literal 0 HcmV?d00001 diff --git a/test/fixtures/hellfire/23-97055268.dun b/test/fixtures/hellfire/23-97055268.dun new file mode 100644 index 0000000000000000000000000000000000000000..ddbbbe7300df26da094e7ac8548f295dce9b5a92 GIT binary patch literal 54404 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 L1~fu7?8N^ARpD(T literal 0 HcmV?d00001 diff --git a/test/fixtures/hellfire/24-1324803725.dun b/test/fixtures/hellfire/24-1324803725.dun new file mode 100644 index 0000000000000000000000000000000000000000..dc0ede22c466956f35c454ec7eb6c442234b4eca GIT binary patch literal 54404 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