Edit

kc3-lang/angle/src/gpu_info_util/SystemInfo_unittest.cpp

Branch :

  • Show log

    Commit

  • Author : Corentin Wallez
    Date : 2017-03-24 11:58:59
    Hash : 8f77e5d3
    Message : gpu_info_util: Implement GetSystemInfo on Windows BUG=angleproject:1874 Change-Id: I97a02d2c8b1f7ecb530684464fc02f528d34de7c Reviewed-on: https://chromium-review.googlesource.com/458965 Reviewed-by: Austin Kinross <aukinros@microsoft.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Corentin Wallez <cwallez@chromium.org>

  • src/gpu_info_util/SystemInfo_unittest.cpp
  • //
    // Copyright 2017 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    // SystemInfo_unittest.cpp: Unit tests for SystemInfo* helper functions.
    //
    
    #include "gpu_info_util/SystemInfo_internal.h"
    
    #include <gtest/gtest.h>
    
    using namespace angle;
    
    namespace
    {
    
    // Test AMD Brahma driver version parsing
    TEST(SystemInfoTest, AMDBrahmaVersionParsing)
    {
        std::string version;
    
        // Check parsing fails when no version string is present.
        ASSERT_FALSE(ParseAMDBrahmaDriverVersion("I am a lumberjack.", &version));
        ASSERT_EQ("", version);
    
        // Check parsing when the string is just the version string, with and without dots
        ASSERT_TRUE(ParseAMDBrahmaDriverVersion("42", &version));
        ASSERT_EQ("42", version);
        ASSERT_TRUE(ParseAMDBrahmaDriverVersion("42.0.56", &version));
        ASSERT_EQ("42.0.56", version);
    
        // Check parsing with prefix / suffix
        ASSERT_TRUE(ParseAMDBrahmaDriverVersion("Version=42.0.56", &version));
        ASSERT_EQ("42.0.56", version);
        ASSERT_TRUE(ParseAMDBrahmaDriverVersion("42.0.56 is the version", &version));
        ASSERT_EQ("42.0.56", version);
        ASSERT_TRUE(ParseAMDBrahmaDriverVersion("42.0.56 is the version, 111", &version));
        ASSERT_EQ("42.0.56", version);
    }
    
    // Test AMD Catalyst version parsing
    TEST(SystemInfoTest, AMDCatalystVersionParsing)
    {
        std::string version;
    
        // Check parsing fails when no version string is present.
        ASSERT_FALSE(ParseAMDCatalystDriverVersion("I am a lumberjack.\nReleaseVersion=", &version));
        ASSERT_EQ("", version);
    
        // Check parsing fails when ReleaseVersion= is present but no number appears in the line
        ASSERT_FALSE(ParseAMDCatalystDriverVersion("11\nReleaseVersion=\n12", &version));
        ASSERT_EQ("", version);
    
        // Check parsing works on the simple case
        ASSERT_TRUE(ParseAMDCatalystDriverVersion("ReleaseVersion=42.0.56", &version));
        ASSERT_EQ("42.0.56", version);
    
        // Check parsing works if there are other lines
        ASSERT_TRUE(ParseAMDCatalystDriverVersion("11\nReleaseVersion=42.0.56\n12", &version));
        ASSERT_EQ("42.0.56", version);
    
        // Check parsing get the first version string
        ASSERT_TRUE(
            ParseAMDCatalystDriverVersion("ReleaseVersion=42.0.56\nReleaseVersion=0", &version));
        ASSERT_EQ("42.0.56", version);
    
        // Check parsing with prefix / suffix
        ASSERT_TRUE(ParseAMDCatalystDriverVersion("ReleaseVersion=version is 42.0.56", &version));
        ASSERT_EQ("42.0.56", version);
        ASSERT_TRUE(ParseAMDCatalystDriverVersion("ReleaseVersion=42.0.56 is the version", &version));
        ASSERT_EQ("42.0.56", version);
    }
    
    // Test Mac machine model parsing
    TEST(SystemInfoTest, MacMachineModelParsing)
    {
        std::string model;
        int32_t major = 1, minor = 2;
    
        // Test on the empty string, that is returned by GetMachineModel on an error
        EXPECT_FALSE(ParseMacMachineModel("", &model, &major, &minor));
        EXPECT_EQ(0U, model.length());
        EXPECT_EQ(1, major);
        EXPECT_EQ(2, minor);
    
        // Test on an invalid string
        EXPECT_FALSE(ParseMacMachineModel("FooBar", &model, &major, &minor));
    
        // Test on a MacPro model
        EXPECT_TRUE(ParseMacMachineModel("MacPro4,1", &model, &major, &minor));
        EXPECT_EQ("MacPro", model);
        EXPECT_EQ(4, major);
        EXPECT_EQ(1, minor);
    
        // Test on a MacBookPro model
        EXPECT_TRUE(ParseMacMachineModel("MacBookPro6,2", &model, &major, &minor));
        EXPECT_EQ("MacBookPro", model);
        EXPECT_EQ(6, major);
        EXPECT_EQ(2, minor);
    }
    
    // Test Windows CM Device ID parsing
    TEST(SystemInfoTest, CMDeviceIDToDeviceAndVendorID)
    {
        uint32_t vendor = 0;
        uint32_t device = 0;
    
        // Test on a real-life CM Device ID
        EXPECT_TRUE(CMDeviceIDToDeviceAndVendorID(
            "PCI\\VEN_10DE&DEV_0FFA&SUBSYS_094B10DE&REV_A1\\4&95673C&0&0018", &vendor, &device));
        EXPECT_EQ(0x10deu, vendor);
        EXPECT_EQ(0x0ffau, device);
    
        // Test on a stripped-down but valid CM Device ID string
        EXPECT_TRUE(CMDeviceIDToDeviceAndVendorID("PCI\\VEN_10DE&DEV_0FFA", &vendor, &device));
        EXPECT_EQ(0x10deu, vendor);
        EXPECT_EQ(0x0ffau, device);
    
        // Test on a string that is too small
        EXPECT_FALSE(CMDeviceIDToDeviceAndVendorID("\\VEN_10DE&DEV_0FFA", &vendor, &device));
        EXPECT_EQ(0u, vendor);
        EXPECT_EQ(0u, device);
    
        // Test with invalid number
        EXPECT_FALSE(CMDeviceIDToDeviceAndVendorID("PCI\\VEN_XXXX&DEV_XXXX", &vendor, &device));
        EXPECT_EQ(0u, vendor);
        EXPECT_EQ(0u, device);
    }
    
    }  // anonymous namespace