diff options
author | tomsmeding <tom.smeding@gmail.com> | 2017-08-08 18:25:28 +0200 |
---|---|---|
committer | tomsmeding <tom.smeding@gmail.com> | 2017-08-08 18:25:28 +0200 |
commit | 4f34eb13d06cdfa7b526f7e0aced9955808ee0d3 (patch) | |
tree | 91707211e007ad3f2cfbadd0d7b3292a3e0cad88 /test | |
parent | 0bb9d719c86db457439ee8e012eb141c76eed307 (diff) |
Add faster interpreter, and some stuff
Diffstat (limited to 'test')
-rw-r--r-- | test/Makefile | 4 | ||||
-rwxr-xr-x | test/brace16 | bin | 0 -> 12984 bytes | |||
-rw-r--r-- | test/brace16.c | 58 | ||||
-rw-r--r-- | test/notes.txt | 6 | ||||
-rwxr-xr-x | test/test | bin | 0 -> 8632 bytes | |||
-rw-r--r-- | test/test.c | 45 |
6 files changed, 113 insertions, 0 deletions
diff --git a/test/Makefile b/test/Makefile new file mode 100644 index 0000000..224fc85 --- /dev/null +++ b/test/Makefile @@ -0,0 +1,4 @@ +CC = gcc +CFLAGS = -Wall -Wextra -std=c11 -O2 -fwrapv + +all: test brace16 diff --git a/test/brace16 b/test/brace16 Binary files differnew file mode 100755 index 0000000..fb36801 --- /dev/null +++ b/test/brace16 diff --git a/test/brace16.c b/test/brace16.c new file mode 100644 index 0000000..58273d3 --- /dev/null +++ b/test/brace16.c @@ -0,0 +1,58 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int expand(char *dst,char ch,int amount){ +#define WRITE(s__) {int l__=strlen(s__); if(dst){memcpy(dst,s__,l__+1); dst+=l__;} written+=l__;} +#define WGOTO(i__) {while(curpos<i__){WRITE(">"); curpos++;} while(curpos>i__){WRITE("<"); curpos--;}} +#define WMOVE(i1__,i2__) {int p__=curpos; WGOTO(i1__); WRITE("[-"); WGOTO(i2__); WRITE("+"); WGOTO(i1__); WRITE("]"); WGOTO(p__);} + int written=0,curpos=0; + switch(str[i]){ + case '+': //strcpy(p,"+>+[->+<]>[<<->>[-<+>]]<<"); p+=25; break; + case '+': //strcpy(p,"+>+[<->[->+<]]>[-<+>]<<"); p+=23; break; + case '+': + WRITE("+"); + for(int i=1;i<amount;i++){WGOTO(i); WRITE("+");} + for(int i=1;i<amount;i++){ + WGOTO(i); + WRITE("["); + WRITE("<->"); + } + case '-': strcpy(p,"->[->+<]>[<<+>>[-<+>]]<-<"); p+=25; break; + case '[': strcpy(p,"[->>+>>>+<<<<<]>>>>>[<<<[-<<+>>]+>>>[-]]<<<<[->+>>>+<<<<]>>>>[[-<<<-<+>>>>]<<<+>>>]<<<[[-]<<"); p+=92; break; + case ']': strcpy(p,"[->>+>>>+<<<<<]>>>>>[<<<[-<<+>>]+>>>[-]]<<<<[->+>>>+<<<<]>>>>[[-<<<-<+>>>>]<<<+>>>]<<<]<<"); p+=89; break; + case '>': strcpy(p,">>>"); p+=3; break; + case '<': strcpy(p,"<<<"); p+=3; break; + case ',': strcpy(p,"[-]>,<"); p+=6; break; + case '.': strcpy(p,">.<"); p+=3; break; + default: *(p++)=str[i]; break; + } + return res; +#undef WRITE +#undef WGOTO +#undef WMOVE +} + +int main(void){ + int amount=1; + char c; + while((c=getchar())!=EOF){ + if(c=='{'){ + amount++; + } else if(c=='}'){ + amount--; + if(amount<=0){ + fprintf(stderr,"More '}' than '{'\n"); + return 1; + } + } else if(amount==1){ + putchar(c); + } else { + int len=expand(NULL,c,amount); + char *str=malloc(len+1); + expand(str,c,amount); + printf("%s",str); + free(str); + } + } +} diff --git a/test/notes.txt b/test/notes.txt new file mode 100644 index 0000000..defedd4 --- /dev/null +++ b/test/notes.txt @@ -0,0 +1,6 @@ ++: +>+[->+<]>[<<->>[-<+>]]<< +-: ->[->+<]>[<<+>>[-<+>]]<-< +[: [->>+>>>+<<<<<]>>>>>[<<<[-<<+>>]+>>>[-]]<<<<[->+>>>+<<<<]>>>>[[-<<<-<+>>>>]<<<+>>>]<<<[[-]<< +]: [->>+>>>+<<<<<]>>>>>[<<<[-<<+>>]+>>>[-]]<<<<[->+>>>+<<<<]>>>>[[-<<<-<+>>>>]<<<+>>>]<<<]<< +>: >>> +<: <<< diff --git a/test/test b/test/test Binary files differnew file mode 100755 index 0000000..2ea9788 --- /dev/null +++ b/test/test diff --git a/test/test.c b/test/test.c new file mode 100644 index 0000000..bdc11fc --- /dev/null +++ b/test/test.c @@ -0,0 +1,45 @@ +#include <stdio.h> +#include <stdint.h> + +// typedef uint32_t SF; +// const int ush=24,ssh=31; +typedef uint16_t SF; +const int ush=11,ssh=15; + +SF mul(SF a,SF b){ + SF sg=1; + if(a>=(1<<ssh)){a=-a; sg*=-1;} + if(b>=(1<<ssh)){b=-b; sg*=-1;} + return sg*(SF)(((uint64_t)a*(uint64_t)b)>>ush); +} + +SF mk(int i){ + return i<<ush; +} + +float flt(SF a){ + float sg=1; + if(a>=(1<<ssh)){a=-a; sg*=-1;} + return (float)a/(float)(1<<ush)*sg; +} + +int main(void){ + const SF L=mk(-2),R=mk(1); + const SF T=mk(1),B=-(mk(1)); + for(SF y=T;y!=B-(mk(1)>>4);y-=mk(1)>>4){ + for(SF x=L;x!=R;x+=mk(1)>>5){ + int n=0; + SF a=x,b=y,a2=mul(a,a),b2=mul(b,b); + while(n<26&&a2+b2<mk(4)){ + b=mul(mk(2),mul(a,b))+y; + a=a2-b2+x; + a2=mul(a,a); + b2=mul(b,b); + n++; + } + if(n==26)putchar(' '); + else putchar('A'+n); + } + putchar('\n'); + } +} |