2024-04-11 15:51:56 +02:00
|
|
|
package byteRange
|
|
|
|
|
|
|
|
import "testing"
|
|
|
|
|
|
|
|
import "seekia/internal/messaging/inbox"
|
|
|
|
|
|
|
|
import "slices"
|
|
|
|
|
|
|
|
func TestCompareIdentityBounds(t *testing.T){
|
|
|
|
|
|
|
|
testBound1, testBound2 := GetMinimumMaximumIdentityHashBounds()
|
|
|
|
|
|
|
|
areEqual, latterIsLarger, err := compareByteSlices(testBound1[:], testBound2[:])
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("compareByteSlices failed test 1 with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (areEqual == true){
|
|
|
|
t.Fatalf("compareByteSlices failed test 1a.")
|
|
|
|
}
|
|
|
|
if (latterIsLarger == false){
|
|
|
|
t.Fatalf("compareByteSlices failed test 1b.")
|
|
|
|
}
|
|
|
|
|
|
|
|
areEqual, latterIsLarger, err = compareByteSlices(testBound2[:], testBound1[:])
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("compareByteSlices failed test 2 with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (areEqual == true){
|
|
|
|
t.Fatalf("compareByteSlices failed test 2a.")
|
|
|
|
}
|
|
|
|
if (latterIsLarger == true){
|
|
|
|
t.Fatalf("compareByteSlices failed test 2b.")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCompareInboxBounds(t *testing.T){
|
|
|
|
|
|
|
|
testBound1 := "5555555555555555"
|
|
|
|
testBound2 := "7777777777777777"
|
|
|
|
|
|
|
|
testBound1Bytes, err := inbox.ReadInboxString(testBound1)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound1 is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
testBound2Bytes, err := inbox.ReadInboxString(testBound2)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound2 is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
areEqual, latterIsLarger, err := compareByteSlices(testBound1Bytes[:], testBound2Bytes[:])
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("compareByteSlices failed test 3 with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (areEqual == true){
|
|
|
|
t.Fatalf("compareByteSlices failed test 3a.")
|
|
|
|
}
|
|
|
|
if (latterIsLarger == false){
|
|
|
|
t.Fatalf("compareByteSlices failed test 3b.")
|
|
|
|
}
|
|
|
|
|
|
|
|
areEqual, latterIsLarger, err = compareByteSlices(testBound2Bytes[:], testBound1Bytes[:])
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("compareByteSlices failed test 4 with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (areEqual == true){
|
|
|
|
t.Fatalf("compareByteSlices failed test 4a.")
|
|
|
|
}
|
|
|
|
if (latterIsLarger == true){
|
|
|
|
t.Fatalf("compareByteSlices failed test 4b.")
|
|
|
|
}
|
|
|
|
|
2024-06-21 10:47:06 +02:00
|
|
|
testBound3 := "seekia2222222222"
|
|
|
|
testBound4 := "seekia3333333333"
|
2024-04-11 15:51:56 +02:00
|
|
|
|
|
|
|
testBound3Bytes, err := inbox.ReadInboxString(testBound3)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound3 is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
testBound4Bytes, err := inbox.ReadInboxString(testBound4)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound4 is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
areEqual, latterIsLarger, err = compareByteSlices(testBound3Bytes[:], testBound4Bytes[:])
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("compareByteSlices failed test 5 with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (areEqual == true){
|
|
|
|
t.Fatalf("compareByteSlices failed test 5a.")
|
|
|
|
}
|
|
|
|
if (latterIsLarger == false){
|
|
|
|
t.Fatalf("compareByteSlices failed test 5b.")
|
|
|
|
}
|
|
|
|
|
|
|
|
areEqual, latterIsLarger, err = compareByteSlices(testBound4Bytes[:], testBound3Bytes[:])
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("compareByteSlices failed test 6 with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (areEqual == true){
|
|
|
|
t.Fatalf("compareByteSlices failed test 6a.")
|
|
|
|
}
|
|
|
|
if (latterIsLarger == true){
|
|
|
|
t.Fatalf("compareByteSlices failed test 6b.")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func TestInboxIsWithinRangeFunction(t *testing.T){
|
|
|
|
|
|
|
|
testRangeStartString := "aaaaaaaaaaaaaaaa"
|
|
|
|
testRangeEndString := "5555555555555555"
|
|
|
|
|
|
|
|
testRangeStart, err := inbox.ReadInboxString(testRangeStartString)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testRangeStart is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
testRangeEnd, err := inbox.ReadInboxString(testRangeEndString)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testRangeEnd is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
inboxAString := "ffffffffffffffff"
|
|
|
|
inboxBString := "6666666666666666"
|
|
|
|
|
|
|
|
inboxA, err := inbox.ReadInboxString(inboxAString)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("inboxAString is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
inboxB, err := inbox.ReadInboxString(inboxBString)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("inboxBString is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
isWithinRange, err := CheckIfInboxIsWithinRange(testRangeStart, testRangeEnd, inboxA)
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("CheckIfInboxIsWithinRange failed test 1 with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (isWithinRange == false){
|
|
|
|
t.Fatalf("CheckIfInboxIsWithinRange failed test 1.")
|
|
|
|
}
|
|
|
|
|
|
|
|
isWithinRange, err = CheckIfInboxIsWithinRange(testRangeStart, testRangeEnd, inboxB)
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("CheckIfInboxIsWithinRange failed test 2 with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (isWithinRange == true){
|
|
|
|
t.Fatalf("CheckIfInboxIsWithinRange failed test 2.")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetInboxesWithinRangeFunction(t *testing.T){
|
|
|
|
|
|
|
|
testRangeStartString := "aaaaaaaaaaaaaaaa"
|
|
|
|
testRangeEndString := "5555555555555555"
|
|
|
|
|
|
|
|
testRangeStart, err := inbox.ReadInboxString(testRangeStartString)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testRangeStart is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
testRangeEnd, err := inbox.ReadInboxString(testRangeEndString)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testRangeEnd is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
inRangeInbox1String := "aaaaaaaaaaaaaaaa"
|
|
|
|
inRangeInbox2String := "bbbbbbbbbbbbbbbb"
|
|
|
|
inRangeInbox3String := "cccccccccccccccc"
|
2024-06-21 10:47:06 +02:00
|
|
|
inRangeInbox4String := "seekia2222222222"
|
2024-04-11 15:51:56 +02:00
|
|
|
|
|
|
|
inRangeInbox1, err := inbox.ReadInboxString(inRangeInbox1String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("inRangeInbox1String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
inRangeInbox2, err := inbox.ReadInboxString(inRangeInbox2String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("inRangeInbox2String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
inRangeInbox3, err := inbox.ReadInboxString(inRangeInbox3String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("inRangeInbox3String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
inRangeInbox4, err := inbox.ReadInboxString(inRangeInbox4String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("inRangeInbox4String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
2024-06-21 10:47:06 +02:00
|
|
|
outOfRangeInbox1String := "6543222222seekia"
|
2024-04-11 15:51:56 +02:00
|
|
|
outOfRangeInbox2String := "7777777777777777"
|
|
|
|
|
|
|
|
outOfRangeInbox1, err := inbox.ReadInboxString(outOfRangeInbox1String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("outOfRangeInbox1String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
outOfRangeInbox2, err := inbox.ReadInboxString(outOfRangeInbox2String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("outOfRangeInbox2String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
inputList := [][10]byte{inRangeInbox1, outOfRangeInbox1, inRangeInbox2, outOfRangeInbox2, inRangeInbox3, inRangeInbox4}
|
|
|
|
|
|
|
|
expectedOutputList := [][10]byte{inRangeInbox1, inRangeInbox2, inRangeInbox3, inRangeInbox4}
|
|
|
|
|
|
|
|
anyInboxesFound, inRangeInboxesList, err := GetAllInboxesInListWithinRange(testRangeStart, testRangeEnd, inputList)
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("GetAllInboxesInListWithinRange failed with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (anyInboxesFound == false){
|
|
|
|
t.Fatalf("GetAllInboxesInListWithinRange failed to return any inboxes.")
|
|
|
|
}
|
|
|
|
|
|
|
|
if (len(inRangeInboxesList) != 4){
|
|
|
|
t.Fatalf("GetAllInboxesInListWithinRange returning invalid length result.")
|
|
|
|
}
|
|
|
|
|
|
|
|
areEqual := slices.Equal(inRangeInboxesList, expectedOutputList)
|
|
|
|
if (areEqual == false){
|
|
|
|
t.Fatalf("GetAllInboxesInListWithinRange returning invalid in range values list.")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func TestGetInboxIntersectionRangeFunction(t *testing.T){
|
|
|
|
|
|
|
|
testBound1String := "aaaaaaaaaaaaaaaa"
|
|
|
|
testBound2String := "bbbbbbbbbbbbbbbb"
|
|
|
|
testBound3String := "cccccccccccccccc"
|
|
|
|
testBound4String := "dddddddddddddddd"
|
|
|
|
|
|
|
|
testBound1, err := inbox.ReadInboxString(testBound1String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound1String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
testBound2, err := inbox.ReadInboxString(testBound2String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound2String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
testBound3, err := inbox.ReadInboxString(testBound3String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound3String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
testBound4, err := inbox.ReadInboxString(testBound4String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound4String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
anyIntersectionFound, _, _, err := GetInboxIntersectionRangeFromTwoRanges(testBound1, testBound2, testBound3, testBound4)
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("GetInboxIntersectionRangeFromTwoRanges failed test 1 with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (anyIntersectionFound == true){
|
|
|
|
t.Fatalf("GetInboxIntersectionRangeFromTwoRanges failed test 1")
|
|
|
|
}
|
|
|
|
|
|
|
|
anyIntersectionFound, intersectionRangeStart, intersectionRangeEnd, err := GetInboxIntersectionRangeFromTwoRanges(testBound1, testBound3, testBound2, testBound4)
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("GetInboxIntersectionRangeFromTwoRanges failed test 2 with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (anyIntersectionFound == false){
|
|
|
|
t.Fatalf("GetInboxIntersectionRangeFromTwoRanges failed test 2: No intersection found.")
|
|
|
|
}
|
|
|
|
|
|
|
|
if (intersectionRangeStart != testBound2 || intersectionRangeEnd != testBound3){
|
|
|
|
t.Fatalf("GetInboxIntersectionRangeFromTwoRanges failed test 2.")
|
|
|
|
}
|
|
|
|
|
|
|
|
anyIntersectionFound, intersectionRangeStart, intersectionRangeEnd, err = GetInboxIntersectionRangeFromTwoRanges(testBound1, testBound4, testBound2, testBound3)
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("GetInboxIntersectionRangeFromTwoRanges failed test 3 with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (anyIntersectionFound == false){
|
|
|
|
t.Fatalf("GetInboxIntersectionRangeFromTwoRanges failed test 3: No intersection found.")
|
|
|
|
}
|
|
|
|
|
|
|
|
if (intersectionRangeStart != testBound2 || intersectionRangeEnd != testBound3){
|
|
|
|
t.Fatalf("GetInboxIntersectionRangeFromTwoRanges failed test 3.")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetInboxEstimatedItemsInSubrange(t *testing.T){
|
|
|
|
|
|
|
|
testBound1String := "aaaaaaaaaaaaaaaa" // == 0
|
|
|
|
testBound2String := "bbbbbbbbbbbbbbbb" // == 1
|
|
|
|
testBound3String := "cccccccccccccccc" // == 2
|
|
|
|
testBound4String := "dddddddddddddddd" // == 3
|
|
|
|
testBound5String := "eeeeeeeeeeeeeeee" // == 4
|
|
|
|
testBound6String := "ffffffffffffffff" // == 5
|
|
|
|
testBound7String := "gggggggggggggggg" // == 6
|
|
|
|
|
|
|
|
testBound1, err := inbox.ReadInboxString(testBound1String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound1String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
testBound2, err := inbox.ReadInboxString(testBound2String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound2String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
testBound3, err := inbox.ReadInboxString(testBound3String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound3String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
testBound4, err := inbox.ReadInboxString(testBound4String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound4String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
testBound5, err := inbox.ReadInboxString(testBound5String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound5String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
testBound6, err := inbox.ReadInboxString(testBound6String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound6String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
testBound7, err := inbox.ReadInboxString(testBound7String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound7String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
estimatedItems, err := GetEstimatedInboxSubrangeQuantity(testBound1, testBound7, 100, testBound2, testBound5)
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("GetEstimatedInboxSubrangeQuantity failed test 1 with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (estimatedItems != 50){
|
|
|
|
t.Fatalf("GetEstimatedInboxSubrangeQuantity failed test 1.")
|
|
|
|
}
|
|
|
|
|
|
|
|
estimatedItems, err = GetEstimatedInboxSubrangeQuantity(testBound1, testBound6, 100, testBound1, testBound2)
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("GetEstimatedInboxSubrangeQuantity failed test 2 with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (estimatedItems != 20){
|
|
|
|
t.Fatalf("GetEstimatedInboxSubrangeQuantity failed test 2.")
|
|
|
|
}
|
|
|
|
|
|
|
|
estimatedItems, err = GetEstimatedInboxSubrangeQuantity(testBound1, testBound6, 100, testBound3, testBound4)
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("GetEstimatedInboxSubrangeQuantity failed test 3 with error: " + err.Error())
|
|
|
|
}
|
|
|
|
if (estimatedItems != 20){
|
|
|
|
t.Fatalf("GetEstimatedInboxSubrangeQuantity failed test 3.")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func TestSplitIntoSubrangesFunction(t *testing.T){
|
|
|
|
|
|
|
|
testBound1String := "aaaaaaaaaaaaaaaa"
|
|
|
|
testBound2String := "cccccccccccccccc"
|
|
|
|
|
|
|
|
testBound1, err := inbox.ReadInboxString(testBound1String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound1String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
testBound2, err := inbox.ReadInboxString(testBound2String)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("testBound2String is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
subrangesList, err := SplitInboxRangeIntoEqualSubranges(testBound1, testBound2, 100, 50)
|
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("SplitInboxRangeIntoEqualSubranges failed with error: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
if (len(subrangesList) != 2){
|
|
|
|
t.Fatalf("SplitInboxRangeIntoEqualSubranges failed: Subranges list not 2 items in length.")
|
|
|
|
}
|
|
|
|
|
|
|
|
subrange1StartString := "aaaaaaaaaaaaaaaa"
|
|
|
|
subrange1EndString := "bbbbbbbbbbbbbbbb"
|
|
|
|
|
|
|
|
subrange2StartString := "bbbbbbbbbbbbbbbc"
|
|
|
|
subrange2EndString := "cccccccccccccccc"
|
|
|
|
|
|
|
|
subrange1Start, err := inbox.ReadInboxString(subrange1StartString)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("subrange1StartString is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
subrange1End, err := inbox.ReadInboxString(subrange1EndString)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("subrange1EndString is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
subrange2Start, err := inbox.ReadInboxString(subrange2StartString)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("subrange2StartString is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
subrange2End, err := inbox.ReadInboxString(subrange2EndString)
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("subrange2EndString is invalid: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
subrange1 := InboxSubrange{
|
|
|
|
SubrangeStart: subrange1Start,
|
|
|
|
SubrangeEnd: subrange1End,
|
|
|
|
}
|
|
|
|
|
|
|
|
subrange2 := InboxSubrange{
|
|
|
|
|
|
|
|
SubrangeStart: subrange2Start,
|
|
|
|
SubrangeEnd: subrange2End,
|
|
|
|
}
|
|
|
|
|
|
|
|
expectedSubrangesList := []InboxSubrange{subrange1, subrange2}
|
|
|
|
|
|
|
|
areEqual := slices.Equal(subrangesList, expectedSubrangesList)
|
|
|
|
if (areEqual == false){
|
|
|
|
t.Fatalf("SplitInboxRangeIntoEqualSubranges failed: Expected map list does not match.")
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|