diff options
Diffstat (limited to 'tests/storagetest.cpp')
-rw-r--r-- | tests/storagetest.cpp | 109 |
1 files changed, 106 insertions, 3 deletions
diff --git a/tests/storagetest.cpp b/tests/storagetest.cpp index 925d1d9..3d583ab 100644 --- a/tests/storagetest.cpp +++ b/tests/storagetest.cpp | |||
@@ -792,14 +792,28 @@ private slots: | |||
792 | auto db = transaction.openDatabase("testIntegerKeys", {}, flags); | 792 | auto db = transaction.openDatabase("testIntegerKeys", {}, flags); |
793 | db.write(0, "value1"); | 793 | db.write(0, "value1"); |
794 | db.write(1, "value2"); | 794 | db.write(1, "value2"); |
795 | |||
796 | size_t resultKey; | ||
795 | QByteArray result; | 797 | QByteArray result; |
796 | int numValues = db.scan(0, [&](size_t, const QByteArray &value) -> bool { | 798 | int numValues = db.scan(0, [&](size_t key, const QByteArray &value) -> bool { |
799 | resultKey = key; | ||
797 | result = value; | 800 | result = value; |
798 | return true; | 801 | return true; |
799 | }); | 802 | }); |
800 | 803 | ||
801 | QCOMPARE(numValues, 1); | 804 | QCOMPARE(numValues, 1); |
805 | QCOMPARE(resultKey, 0); | ||
802 | QCOMPARE(result, "value1"); | 806 | QCOMPARE(result, "value1"); |
807 | |||
808 | int numValues2 = db.scan(1, [&](size_t key, const QByteArray &value) -> bool { | ||
809 | resultKey = key; | ||
810 | result = value; | ||
811 | return true; | ||
812 | }); | ||
813 | |||
814 | QCOMPARE(numValues2, 1); | ||
815 | QCOMPARE(resultKey, 1); | ||
816 | QCOMPARE(result, "value2"); | ||
803 | } | 817 | } |
804 | 818 | ||
805 | void testDuplicateIntegerKeys() | 819 | void testDuplicateIntegerKeys() |
@@ -853,8 +867,97 @@ private slots: | |||
853 | 867 | ||
854 | QCOMPARE(numValues, 2); | 868 | QCOMPARE(numValues, 2); |
855 | QCOMPARE(results.size(), 2); | 869 | QCOMPARE(results.size(), 2); |
856 | QVERIFY(results[0] == number1BA); | 870 | QCOMPARE(results[0], number1BA); |
857 | QVERIFY(results[1] == number2BA); | 871 | QCOMPARE(results[1], number2BA); |
872 | } | ||
873 | |||
874 | void testIntegerKeyMultipleOf256() | ||
875 | { | ||
876 | const int flags = Sink::Storage::IntegerKeys; | ||
877 | Sink::Storage::DataStore store(testDataPath, | ||
878 | { dbName, { {"testIntegerKeyMultipleOf256", flags} } }, | ||
879 | Sink::Storage::DataStore::ReadWrite); | ||
880 | |||
881 | { | ||
882 | auto transaction = store.createTransaction(Sink::Storage::DataStore::ReadWrite); | ||
883 | auto db = transaction.openDatabase("testIntegerKeyMultipleOf256", {}, flags); | ||
884 | |||
885 | db.write(0x100, "hello"); | ||
886 | db.write(0x200, "hello2"); | ||
887 | db.write(0x42, "hello3"); | ||
888 | |||
889 | transaction.commit(); | ||
890 | } | ||
891 | |||
892 | { | ||
893 | auto transaction2 = store.createTransaction(Sink::Storage::DataStore::ReadWrite); | ||
894 | auto db = transaction2.openDatabase("testIntegerKeyMultipleOf256", {}, flags); | ||
895 | |||
896 | size_t resultKey; | ||
897 | QByteArray resultValue; | ||
898 | db.scan(0x100, [&] (size_t key, const QByteArray &value) { | ||
899 | resultKey = key; | ||
900 | resultValue = value; | ||
901 | return false; | ||
902 | }); | ||
903 | |||
904 | QCOMPARE(resultKey, 0x100); | ||
905 | QCOMPARE(resultValue, "hello"); | ||
906 | } | ||
907 | } | ||
908 | |||
909 | void testIntegerProperlySorted() | ||
910 | { | ||
911 | const int flags = Sink::Storage::IntegerKeys; | ||
912 | Sink::Storage::DataStore store(testDataPath, | ||
913 | { dbName, { {"testIntegerProperlySorted", flags} } }, | ||
914 | Sink::Storage::DataStore::ReadWrite); | ||
915 | |||
916 | { | ||
917 | auto transaction = store.createTransaction(Sink::Storage::DataStore::ReadWrite); | ||
918 | auto db = transaction.openDatabase("testIntegerProperlySorted", {}, flags); | ||
919 | |||
920 | for (size_t i = 0; i < 0x100; ++i) { | ||
921 | db.write(i, "hello"); | ||
922 | } | ||
923 | |||
924 | size_t previous = 0; | ||
925 | bool success = true; | ||
926 | db.scan("", [&] (const QByteArray &key, const QByteArray &value) { | ||
927 | size_t current = Sink::byteArrayToSizeT(key); | ||
928 | if (current < previous) { | ||
929 | success = false; | ||
930 | return false; | ||
931 | } | ||
932 | |||
933 | previous = current; | ||
934 | return true; | ||
935 | }); | ||
936 | |||
937 | QVERIFY2(success, "Integer are not properly sorted before commit"); | ||
938 | |||
939 | transaction.commit(); | ||
940 | } | ||
941 | |||
942 | { | ||
943 | auto transaction = store.createTransaction(Sink::Storage::DataStore::ReadWrite); | ||
944 | auto db = transaction.openDatabase("testIntegerProperlySorted", {}, flags); | ||
945 | |||
946 | size_t previous = 0; | ||
947 | bool success = true; | ||
948 | db.scan("", [&] (const QByteArray &key, const QByteArray &value) { | ||
949 | size_t current = Sink::byteArrayToSizeT(key); | ||
950 | if (current < previous) { | ||
951 | success = false; | ||
952 | return false; | ||
953 | } | ||
954 | |||
955 | previous = current; | ||
956 | return true; | ||
957 | }); | ||
958 | |||
959 | QVERIFY2(success, "Integer are not properly sorted after commit"); | ||
960 | } | ||
858 | } | 961 | } |
859 | 962 | ||
860 | }; | 963 | }; |