Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Check support for unsigned 64 bit integer values for sequence numbers #52

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.6', '3.7', '3.8', '3.9', '3.10']
python-version: ['3.7', '3.8', '3.9', '3.10']
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install Requirements
Expand Down
1 change: 0 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
Expand Down
45 changes: 43 additions & 2 deletions test/test_message.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#! /usr/bin/env python
########################################################################
# SimpleFIX
# Copyright (C) 2016-2022, David Arnold.
# Copyright (C) 2016-2023, David Arnold.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
Expand All @@ -24,7 +24,6 @@
########################################################################

import datetime
import sys
import time
import unittest

Expand Down Expand Up @@ -940,6 +939,48 @@ def test_val_str(self):
self.assertEqual(b"123", fix_val("123"))
self.assertEqual(bytes, type(fix_val("123")))

def test_int_value_zero(self):
"""Test integer value: zero."""
m = FixMessage()
m.append_pair(34, 0)
b = m.encode(raw=True)
self.assertEqual(b, b'34=0\x01')

def test_int_value_one(self):
"""Test integer value: one"""
m = FixMessage()
m.append_pair(34, 1)
b = m.encode(raw=True)
self.assertEqual(b, b'34=1\x01')

def test_int_value_32bit(self):
"""Test integer value: 2**32-1"""
m = FixMessage()
m.append_pair(34, 0xffffffff)
b = m.encode(raw=True)
self.assertEqual(b, b'34=4294967295\x01')

def test_int_value_33bit(self):
"""Test integer value: 2**32"""
m = FixMessage()
m.append_pair(34, 0xffffffff + 1)
b = m.encode(raw=True)
self.assertEqual(b, b'34=4294967296\x01')

def test_int_value_64bit(self):
"""Test integer value: 2**64-1"""
m = FixMessage()
m.append_pair(34, 0xffffffffffffffff)
b = m.encode(raw=True)
self.assertEqual(b, b'34=18446744073709551615\x01')

def test_int_value_65bit(self):
"""Test integer value: 2**64"""
m = FixMessage()
m.append_pair(34, 0xffffffffffffffff + 1)
b = m.encode(raw=True)
self.assertEqual(b, b'34=18446744073709551616\x01')


if __name__ == "__main__":
unittest.main()
50 changes: 49 additions & 1 deletion test/test_parser.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#! /usr/bin/env python
########################################################################
# SimpleFIX
# Copyright (C) 2016-2022, David Arnold.
# Copyright (C) 2016-2023, David Arnold.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
Expand Down Expand Up @@ -161,6 +161,54 @@ def test_junk_pairs(self):
msg = parser.get_message()
self.assertIsNone(msg)

def test_int_value_zero(self):
"""Test integer value: zero."""
parser = FixParser()
parser.append_buffer(b'8=FIX.4.2\x0134=0\x0110=0\x01')
msg = parser.get_message()
self.assertIsNotNone(msg)
self.assertEqual(int(msg.get(34)), 0)

def test_int_value_one(self):
"""Test integer value: zero."""
parser = FixParser()
parser.append_buffer(b'8=FIX.4.2\x0134=1\x0110=0\x01')
msg = parser.get_message()
self.assertIsNotNone(msg)
self.assertEqual(int(msg.get(34)), 1)

def test_int_value_32bit(self):
"""Test integer value: zero."""
parser = FixParser()
parser.append_buffer(b'8=FIX.4.2\x0134=4294967295\x0110=0\x01')
msg = parser.get_message()
self.assertIsNotNone(msg)
self.assertEqual(int(msg.get(34)), 4294967295)

def test_int_value_33bit(self):
"""Test integer value: zero."""
parser = FixParser()
parser.append_buffer(b'8=FIX.4.2\x0134=4294967296\x0110=0\x01')
msg = parser.get_message()
self.assertIsNotNone(msg)
self.assertEqual(int(msg.get(34)), 4294967296)

def test_int_value_64bit(self):
"""Test integer value: zero."""
parser = FixParser()
parser.append_buffer(b'8=FIX.4.2\x0134=18446744073709551615\x0110=0\x01')
msg = parser.get_message()
self.assertIsNotNone(msg)
self.assertEqual(int(msg.get(34)), 18446744073709551615)

def test_int_value_65bit(self):
"""Test integer value: zero."""
parser = FixParser()
parser.append_buffer(b'8=FIX.4.2\x0134=18446744073709551616\x0110=0\x01')
msg = parser.get_message()
self.assertIsNotNone(msg)
self.assertEqual(int(msg.get(34)), 18446744073709551616)

def test_raw_data(self):
"""Test parsing of raw data fields."""
raw = b"raw\x01data"
Expand Down