mirror of
				https://github.com/google/cpu_features.git
				synced 2025-10-31 05:00:44 +01:00 
			
		
		
		
	Reformat files
This commit is contained in:
		| @@ -43,16 +43,18 @@ typedef struct { | ||||
| // For every config, looks into flags_line for the presence of the | ||||
| // corresponding proc_cpuinfo_flag, calls `set_bit` accordingly. | ||||
| // Note: features is a pointer to the underlying Feature struct. | ||||
| void CpuFeatures_SetFromFlags(const size_t configs_size, const CapabilityConfig* configs, | ||||
|                   const StringView flags_line, void* const features); | ||||
| void CpuFeatures_SetFromFlags(const size_t configs_size, | ||||
|                               const CapabilityConfig* configs, | ||||
|                               const StringView flags_line, | ||||
|                               void* const features); | ||||
|  | ||||
| // For every config, looks into hwcaps for the presence of the feature. Calls | ||||
| // `set_bit` with true if the hardware capability is found. | ||||
| // Note: features is a pointer to the underlying Feature struct. | ||||
| void CpuFeatures_OverrideFromHwCaps(const size_t configs_size, | ||||
|                         const CapabilityConfig* configs, | ||||
|                         const HardwareCapabilities hwcaps, | ||||
|                         void* const features); | ||||
|                                     const CapabilityConfig* configs, | ||||
|                                     const HardwareCapabilities hwcaps, | ||||
|                                     void* const features); | ||||
|  | ||||
| CPU_FEATURES_END_CPP_NAMESPACE | ||||
| #endif  // CPU_FEATURES_INCLUDE_INTERNAL_LINUX_FEATURES_AGGREGATOR_H_ | ||||
|   | ||||
| @@ -50,7 +50,8 @@ int CpuFeatures_StringView_IndexOfChar(const StringView view, char c); | ||||
|  | ||||
| // Returns the index of the first occurrence of sub_view in view or -1 if not | ||||
| // found. | ||||
| int CpuFeatures_StringView_IndexOf(const StringView view, const StringView sub_view); | ||||
| int CpuFeatures_StringView_IndexOf(const StringView view, | ||||
|                                    const StringView sub_view); | ||||
|  | ||||
| // Returns whether a is equal to b (same content). | ||||
| bool CpuFeatures_StringView_IsEquals(const StringView a, const StringView b); | ||||
| @@ -64,11 +65,13 @@ StringView CpuFeatures_StringView_PopFront(const StringView view, size_t count); | ||||
|  | ||||
| // Removes count characters from the end of view or kEmptyStringView if count if | ||||
| // greater than view.size. | ||||
| StringView CpuFeatures_StringView_PopBack(const StringView str_view, size_t count); | ||||
| StringView CpuFeatures_StringView_PopBack(const StringView str_view, | ||||
|                                           size_t count); | ||||
|  | ||||
| // Keeps the count first characters of view or view if count if greater than | ||||
| // view.size. | ||||
| StringView CpuFeatures_StringView_KeepFront(const StringView view, size_t count); | ||||
| StringView CpuFeatures_StringView_KeepFront(const StringView view, | ||||
|                                             size_t count); | ||||
|  | ||||
| // Retrieves the first character of view. If view is empty the behavior is | ||||
| // undefined. | ||||
| @@ -86,15 +89,18 @@ StringView CpuFeatures_StringView_TrimWhitespace(StringView view); | ||||
| int CpuFeatures_StringView_ParsePositiveNumber(const StringView view); | ||||
|  | ||||
| // Copies src StringView to dst buffer. | ||||
| void CpuFeatures_StringView_CopyString(const StringView src, char* dst, size_t dst_size); | ||||
| void CpuFeatures_StringView_CopyString(const StringView src, char* dst, | ||||
|                                        size_t dst_size); | ||||
|  | ||||
| // Checks if line contains the specified whitespace separated word. | ||||
| bool CpuFeatures_StringView_HasWord(const StringView line, const char* const word); | ||||
| bool CpuFeatures_StringView_HasWord(const StringView line, | ||||
|                                     const char* const word); | ||||
|  | ||||
| // Get key/value from line. key and value are separated by ": ". | ||||
| // key and value are cleaned up from leading and trailing whitespaces. | ||||
| bool CpuFeatures_StringView_GetAttributeKeyValue(const StringView line, StringView* key, | ||||
|                           StringView* value); | ||||
| bool CpuFeatures_StringView_GetAttributeKeyValue(const StringView line, | ||||
|                                                  StringView* key, | ||||
|                                                  StringView* value); | ||||
|  | ||||
| CPU_FEATURES_END_CPP_NAMESPACE | ||||
|  | ||||
|   | ||||
| @@ -85,8 +85,9 @@ Aarch64Info GetAarch64Info(void) { | ||||
|   Aarch64Info info = kEmptyAarch64Info; | ||||
|  | ||||
|   FillProcCpuInfoData(&info); | ||||
|   CpuFeatures_OverrideFromHwCaps(kConfigsSize, kConfigs, CpuFeatures_GetHardwareCapabilities(), | ||||
|                      &info.features); | ||||
|   CpuFeatures_OverrideFromHwCaps(kConfigsSize, kConfigs, | ||||
|                                  CpuFeatures_GetHardwareCapabilities(), | ||||
|                                  &info.features); | ||||
|  | ||||
|   return info; | ||||
| } | ||||
|   | ||||
| @@ -87,12 +87,15 @@ static bool HandleArmLine(const LineResult result, ArmInfo* const info, | ||||
|     } else if (CpuFeatures_StringView_IsEquals(key, str("CPU architecture"))) { | ||||
|       // CPU architecture is a number that may be followed by letters. e.g. | ||||
|       // "6TEJ", "7". | ||||
|       const StringView digits = CpuFeatures_StringView_KeepFront(value, IndexOfNonDigit(value)); | ||||
|       const StringView digits = | ||||
|           CpuFeatures_StringView_KeepFront(value, IndexOfNonDigit(value)); | ||||
|       info->architecture = CpuFeatures_StringView_ParsePositiveNumber(digits); | ||||
|     } else if (CpuFeatures_StringView_IsEquals(key, str("Processor"))) { | ||||
|       proc_info->processor_reports_armv6 = CpuFeatures_StringView_IndexOf(value, str("(v6l)")) >= 0; | ||||
|       proc_info->processor_reports_armv6 = | ||||
|           CpuFeatures_StringView_IndexOf(value, str("(v6l)")) >= 0; | ||||
|     } else if (CpuFeatures_StringView_IsEquals(key, str("Hardware"))) { | ||||
|       proc_info->hardware_reports_goldfish = CpuFeatures_StringView_IsEquals(value, str("Goldfish")); | ||||
|       proc_info->hardware_reports_goldfish = | ||||
|           CpuFeatures_StringView_IsEquals(value, str("Goldfish")); | ||||
|     } | ||||
|   } | ||||
|   return !result.eof; | ||||
| @@ -174,8 +177,9 @@ ArmInfo GetArmInfo(void) { | ||||
|   ProcCpuInfoData proc_cpu_info_data = kEmptyProcCpuInfoData; | ||||
|  | ||||
|   FillProcCpuInfoData(&info, &proc_cpu_info_data); | ||||
|   CpuFeatures_OverrideFromHwCaps(kConfigsSize, kConfigs, CpuFeatures_GetHardwareCapabilities(), | ||||
|                      &info.features); | ||||
|   CpuFeatures_OverrideFromHwCaps(kConfigsSize, kConfigs, | ||||
|                                  CpuFeatures_GetHardwareCapabilities(), | ||||
|                                  &info.features); | ||||
|  | ||||
|   FixErrors(&info, &proc_cpu_info_data); | ||||
|  | ||||
|   | ||||
| @@ -63,8 +63,9 @@ MipsInfo GetMipsInfo(void) { | ||||
|   MipsInfo info = kEmptyMipsInfo; | ||||
|  | ||||
|   FillProcCpuInfoData(&info.features); | ||||
|   CpuFeatures_OverrideFromHwCaps(kConfigsSize, kConfigs, CpuFeatures_GetHardwareCapabilities(), | ||||
|                      &info.features); | ||||
|   CpuFeatures_OverrideFromHwCaps(kConfigsSize, kConfigs, | ||||
|                                  CpuFeatures_GetHardwareCapabilities(), | ||||
|                                  &info.features); | ||||
|   return info; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -21,11 +21,14 @@ | ||||
|  | ||||
| #if defined(_MSC_VER) | ||||
| #include <io.h> | ||||
| int CpuFeatures_OpenFile(const char* filename) { return _open(filename, _O_RDONLY); } | ||||
| int CpuFeatures_OpenFile(const char* filename) { | ||||
|   return _open(filename, _O_RDONLY); | ||||
| } | ||||
|  | ||||
| void CpuFeatures_CloseFile(int file_descriptor) { _close(file_descriptor); } | ||||
|  | ||||
| int CpuFeatures_ReadFile(int file_descriptor, void* buffer, size_t buffer_size) { | ||||
| int CpuFeatures_ReadFile(int file_descriptor, void* buffer, | ||||
|                          size_t buffer_size) { | ||||
|   return _read(file_descriptor, buffer, buffer_size); | ||||
| } | ||||
|  | ||||
| @@ -42,7 +45,8 @@ int CpuFeatures_OpenFile(const char* filename) { | ||||
|  | ||||
| void CpuFeatures_CloseFile(int file_descriptor) { close(file_descriptor); } | ||||
|  | ||||
| int CpuFeatures_ReadFile(int file_descriptor, void* buffer, size_t buffer_size) { | ||||
| int CpuFeatures_ReadFile(int file_descriptor, void* buffer, | ||||
|                          size_t buffer_size) { | ||||
|   int result; | ||||
|   do { | ||||
|     result = read(file_descriptor, buffer, buffer_size); | ||||
|   | ||||
| @@ -15,12 +15,15 @@ | ||||
| #include "internal/linux_features_aggregator.h" | ||||
| #include "internal/string_view.h" | ||||
|  | ||||
| void CpuFeatures_SetFromFlags(const size_t configs_size, const CapabilityConfig* configs, | ||||
|                   const StringView flags_line, void* const features) { | ||||
| void CpuFeatures_SetFromFlags(const size_t configs_size, | ||||
|                               const CapabilityConfig* configs, | ||||
|                               const StringView flags_line, | ||||
|                               void* const features) { | ||||
|   size_t i = 0; | ||||
|   for (; i < configs_size; ++i) { | ||||
|     const CapabilityConfig config = configs[i]; | ||||
|     config.set_bit(features, CpuFeatures_StringView_HasWord(flags_line, config.proc_cpuinfo_flag)); | ||||
|     config.set_bit(features, CpuFeatures_StringView_HasWord( | ||||
|                                  flags_line, config.proc_cpuinfo_flag)); | ||||
|   } | ||||
| } | ||||
|  | ||||
| @@ -35,9 +38,9 @@ static bool IsHwCapsSet(const HardwareCapabilities hwcaps_mask, | ||||
| } | ||||
|  | ||||
| void CpuFeatures_OverrideFromHwCaps(const size_t configs_size, | ||||
|                         const CapabilityConfig* configs, | ||||
|                         const HardwareCapabilities hwcaps, | ||||
|                         void* const features) { | ||||
|                                     const CapabilityConfig* configs, | ||||
|                                     const HardwareCapabilities hwcaps, | ||||
|                                     void* const features) { | ||||
|   size_t i = 0; | ||||
|   for (; i < configs_size; ++i) { | ||||
|     const CapabilityConfig* config = &configs[i]; | ||||
|   | ||||
| @@ -28,8 +28,8 @@ void StackLineReader_Initialize(StackLineReader* reader, int fd) { | ||||
|  | ||||
| // Replaces the content of buffer with bytes from the file. | ||||
| static int LoadFullBuffer(StackLineReader* reader) { | ||||
|   const int read = | ||||
|       CpuFeatures_ReadFile(reader->fd, reader->buffer, STACK_LINE_READER_BUFFER_SIZE); | ||||
|   const int read = CpuFeatures_ReadFile(reader->fd, reader->buffer, | ||||
|                                         STACK_LINE_READER_BUFFER_SIZE); | ||||
|   assert(read >= 0); | ||||
|   reader->view.ptr = reader->buffer; | ||||
|   reader->view.size = read; | ||||
| @@ -71,7 +71,8 @@ static void SkipToNextLine(StackLineReader* reader) { | ||||
|     } else { | ||||
|       const int eol_index = IndexOfEol(reader); | ||||
|       if (eol_index >= 0) { | ||||
|         reader->view = CpuFeatures_StringView_PopFront(reader->view, eol_index + 1); | ||||
|         reader->view = | ||||
|             CpuFeatures_StringView_PopFront(reader->view, eol_index + 1); | ||||
|         break; | ||||
|       } | ||||
|     } | ||||
| @@ -120,8 +121,10 @@ LineResult StackLineReader_NextLine(StackLineReader* reader) { | ||||
|       return CreateTruncatedLineResult(reader->view); | ||||
|     } | ||||
|     { | ||||
|       StringView line = CpuFeatures_StringView_KeepFront(reader->view, eol_index); | ||||
|       reader->view = CpuFeatures_StringView_PopFront(reader->view, eol_index + 1); | ||||
|       StringView line = | ||||
|           CpuFeatures_StringView_KeepFront(reader->view, eol_index); | ||||
|       reader->view = | ||||
|           CpuFeatures_StringView_PopFront(reader->view, eol_index + 1); | ||||
|       return CreateValidLineResult(line); | ||||
|     } | ||||
|   } | ||||
|   | ||||
| @@ -28,11 +28,13 @@ int CpuFeatures_StringView_IndexOfChar(const StringView view, char c) { | ||||
|   return -1; | ||||
| } | ||||
|  | ||||
| int CpuFeatures_StringView_IndexOf(const StringView view, const StringView sub_view) { | ||||
| int CpuFeatures_StringView_IndexOf(const StringView view, | ||||
|                                    const StringView sub_view) { | ||||
|   if (sub_view.size) { | ||||
|     StringView remainder = view; | ||||
|     while (remainder.size >= sub_view.size) { | ||||
|       const int found_index = CpuFeatures_StringView_IndexOfChar(remainder, sub_view.ptr[0]); | ||||
|       const int found_index = | ||||
|           CpuFeatures_StringView_IndexOfChar(remainder, sub_view.ptr[0]); | ||||
|       if (found_index < 0) break; | ||||
|       remainder = CpuFeatures_StringView_PopFront(remainder, found_index); | ||||
|       if (CpuFeatures_StringView_StartsWith(remainder, sub_view)) { | ||||
| @@ -57,21 +59,24 @@ bool CpuFeatures_StringView_StartsWith(const StringView a, const StringView b) { | ||||
|              : false; | ||||
| } | ||||
|  | ||||
| StringView CpuFeatures_StringView_PopFront(const StringView str_view, size_t count) { | ||||
| StringView CpuFeatures_StringView_PopFront(const StringView str_view, | ||||
|                                            size_t count) { | ||||
|   if (count > str_view.size) { | ||||
|     return kEmptyStringView; | ||||
|   } | ||||
|   return view(str_view.ptr + count, str_view.size - count); | ||||
| } | ||||
|  | ||||
| StringView CpuFeatures_StringView_PopBack(const StringView str_view, size_t count) { | ||||
| StringView CpuFeatures_StringView_PopBack(const StringView str_view, | ||||
|                                           size_t count) { | ||||
|   if (count > str_view.size) { | ||||
|     return kEmptyStringView; | ||||
|   } | ||||
|   return view(str_view.ptr, str_view.size - count); | ||||
| } | ||||
|  | ||||
| StringView CpuFeatures_StringView_KeepFront(const StringView str_view, size_t count) { | ||||
| StringView CpuFeatures_StringView_KeepFront(const StringView str_view, | ||||
|                                             size_t count) { | ||||
|   return count <= str_view.size ? view(str_view.ptr, count) : str_view; | ||||
| } | ||||
|  | ||||
| @@ -87,8 +92,10 @@ char CpuFeatures_StringView_Back(const StringView view) { | ||||
| } | ||||
|  | ||||
| StringView CpuFeatures_StringView_TrimWhitespace(StringView view) { | ||||
|   while (view.size && isspace(CpuFeatures_StringView_Front(view))) view = CpuFeatures_StringView_PopFront(view, 1); | ||||
|   while (view.size && isspace(CpuFeatures_StringView_Back(view))) view = CpuFeatures_StringView_PopBack(view, 1); | ||||
|   while (view.size && isspace(CpuFeatures_StringView_Front(view))) | ||||
|     view = CpuFeatures_StringView_PopFront(view, 1); | ||||
|   while (view.size && isspace(CpuFeatures_StringView_Back(view))) | ||||
|     view = CpuFeatures_StringView_PopBack(view, 1); | ||||
|   return view; | ||||
| } | ||||
|  | ||||
| @@ -103,7 +110,8 @@ static int HexValue(const char c) { | ||||
| static int ParsePositiveNumberWithBase(const StringView view, int base) { | ||||
|   int result = 0; | ||||
|   StringView remainder = view; | ||||
|   for (; remainder.size; remainder = CpuFeatures_StringView_PopFront(remainder, 1)) { | ||||
|   for (; remainder.size; | ||||
|        remainder = CpuFeatures_StringView_PopFront(remainder, 1)) { | ||||
|     const int value = HexValue(CpuFeatures_StringView_Front(remainder)); | ||||
|     if (value < 0 || value >= base) return -1; | ||||
|     result = (result * base) + value; | ||||
| @@ -115,7 +123,8 @@ int CpuFeatures_StringView_ParsePositiveNumber(const StringView view) { | ||||
|   if (view.size) { | ||||
|     const StringView hex_prefix = str("0x"); | ||||
|     if (CpuFeatures_StringView_StartsWith(view, hex_prefix)) { | ||||
|       const StringView span_no_prefix = CpuFeatures_StringView_PopFront(view, hex_prefix.size); | ||||
|       const StringView span_no_prefix = | ||||
|           CpuFeatures_StringView_PopFront(view, hex_prefix.size); | ||||
|       return ParsePositiveNumberWithBase(span_no_prefix, 16); | ||||
|     } | ||||
|     return ParsePositiveNumberWithBase(view, 10); | ||||
| @@ -123,7 +132,8 @@ int CpuFeatures_StringView_ParsePositiveNumber(const StringView view) { | ||||
|   return -1; | ||||
| } | ||||
|  | ||||
| void CpuFeatures_StringView_CopyString(const StringView src, char* dst, size_t dst_size) { | ||||
| void CpuFeatures_StringView_CopyString(const StringView src, char* dst, | ||||
|                                        size_t dst_size) { | ||||
|   if (dst_size > 0) { | ||||
|     const size_t max_copy_size = dst_size - 1; | ||||
|     const size_t copy_size = | ||||
| @@ -133,7 +143,8 @@ void CpuFeatures_StringView_CopyString(const StringView src, char* dst, size_t d | ||||
|   } | ||||
| } | ||||
|  | ||||
| bool CpuFeatures_StringView_HasWord(const StringView line, const char* const word_str) { | ||||
| bool CpuFeatures_StringView_HasWord(const StringView line, | ||||
|                                     const char* const word_str) { | ||||
|   const StringView word = str(word_str); | ||||
|   StringView remainder = line; | ||||
|   for (;;) { | ||||
| @@ -141,23 +152,31 @@ bool CpuFeatures_StringView_HasWord(const StringView line, const char* const wor | ||||
|     if (index_of_word < 0) { | ||||
|       return false; | ||||
|     } else { | ||||
|       const StringView before = CpuFeatures_StringView_KeepFront(line, index_of_word); | ||||
|       const StringView after = CpuFeatures_StringView_PopFront(line, index_of_word + word.size); | ||||
|       const bool valid_before = before.size == 0 || CpuFeatures_StringView_Back(before) == ' '; | ||||
|       const bool valid_after = after.size == 0 || CpuFeatures_StringView_Front(after) == ' '; | ||||
|       const StringView before = | ||||
|           CpuFeatures_StringView_KeepFront(line, index_of_word); | ||||
|       const StringView after = | ||||
|           CpuFeatures_StringView_PopFront(line, index_of_word + word.size); | ||||
|       const bool valid_before = | ||||
|           before.size == 0 || CpuFeatures_StringView_Back(before) == ' '; | ||||
|       const bool valid_after = | ||||
|           after.size == 0 || CpuFeatures_StringView_Front(after) == ' '; | ||||
|       if (valid_before && valid_after) return true; | ||||
|       remainder = CpuFeatures_StringView_PopFront(remainder, index_of_word + word.size); | ||||
|       remainder = | ||||
|           CpuFeatures_StringView_PopFront(remainder, index_of_word + word.size); | ||||
|     } | ||||
|   } | ||||
|   return false; | ||||
| } | ||||
|  | ||||
| bool CpuFeatures_StringView_GetAttributeKeyValue(const StringView line, StringView* key, | ||||
|                           StringView* value) { | ||||
| bool CpuFeatures_StringView_GetAttributeKeyValue(const StringView line, | ||||
|                                                  StringView* key, | ||||
|                                                  StringView* value) { | ||||
|   const StringView sep = str(": "); | ||||
|   const int index_of_separator = CpuFeatures_StringView_IndexOf(line, sep); | ||||
|   if (index_of_separator < 0) return false; | ||||
|   *value = CpuFeatures_StringView_TrimWhitespace(CpuFeatures_StringView_PopFront(line, index_of_separator + sep.size)); | ||||
|   *key = CpuFeatures_StringView_TrimWhitespace(CpuFeatures_StringView_KeepFront(line, index_of_separator)); | ||||
|   *value = CpuFeatures_StringView_TrimWhitespace( | ||||
|       CpuFeatures_StringView_PopFront(line, index_of_separator + sep.size)); | ||||
|   *key = CpuFeatures_StringView_TrimWhitespace( | ||||
|       CpuFeatures_StringView_KeepFront(line, index_of_separator)); | ||||
|   return true; | ||||
| } | ||||
|   | ||||
| @@ -94,7 +94,8 @@ extern "C" void CpuFeatures_CloseFile(int file_descriptor) { | ||||
|   kFilesystem->FindFileOrDie(file_descriptor)->Close(); | ||||
| } | ||||
|  | ||||
| extern "C" int CpuFeatures_ReadFile(int file_descriptor, void* buf, size_t count) { | ||||
| extern "C" int CpuFeatures_ReadFile(int file_descriptor, void* buf, | ||||
|                                     size_t count) { | ||||
|   return kFilesystem->FindFileOrDie(file_descriptor) | ||||
|       ->Read(file_descriptor, buf, count); | ||||
| } | ||||
|   | ||||
| @@ -42,7 +42,8 @@ class LinuxFeatureAggregatorTest : public testing::Test { | ||||
|  | ||||
| TEST_F(LinuxFeatureAggregatorTest, FromFlagsEmpty) { | ||||
|   Features features; | ||||
|   CpuFeatures_SetFromFlags(kConfigs.size(), kConfigs.data(), str(""), &features); | ||||
|   CpuFeatures_SetFromFlags(kConfigs.size(), kConfigs.data(), str(""), | ||||
|                            &features); | ||||
|   EXPECT_FALSE(features.a); | ||||
|   EXPECT_FALSE(features.b); | ||||
|   EXPECT_FALSE(features.c); | ||||
| @@ -50,7 +51,8 @@ TEST_F(LinuxFeatureAggregatorTest, FromFlagsEmpty) { | ||||
|  | ||||
| TEST_F(LinuxFeatureAggregatorTest, FromFlagsAllSet) { | ||||
|   Features features; | ||||
|   CpuFeatures_SetFromFlags(kConfigs.size(), kConfigs.data(), str("a c b"), &features); | ||||
|   CpuFeatures_SetFromFlags(kConfigs.size(), kConfigs.data(), str("a c b"), | ||||
|                            &features); | ||||
|   EXPECT_TRUE(features.a); | ||||
|   EXPECT_TRUE(features.b); | ||||
|   EXPECT_TRUE(features.c); | ||||
| @@ -58,7 +60,8 @@ TEST_F(LinuxFeatureAggregatorTest, FromFlagsAllSet) { | ||||
|  | ||||
| TEST_F(LinuxFeatureAggregatorTest, FromFlagsOnlyA) { | ||||
|   Features features; | ||||
|   CpuFeatures_SetFromFlags(kConfigs.size(), kConfigs.data(), str("a"), &features); | ||||
|   CpuFeatures_SetFromFlags(kConfigs.size(), kConfigs.data(), str("a"), | ||||
|                            &features); | ||||
|   EXPECT_TRUE(features.a); | ||||
|   EXPECT_FALSE(features.b); | ||||
|   EXPECT_FALSE(features.c); | ||||
| @@ -69,7 +72,8 @@ TEST_F(LinuxFeatureAggregatorTest, FromHwcapsNone) { | ||||
|   capability.hwcaps = 0;   // matches none | ||||
|   capability.hwcaps2 = 0;  // matches none | ||||
|   Features features; | ||||
|   CpuFeatures_OverrideFromHwCaps(kConfigs.size(), kConfigs.data(), capability, &features); | ||||
|   CpuFeatures_OverrideFromHwCaps(kConfigs.size(), kConfigs.data(), capability, | ||||
|                                  &features); | ||||
|   EXPECT_FALSE(features.a); | ||||
|   EXPECT_FALSE(features.b); | ||||
|   EXPECT_FALSE(features.c); | ||||
| @@ -80,7 +84,8 @@ TEST_F(LinuxFeatureAggregatorTest, FromHwcapsSet) { | ||||
|   capability.hwcaps = 0b0010;   // matches b but not a | ||||
|   capability.hwcaps2 = 0b1111;  // matches c | ||||
|   Features features; | ||||
|   CpuFeatures_OverrideFromHwCaps(kConfigs.size(), kConfigs.data(), capability, &features); | ||||
|   CpuFeatures_OverrideFromHwCaps(kConfigs.size(), kConfigs.data(), capability, | ||||
|                                  &features); | ||||
|   EXPECT_FALSE(features.a); | ||||
|   EXPECT_TRUE(features.b); | ||||
|   EXPECT_TRUE(features.c); | ||||
|   | ||||
| @@ -57,12 +57,15 @@ TEST(StringViewTest, CpuFeatures_StringView_IndexOf) { | ||||
| TEST(StringViewTest, CpuFeatures_StringView_StartsWith) { | ||||
|   EXPECT_TRUE(CpuFeatures_StringView_StartsWith(str("test"), str("te"))); | ||||
|   EXPECT_FALSE(CpuFeatures_StringView_StartsWith(str("test"), str(""))); | ||||
|   EXPECT_FALSE(CpuFeatures_StringView_StartsWith(str("test"), kEmptyStringView)); | ||||
|   EXPECT_FALSE(CpuFeatures_StringView_StartsWith(kEmptyStringView, str("test"))); | ||||
|   EXPECT_FALSE( | ||||
|       CpuFeatures_StringView_StartsWith(str("test"), kEmptyStringView)); | ||||
|   EXPECT_FALSE( | ||||
|       CpuFeatures_StringView_StartsWith(kEmptyStringView, str("test"))); | ||||
| } | ||||
|  | ||||
| TEST(StringViewTest, CpuFeatures_StringView_IsEquals) { | ||||
|   EXPECT_TRUE(CpuFeatures_StringView_IsEquals(kEmptyStringView, kEmptyStringView)); | ||||
|   EXPECT_TRUE( | ||||
|       CpuFeatures_StringView_IsEquals(kEmptyStringView, kEmptyStringView)); | ||||
|   EXPECT_TRUE(CpuFeatures_StringView_IsEquals(kEmptyStringView, str(""))); | ||||
|   EXPECT_TRUE(CpuFeatures_StringView_IsEquals(str(""), kEmptyStringView)); | ||||
|   EXPECT_TRUE(CpuFeatures_StringView_IsEquals(str("a"), str("a"))); | ||||
| @@ -111,11 +114,14 @@ TEST(StringViewTest, CpuFeatures_StringView_CopyString) { | ||||
|  | ||||
| TEST(StringViewTest, CpuFeatures_StringView_HasWord) { | ||||
|   // Find flags at beginning, middle and end. | ||||
|   EXPECT_TRUE(CpuFeatures_StringView_HasWord(str("first middle last"), "first")); | ||||
|   EXPECT_TRUE(CpuFeatures_StringView_HasWord(str("first middle last"), "middle")); | ||||
|   EXPECT_TRUE( | ||||
|       CpuFeatures_StringView_HasWord(str("first middle last"), "first")); | ||||
|   EXPECT_TRUE( | ||||
|       CpuFeatures_StringView_HasWord(str("first middle last"), "middle")); | ||||
|   EXPECT_TRUE(CpuFeatures_StringView_HasWord(str("first middle last"), "last")); | ||||
|   // Do not match partial flags | ||||
|   EXPECT_FALSE(CpuFeatures_StringView_HasWord(str("first middle last"), "irst")); | ||||
|   EXPECT_FALSE( | ||||
|       CpuFeatures_StringView_HasWord(str("first middle last"), "irst")); | ||||
|   EXPECT_FALSE(CpuFeatures_StringView_HasWord(str("first middle last"), "mid")); | ||||
|   EXPECT_FALSE(CpuFeatures_StringView_HasWord(str("first middle last"), "las")); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Arvid Gerstmann
					Arvid Gerstmann