소스 검색

core: fix less-than operator

Daniele Bartolini 5 년 전
부모
커밋
abd9fdb6ff
2개의 변경된 파일15개의 추가작업 그리고 1개의 파일을 삭제
  1. 10 1
      src/core/guid.cpp
  2. 5 0
      src/core/unit_tests.cpp

+ 10 - 1
src/core/guid.cpp

@@ -104,7 +104,16 @@ bool operator==(const Guid& a, const Guid& b)
 
 bool operator<(const Guid& a, const Guid& b)
 {
-	return memcmp(&a, &b, sizeof(a)) < 0;
+	if (a.data1 != b.data1)
+		return a.data1 < b.data1;
+	if (a.data2 != b.data2)
+		return a.data2 < b.data2;
+	if (a.data3 != b.data3)
+		return a.data3 < b.data3;
+	if (a.data4 != b.data4)
+		return a.data4 < b.data4;
+
+	return false;
 }
 
 u32 hash<Guid>::operator()(const Guid& id) const

+ 5 - 0
src/core/unit_tests.cpp

@@ -1072,6 +1072,11 @@ static void test_guid()
 		ENSURE(guid::try_parse(guid, "961f8005-6a7e-4371-9272-8454dd786884"));
 		ENSURE(!guid::try_parse(guid, "961f80056a7e-4371-9272-8454dd786884"));
 	}
+	{
+		Guid guid1 = guid::parse("8ec79062-c8fd-41b5-b044-cb545afc9976");
+		Guid guid2 = guid::parse("8f879a4e-e9dd-4981-8b9e-344bb917d7dc");
+		CE_ENSURE(guid1 < guid2);
+	}
 	guid_globals::shutdown();
 	memory_globals::shutdown();
 }