Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add a new "testset" to the speedtest1 program: The sudoku solver. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
4677ef2f8a726573c48ee2e532c00a68 |
User & Date: | drh 2014-02-09 00:18:21.530 |
Context
2014-02-09
| ||
00:52 | Add the Mandelbrot Set testcase to the "cte" testset of speedtest1. (check-in: 56febbeb57 user: drh tags: trunk) | |
00:18 | Add a new "testset" to the speedtest1 program: The sudoku solver. (check-in: 4677ef2f8a user: drh tags: trunk) | |
2014-02-08
| ||
23:20 | Do away with the "multi-register pseudo-table" abstration. Instead, just use an OP_SCopy to load results directory from the result registers of the co-routine. (check-in: 1e64dd782a user: drh tags: trunk) | |
Changes
Changes to test/speedtest1.c.
︙ | ︙ | |||
732 733 734 735 736 737 738 739 740 741 742 743 744 745 | speedtest1_end_test(); speedtest1_begin_test(990, "ANALYZE"); speedtest1_exec("ANALYZE"); speedtest1_end_test(); } /* ** A testset used for debugging speedtest1 itself. */ void testset_debug1(void){ unsigned i, n; unsigned x1, x2; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 | speedtest1_end_test(); speedtest1_begin_test(990, "ANALYZE"); speedtest1_exec("ANALYZE"); speedtest1_end_test(); } /* ** A testset for common table expressions. This exercises code ** for views, subqueries, co-routines, etc. */ void testset_cte(void){ static const char *azPuzzle[] = { /* Easy */ "534...9.." "67.195..." ".98....6." "8...6...3" "4..8.3..1" "....2...6" ".6....28." "...419..5" "...28..79", /* Medium */ "53....9.." "6..195..." ".98....6." "8...6...3" "4..8.3..1" "....2...6" ".6....28." "...419..5" "....8..79", /* Hard */ "53......." "6..195..." ".98....6." "8...6...3" "4..8.3..1" "....2...6" ".6....28." "...419..5" "....8..79", }; const char *zPuz; if( g.szTest<25 ){ zPuz = azPuzzle[0]; }else if( g.szTest<70 ){ zPuz = azPuzzle[1]; }else{ zPuz = azPuzzle[2]; } speedtest1_begin_test(100, "Sudoku with recursive 'digits'"); speedtest1_prepare( "WITH RECURSIVE\n" " input(sud) AS (VALUES(?1)),\n" " digits(z,lp) AS (\n" " VALUES('1', 1)\n" " UNION ALL\n" " SELECT CAST(lp+1 AS TEXT), lp+1 FROM digits WHERE lp<9\n" " ),\n" " x(s, ind) AS (\n" " SELECT sud, instr(sud, '.') FROM input\n" " UNION ALL\n" " SELECT\n" " substr(s, 1, ind-1) || z || substr(s, ind+1),\n" " instr( substr(s, 1, ind-1) || z || substr(s, ind+1), '.' )\n" " FROM x, digits AS z\n" " WHERE ind>0\n" " AND NOT EXISTS (\n" " SELECT 1\n" " FROM digits AS lp\n" " WHERE z.z = substr(s, ((ind-1)/9)*9 + lp, 1)\n" " OR z.z = substr(s, ((ind-1)%%9) + (lp-1)*9 + 1, 1)\n" " OR z.z = substr(s, (((ind-1)/3) %% 3) * 3\n" " + ((ind-1)/27) * 27 + lp\n" " + ((lp-1) / 3) * 6, 1)\n" " )\n" " )\n" "SELECT s FROM x WHERE ind=0;" ); sqlite3_bind_text(g.pStmt, 1, zPuz, -1, SQLITE_STATIC); speedtest1_run(); speedtest1_end_test(); speedtest1_begin_test(200, "Sudoku with VALUES 'digits'"); speedtest1_prepare( "WITH RECURSIVE\n" " input(sud) AS (VALUES(?1)),\n" " digits(z,lp) AS (VALUES('1',1),('2',2),('3',3),('4',4),('5',5),\n" " ('6',6),('7',7),('8',8),('9',9)),\n" " x(s, ind) AS (\n" " SELECT sud, instr(sud, '.') FROM input\n" " UNION ALL\n" " SELECT\n" " substr(s, 1, ind-1) || z || substr(s, ind+1),\n" " instr( substr(s, 1, ind-1) || z || substr(s, ind+1), '.' )\n" " FROM x, digits AS z\n" " WHERE ind>0\n" " AND NOT EXISTS (\n" " SELECT 1\n" " FROM digits AS lp\n" " WHERE z.z = substr(s, ((ind-1)/9)*9 + lp, 1)\n" " OR z.z = substr(s, ((ind-1)%%9) + (lp-1)*9 + 1, 1)\n" " OR z.z = substr(s, (((ind-1)/3) %% 3) * 3\n" " + ((ind-1)/27) * 27 + lp\n" " + ((lp-1) / 3) * 6, 1)\n" " )\n" " )\n" "SELECT s FROM x WHERE ind=0;" ); sqlite3_bind_text(g.pStmt, 1, zPuz, -1, SQLITE_STATIC); speedtest1_run(); speedtest1_end_test(); } /* ** A testset used for debugging speedtest1 itself. */ void testset_debug1(void){ unsigned i, n; unsigned x1, x2; |
︙ | ︙ | |||
941 942 943 944 945 946 947 948 949 950 951 952 953 954 | } if( g.bExplain ) printf(".explain\n.echo on\n"); if( strcmp(zTSet,"main")==0 ){ testset_main(); }else if( strcmp(zTSet,"debug1")==0 ){ testset_debug1(); }else{ fatal_error("unknown testset: \"%s\"\n", zTSet); } speedtest1_final(); /* Database connection statistics printed after both prepared statements ** have been finalized */ | > > | 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 | } if( g.bExplain ) printf(".explain\n.echo on\n"); if( strcmp(zTSet,"main")==0 ){ testset_main(); }else if( strcmp(zTSet,"debug1")==0 ){ testset_debug1(); }else if( strcmp(zTSet,"cte")==0 ){ testset_cte(); }else{ fatal_error("unknown testset: \"%s\"\n", zTSet); } speedtest1_final(); /* Database connection statistics printed after both prepared statements ** have been finalized */ |
︙ | ︙ |