Index: tests/Makefile ================================================================== --- tests/Makefile +++ tests/Makefile @@ -40,10 +40,11 @@ OFLHAArchiveTests.m \ OFListTests.m \ OFLocaleTests.m \ OFMatrix4x4Tests.m \ OFMemoryStreamTests.m \ + OFMessagePackTests.m \ OFMethodSignatureTests.m \ OFMutableArrayTests.m \ OFMutableDataTests.m \ OFMutableDictionaryTests.m \ OFMutableSetTests.m \ ADDED tests/OFMessagePackTests.m Index: tests/OFMessagePackTests.m ================================================================== --- tests/OFMessagePackTests.m +++ tests/OFMessagePackTests.m @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2008-2024 Jonathan Schleifer + * + * All rights reserved. + * + * This file is part of ObjFW. It may be distributed under the terms of the + * Q Public License 1.0, which can be found in the file LICENSE.QPL included in + * the packaging of this file. + * + * Alternatively, it may be distributed under the terms of the GNU General + * Public License, either version 2 or 3, which can be found in the file + * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this + * file. + */ + +#include "config.h" + +#import "ObjFW.h" +#import "ObjFWTest.h" + +@interface OFMessagePackTests: OTTestCase +@end + +@implementation OFMessagePackTests +- (void)testMessagePackRepresentationForNumber +{ + OTAssertEqualObjects([[OFNumber numberWithChar: -30] + messagePackRepresentation], + [OFData dataWithItems: "\xE2" count: 1]); + + OTAssertEqualObjects([[OFNumber numberWithChar: -33] + messagePackRepresentation], + [OFData dataWithItems: "\xD0\xDF" count: 2]); + + OTAssertEqualObjects([[OFNumber numberWithUnsignedChar: 127] + messagePackRepresentation], + [OFData dataWithItems: "\x7F" count: 1]); + + OTAssertEqualObjects([[OFNumber numberWithUnsignedChar: 128] + messagePackRepresentation], + [OFData dataWithItems: "\xCC\x80" count: 2]); + + OTAssertEqualObjects([[OFNumber numberWithShort: -129] + messagePackRepresentation], + [OFData dataWithItems: "\xD1\xFF\x7F" count: 3]); + + OTAssertEqualObjects([[OFNumber numberWithUnsignedShort: 256] + messagePackRepresentation], + [OFData dataWithItems: "\xCD\x01\x00" count: 3]); + + OTAssertEqualObjects([[OFNumber numberWithLong: -32769] + messagePackRepresentation], + [OFData dataWithItems: "\xD2\xFF\xFF\x7F\xFF" count: 5]); + + OTAssertEqualObjects([[OFNumber numberWithUnsignedLong: 65536] + messagePackRepresentation], + [OFData dataWithItems: "\xCE\x00\x01\x00\x00" count: 5]); + + OTAssertEqualObjects([[OFNumber numberWithLongLong: -2147483649] + messagePackRepresentation], + [OFData dataWithItems: "\xD3\xFF\xFF\xFF\xFF\x7F\xFF\xFF\xFF" + count: 9]); + + OTAssertEqualObjects([[OFNumber numberWithUnsignedLongLong: 4294967296] + messagePackRepresentation], + [OFData dataWithItems: "\xCF\x00\x00\x00\x01\x00\x00\x00\x00" + count: 9]); + + OTAssertEqualObjects([[OFNumber numberWithFloat: 1.25f] + messagePackRepresentation], + [OFData dataWithItems: "\xCA\x3F\xA0\x00\x00" count: 5]); + + OTAssertEqualObjects([[OFNumber numberWithDouble: 1.25] + messagePackRepresentation], + [OFData dataWithItems: "\xCB\x3F\xF4\x00\x00\x00\x00\x00\x00" + count: 9]); +} + +- (void)testObjectByParsingMessagePackForNumber +{ + OTAssertEqualObjects([[OFData dataWithItems: "\xE2" count: 1] + objectByParsingMessagePack], + [OFNumber numberWithChar: -30]); + + OTAssertEqualObjects([[OFData dataWithItems: "\xD0\xDF" count: 2] + objectByParsingMessagePack], + [OFNumber numberWithChar: -33]); + + OTAssertEqualObjects([[OFData dataWithItems: "\x7F" count: 1] + objectByParsingMessagePack], + [OFNumber numberWithUnsignedChar: 127]); + + OTAssertEqualObjects([[OFData dataWithItems: "\xCC\x80" count: 2] + objectByParsingMessagePack], + [OFNumber numberWithUnsignedChar: 128]); + + OTAssertEqualObjects([[OFData dataWithItems: "\xD1\xFF\x7F" count: 3] + objectByParsingMessagePack], + [OFNumber numberWithShort: -129]); + + OTAssertEqualObjects([[OFData dataWithItems: "\xCD\x01\x00" count: 3] + objectByParsingMessagePack], + [OFNumber numberWithUnsignedShort: 256]); + + OTAssertEqualObjects( + [[OFData dataWithItems: "\xD2\xFF\xFF\x7F\xFF" + count: 5] objectByParsingMessagePack], + [OFNumber numberWithLong: -32769]); + + OTAssertEqualObjects( + [[OFData dataWithItems: "\xCE\x00\x01\x00\x00" + count: 5] objectByParsingMessagePack], + [OFNumber numberWithUnsignedLong: 65536]); + + OTAssertEqualObjects( + [[OFData dataWithItems: "\xD3\xFF\xFF\xFF\xFF\x7F\xFF\xFF\xFF" + count: 9] objectByParsingMessagePack], + [OFNumber numberWithLongLong: -2147483649]); + + OTAssertEqualObjects( + [[OFData dataWithItems: "\xCF\x00\x00\x00\x01\x00\x00\x00\x00" + count: 9] objectByParsingMessagePack], + [OFNumber numberWithUnsignedLongLong: 4294967296]); + + OTAssertEqualObjects( + [[OFData dataWithItems: "\xCA\x3F\xA0\x00\x00" + count: 5] objectByParsingMessagePack], + [OFNumber numberWithFloat: 1.25f]); + + OTAssertEqualObjects( + [[OFData dataWithItems: "\xCB\x3F\xF4\x00\x00\x00\x00\x00\x00" + count: 9] objectByParsingMessagePack], + [OFNumber numberWithDouble: 1.25]); +} +@end